Skip to content

API User Guide

This document provides API reference and examples for using PaaS APIs. A Postman collection is available to accompany this documentation.


Typical Workflows

VM Creation/Update Workflow

  1. Create/Apply VM configuration
  2. Deploy (Publish) the VM
  3. Monitor status until terminal state

VM Action Workflow

  1. Get VM to retrieve available actions
  2. Execute action (start/stop/reboot)
  3. Monitor status

VM Delete Workflow

  1. Delete VM
  2. Monitor until removal is complete

Compute Profiles

Compute/Service Profiles define the specifications for virtual machines.

Info

See the VM Type documentation for more details about virtual machine compute profiles.

Assumption: Compute profiles are shared to the organization and in-turn shared to required projects.

List Compute/Service Profiles

Request Semantics

Parameter Value
Method GET
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/computeprofiles or /apis/paas.envmgmt.io/v1/projects/{{projectName}}/serviceprofiles

Headers

Header Description
X-API-KEY <apiKey>

Query Parameters

Parameter Type Default Description
limit Number 50 Number greater than zero
offset Number 0 Number greater than zero
order Enum DESC ASC or DESC
orderBy Enum createdAt Field to order by

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/computeprofiles?limit=1000&offset=0&order=DESC&orderBy=createdAt' \
--header 'accept: application/json' \
--header 'x-api-key: ra2.da0.....515304'

Example Response

{
    "apiVersion": "paas.envmgmt.io/v1",
    "kind": "ComputeProfileList",
    "metadata": {
        "count": 1,
        "limit": 50
    },
    "items": [
        {
            "apiVersion": "paas.envmgmt.io/v1",
            "kind": "ComputeProfile",
            "metadata": {
                "name": "1gpu-vm",
                "project": "vm-project",
                "displayName": "1 x H200 GPU VM"
            }
        }
    ]
}

Workspaces

Workspaces allow end users to group and organize resources.

Info

See the Workspaces documentation for more details.

List Workspaces

Request Semantics

Parameter Value
Method GET
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces

Headers

Header Description
X-API-KEY <apiKey>

Query Parameters

Parameter Type Default Description
limit Number 50 Number greater than zero
offset Number 0 Number greater than zero
order Enum DESC ASC or DESC
orderBy Enum createdAt Field to order by

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces?limit=1000&offset=0&order=DESC&orderBy=createdAt' \
--header 'accept: application/json' \
--header 'x-api-key: ra2.da0b4.....515304'

Example Response

{
    "apiVersion": "paas.envmgmt.io/v1",
    "kind": "WorkspaceList",
    "metadata": {
        "count": 1,
        "limit": 50
    },
    "items": [
        {
            "apiVersion": "paas.envmgmt.io/v1",
            "kind": "Workspace",
            "metadata": {
                "name": "dev",
                "project": "vm-project",
                "id": "0199dfc7-9552-70e0-a20e-0fc9bfab1b19",
                "modifiedAt": "2025-10-13T22:53:43.122049Z",
                "createdAt": "2025-10-13T22:53:43.122049Z"
            }
        }
    ]
}

Apply Workspace

The same API can be used for both create and update operations.

Request Semantics

Parameter Value
Method POST
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces

Headers

Header Description
X-API-KEY <apiKey>

Query Parameters

Parameter Type Description
fail-on-exists Boolean Whether the API should fail if the object already exists

Request Body

{
    "apiVersion": "paas.envmgmt.io/v1",
    "kind": "Workspace",
    "metadata": {
        "name": "{{workspaceName}}",
        "project": "{{projectName}}",
        "displayName": "",
        "description": ""
    }
}

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces?fail-on-exists=true' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'x-api-key: ra2.da0b4.....515304' \
--data '{
    "apiVersion": "paas.envmgmt.io/v1",
    "kind": "Workspace",
    "metadata": {
        "name": "dev",
        "project": "vm-project",
        "displayName": "",
        "description": ""
    }
}'

Example Response

{
   "apiVersion": "paas.envmgmt.io/v1",
   "kind": "Workspace",
   "metadata": {
       "name": "dev1",
       "project": "vm-project",
       "modifiedAt": "2025-10-14T18:14:03.687874Z",
       "createdAt": "2025-10-14T18:14:03.687874Z"
   }
}

Get Workspace

Request Semantics

Parameter Value
Method GET
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}

Headers

Header Description
X-API-KEY <apiKey>

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1' \
--header 'accept: application/json' \
--header 'x-api-key: ra2.da0b4.....515304'

Example Response

{
   "apiVersion": "paas.envmgmt.io/v1",
   "kind": "Workspace",
   "metadata": {
       "name": "dev",
       "project": "vm-project",
       "modifiedAt": "2025-10-13T22:53:43.122049Z",
       "createdAt": "2025-10-13T22:53:43.122049Z"
   }
}

Delete Workspace

Request Semantics

Parameter Value
Method DELETE
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}

Headers

Header Description
X-API-KEY <apiKey>

Example Request

curl --location --request DELETE 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1' \
--header 'accept: application/json' \
--header 'x-api-key: ra2.da0b4.....515304'

Example Response

null

Virtual Machines

Apply VM

Creates or updates a virtual machine configuration.

Assumptions:

  • Workspace is pre-created
  • VPC onboarding is performed by the CSP before handing over the organization to you

Request Semantics

Parameter Value
Method POST
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/computeinstances

Headers

Header Description
X-API-KEY <apiKey>

Query Parameters

Parameter Type Description
fail-on-exists Boolean Whether to fail the request if the object already exists

Note

Variable Value Convention: Omit the value instead of specifying an empty string to indicate no input provided by the end-user.

Request Body Schema

{
   "apiVersion": "paas.envmgmt.io/v1",
   "kind": "ComputeInstance",
   "metadata": {
       "workspace": "{{workspaceName}}",
       "project": "{{projectName}}",
       "labels": {
           "paas.envmgmt.io/compute_type": "vm",
           "paas.envmgmt.io/compute_type_provider": "kvm"
       },
       "name": "{{vmName}}",
       "description": "{{vmDescription}}"
   },
   "spec": {
       "computeProfile": {
           "name": "{{computeProfileName}}",
           "systemCatalog": true
       },
       "variables": [
           {
               "name": "Assign Public IP to Guest",
               "value": "True"
           },
           {
               "name": "Firewall Rules",
               "value": "{{ingressFirewallRules}}"
           },
           {
               "name": "Enable OTEL Collector",
               "value": "True"
           },
           {
               "name": "Port Forwards",
               "value": "{{portForwards}}"
           },
           {
               "name": "Guest Password",
               "value": "{{password}}"
           },
           {
               "name": "SSH Public Keys",
               "value": "{{sshPublicKey}}"
           }
       ]
   }
}

Ingress Firewall Rules Schema

Ingress firewall rules is a JSON string with the following structure:

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "source_cidr": {
        "title": "Source",
        "description": "Source identifier. Accepts 'any', a CIDR range, or a comma-separated list of IP addresses.",
        "type": "string"
      },
      "action": {
        "title": "Rule Type",
        "description": "Rule action",
        "type": "string",
        "enum": ["allow", "drop"]
      },
      "application": {
        "title": "Application(s)",
        "description": "A comma-separated list of application names.",
        "type": "string"
      },
      "port": {
        "title": "Destination Port",
        "description": "Port number (1-65535)",
        "type": "integer",
        "minimum": 1,
        "maximum": 65535
      },
      "protocol": {
        "title": "Protocol",
        "description": "Protocol type",
        "type": "string",
        "enum": ["tcp", "udp"]
      }
    },
    "required": ["source_cidr", "action", "application"]
  }
}

Port Forwarding Schema

Warning

Port forwarding configuration is mutually exclusive with public IP.

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "source": {
        "title": "Source",
        "description": "Source identifier in public network. Accepts 'any', a CIDR range, or a comma-separated list of IP addresses.",
        "type": "string"
      },
      "application": {
        "title": "Application",
        "description": "Application name that needs to be allowed from public network",
        "type": "string"
      },
      "internal_port": {
        "title": "Application Port to Allow",
        "description": "Port number (1-65535)",
        "type": "integer",
        "minimum": 1,
        "maximum": 65535
      },
      "protocol": {
        "title": "Protocol",
        "description": "Protocol type",
        "type": "string",
        "enum": ["tcp", "udp"]
      }
    },
    "required": ["source", "internal_port"]
  }
}

Response Schema

The response contains the following high-level fields: spec, status, kind, and metadata.

Status Fields:

Field Description
status Status of VM deployment. Default: not_deployed. Terminal statuses: failed, success, or destroyfailed
reason Reason indicating why the object reached that status
actions List of available actions (e.g., start, stop, reboot)
output List of templates deployed for the object

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/computeinstances' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'x-api-key: ra2.da0b4.....515304' \
--data '{
    "apiVersion": "paas.envmgmt.io/v1",
    "kind": "ComputeInstance",
    "metadata": {
        "workspace": "dev1",
        "project": "vm-project",
        "labels": {
            "paas.envmgmt.io/compute_type": "vm",
            "paas.envmgmt.io/compute_type_provider": "kvm"
        },
        "name": "vm-test-api-4",
        "description": "This VM is being created by API"
    },
    "spec": {
        "computeProfile": {
            "name": "1gpu-vm",
            "systemCatalog": true
        },
        "variables": [
            {
                "name": "Assign Public IP to Guest",
                "value": "True"
            },
            {
                "name": "Firewall Rules",
                "value": "[{\"source_cidr\":\"any\",\"action\":\"allow\",\"application\":\"ssh\",\"port\":22,\"protocol\":\"tcp\"},{\"source_cidr\":\"any\",\"action\":\"allow\",\"application\":\"https\",\"port\":443,\"protocol\":\"tcp\"}]"
            },
            {
                "name": "Enable OTEL Collector",
                "value": "True"
            },
            {
                "name": "Port Forwards",
                "value": "[]"
            },
            {
                "name": "Guest Password",
                "value": "vm1234"
            },
            {
                "name": "SSH Public Keys",
                "value": "{{sshPublicKey}}"
            }
        ]
    }
}'

List Virtual Machines

Request Semantics

Parameter Value
Method GET
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/computeinstances

Headers

Header Description
X-API-KEY <apiKey>

Query Parameters

Parameter Type Default Description
limit Number 50 Number greater than zero
offset Number 0 Number greater than zero
order Enum DESC ASC or DESC
orderBy Enum createdAt Field to order by

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/computeinstances?limit=1000&offset=0&order=DESC&orderBy=createdAt' \
--header 'accept: application/json' \
--header 'x-api-key: ra2.da0b4.....515304'

Get Virtual Machine

Request Semantics

Parameter Value
Method GET
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/computeinstances/{{vmName}}

Headers

Header Description
X-API-KEY <apiKey>

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/computeinstances/vm-test-api-4' \
--header 'accept: application/json' \
--header 'x-api-key: ra2.da0b4......515304'

Deploy Virtual Machine

Deploys a VM or updates a VM in case of Day-2 operations.

Request Semantics

Parameter Value
Method POST
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/computeinstances/{{vmName}}/publish

Headers

Header Description
X-API-KEY <apiKey>

Request Body

{}

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/computeinstances/vm-test-api-4/publish' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'x-api-key: ra2.da0b4.....515304' \
--data '{}'

Example Response

{}

Delete Virtual Machine

Request Semantics

Parameter Value
Method DELETE
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/computeinstances/{{vmName}}

Headers

Header Description
X-API-KEY <apiKey>

Example Request

curl --location --globoff --request DELETE 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/computeinstances/{{vmName}}' \
--header 'accept: application/json' \
--header 'x-api-key: ra2.da0b4......515304'

Example Response

null

Actions on VM

Perform actions such as start, stop, or reboot on a virtual machine.

Request Semantics

Parameter Value
Method POST
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/computeinstances/{{vmName}}/action/{{action}}

Valid Actions: start, stop, reboot

Headers

Header Description
X-API-KEY <apiKey>

Request Body

{}

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/computeinstances/vm-test-api-1/action/stop' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'x-api-key: ra2.da0b4......515304' \
--data '{}'

Example Response

{}

Services

Services provide managed capabilities such as Jupyter Notebooks and Inference endpoints.

Apply Service

Creates or updates a service configuration.

Assumptions:

  • Workspace is pre-created
  • VPC onboarding is performed by the CSP before handing over the organization to you

Request Semantics

Parameter Value
Method POST
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/services

Headers

Header Description
X-API-KEY <apiKey>

Query Parameters

Parameter Type Description
fail-on-exists Boolean Whether to fail the request if the object already exists

Request Body Schema

{
   "apiVersion": "paas.envmgmt.io/v1",
   "kind": "Service",
   "metadata": {
       "workspace": "{{workspaceName}}",
       "project": "{{projectName}}",
       "labels": {
           "paas.envmgmt.io/compute_type": "vm",
           "paas.envmgmt.io/compute_type_provider": "kvm"
       },
       "name": "{{serviceName}}",
       "description": "{{serviceDescription}}"
   },
   "spec": {
       "serviceProfile": {
           "name": "{{serviceProfileName}}",
           "systemCatalog": true
       },
       "variables": [
           {
               "name": "Jupyter Notebook Config",
               "value": "{{jupyterNotebookConfig}}"
           },
           {
               "name": "Certificate Handling",
               "value": "True"
           },
           {
               "name": "Firewall Rules",
               "value": "{{ingressFirewallRules}}"
           },
           {
               "name": "Enable OTEL Collector",
               "value": "True"
           },
           {
               "name": "Port Forwards",
               "value": "{{portForwards}}"
           },
           {
               "name": "Guest Password",
               "value": "{{password}}"
           },
           {
               "name": "SSH Public Keys",
               "value": "{{sshPublicKey}}"
           }
       ]
   }
}

Jupyter Notebook Configuration Schema

{
  "type": "object",
  "properties": {
    "Jupyter_Notebook_Image": {
      "type": "string",
      "description": "Docker image for the Jupyter notebook container",
      "examples": ["jupyter/scipy-notebook:latest", "jupyter/tensorflow-notebook:latest"]
    },
    "Jupyter_Notebook_Token": {
      "type": "string",
      "description": "Authentication token for Jupyter notebook access"
    },
    "Jupyter_Notebook_Hostname": {
      "type": "string",
      "description": "Hostname for the Jupyter notebook service",
      "format": "hostname"
    },
    "Jupyter_Notebook_Nginx_Port": {
      "type": "integer",
      "description": "Port number for Nginx proxy to Jupyter notebook",
      "minimum": 1,
      "maximum": 65535,
      "examples": [8080, 8888, 9000]
    }
  }
}

Inference Configuration Schema

{
  "type": "object",
  "properties": {
    "Inference_enabled": {
      "type": "string",
      "description": "Enable or disable inference service",
      "enum": ["True", "False"],
      "default": "False"
    },
    "Inference_image": {
      "type": "string",
      "description": "Docker image for VLLM service",
      "default": "vllm/vllm-openai:v0.7.3"
    },
    "Inference_model": {
      "type": "string",
      "description": "Model name to load in VLLM",
      "examples": ["microsoft/DialoGPT-medium", "meta-llama/Llama-2-7b-chat-hf"]
    },
    "Hugging_Face_Token": {
      "type": "string",
      "description": "Hugging Face Hub token for accessing models"
    },
    "Inference_api_key": {
      "type": "string",
      "description": "API key for VLLM authentication"
    },
    "Inference_hostname": {
      "type": "string",
      "description": "Hostname for the Nginx server"
    },
    "Inference_nginx_port": {
      "type": "integer",
      "description": "Port on which Nginx listens",
      "default": 443
    },
    "Inference_kv_cache_dtype": {
      "type": "string",
      "description": "KV cache data type",
      "enum": ["auto", "fp8", "fp16", "fp32", "int8"],
      "default": "auto"
    },
    "Inference_gpu_memory_util": {
      "type": "number",
      "description": "GPU memory utilization ratio",
      "minimum": 0.1,
      "maximum": 1.0,
      "default": 0.9
    },
    "Inference_max_model_len": {
      "type": "integer",
      "description": "Maximum model length",
      "default": 1024
    },
    "Inference_dtype": {
      "type": "string",
      "description": "Model data type",
      "enum": ["float16", "float32", "bfloat16", "int8", "int4"],
      "default": "float16"
    }
  }
}

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/services' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'x-api-key: ra2.da0b4....515304' \
--data '{
    "apiVersion": "paas.envmgmt.io/v1",
    "kind": "Service",
    "metadata": {
        "workspace": "dev1",
        "project": "vm-project",
        "labels": {
            "paas.envmgmt.io/compute_type": "vm",
            "paas.envmgmt.io/compute_type_provider": "kvm"
        },
        "name": "notebook-from-api-vm-1",
        "description": "This is notebook created from API"
    },
    "spec": {
        "serviceProfile": {
            "name": "vmaas-notebook",
            "systemCatalog": true
        },
        "variables": [
            {
                "name": "Jupyter Notebook Config",
                "value": "{\"Jupyter_Notebook_Enabled\":\"True\",\"Jupyter_Notebook_Token\":\"token1\",\"Jupyter_Notebook_Hostname\":\"notebook.firmuscloud.co\",\"Jupyter_Notebook_Nginx_Port\":\"443\",\"Route_53_DNS\":\"True\",\"Jupyter_Notebook_Image\":\"jupyter/minimal-notebook:latest\"}"
            },
            {
                "name": "Certificate Handling",
                "value": "True"
            },
            {
                "name": "Firewall Rules",
                "value": "[{\"source_cidr\":\"any\",\"action\":\"allow\",\"application\":\"ssh\",\"port\":22,\"protocol\":\"tcp\"},{\"source_cidr\":\"any\",\"action\":\"allow\",\"application\":\"https\",\"port\":443,\"protocol\":\"tcp\"}]"
            },
            {
                "name": "Enable OTEL Collector",
                "value": "True"
            },
            {
                "name": "Port Forwards",
                "value": "{{portForwards}}"
            },
            {
                "name": "Guest Password",
                "value": "password"
            },
            {
                "name": "SSH Public Keys",
                "value": "{{sshPublicKey}}"
            }
        ]
    }
}'

List Services

Request Semantics

Parameter Value
Method GET
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/services

Headers

Header Description
X-API-KEY <apiKey>

Query Parameters

Parameter Type Default Description
limit Number 50 Number greater than zero
offset Number 0 Number greater than zero
order Enum DESC ASC or DESC
orderBy Enum createdAt Field to order by

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/services?limit=1000&offset=0&order=DESC&orderBy=createdAt' \
--header 'accept: application/json' \
--header 'x-api-key: ra2.da0b4......515304'

Get Service

Request Semantics

Parameter Value
Method GET
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/services/{{serviceName}}

Headers

Header Description
X-API-KEY <apiKey>

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/services/notebook-4' \
--header 'accept: application/json' \
--header 'x-api-key: ra2.da0b4......515304'

Deploy Service

Deploys a service or updates a service in case of Day-2 operations.

Request Semantics

Parameter Value
Method POST
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/services/{{serviceName}}/publish

Headers

Header Description
X-API-KEY <apiKey>

Request Body

{}

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/services/notebook-4/publish' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'x-api-key: ra2.da0b4......515304' \
--data '{}'

Example Response

{}

Delete Service

Request Semantics

Parameter Value
Method DELETE
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/services/{{serviceName}}

Headers

Header Description
X-API-KEY <apiKey>

Example Request

curl --location --globoff --request DELETE 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/services/{{serviceName}}' \
--header 'accept: application/json' \
--header 'x-api-key: ra2.da0b4......515304'

Example Response

null

Actions on Service

Perform actions such as start or stop on a service.

Request Semantics

Parameter Value
Method POST
URL /apis/paas.envmgmt.io/v1/projects/{{projectName}}/workspaces/{{workspaceName}}/services/{{serviceName}}/action/{{action}}

Valid Actions: start, stop

Headers

Header Description
X-API-KEY <apiKey>

Request Body

{}

Example Request

curl --location 'https://console.firmuscloud.co/apis/paas.envmgmt.io/v1/projects/vm-project/workspaces/dev1/services/notebook-1/action/stop' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'x-api-key: ra2.da0b4......515304' \
--data '{}'

Example Response

{}