curl --request POST \
--url https://api.stg.simnet.cloud/api/v1/compute/instances \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"serviceOfferingId": "<string>",
"templateId": "<string>",
"zoneId": "<string>",
"name": "<string>",
"displayName": "<string>",
"networkIds": "<string>",
"startVm": true,
"keyPair": "<string>",
"userData": "<string>",
"hypervisor": "<string>",
"allowPasswordSsh": true,
"disableRootCompletely": true,
"isoId": "<string>",
"diskOfferingId": "<string>",
"rootDiskSize": 123,
"imageType": "template",
"sshKeyNames": [
"<string>"
],
"dataDiskOfferingList": [
{
"diskOffering": "<string>",
"size": 123
}
],
"ipToNetworkList": [
{
"networkId": "<string>",
"ip": "<string>"
}
]
}
'import requests
url = "https://api.stg.simnet.cloud/api/v1/compute/instances"
payload = {
"serviceOfferingId": "<string>",
"templateId": "<string>",
"zoneId": "<string>",
"name": "<string>",
"displayName": "<string>",
"networkIds": "<string>",
"startVm": True,
"keyPair": "<string>",
"userData": "<string>",
"hypervisor": "<string>",
"allowPasswordSsh": True,
"disableRootCompletely": True,
"isoId": "<string>",
"diskOfferingId": "<string>",
"rootDiskSize": 123,
"imageType": "template",
"sshKeyNames": ["<string>"],
"dataDiskOfferingList": [
{
"diskOffering": "<string>",
"size": 123
}
],
"ipToNetworkList": [
{
"networkId": "<string>",
"ip": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
serviceOfferingId: '<string>',
templateId: '<string>',
zoneId: '<string>',
name: '<string>',
displayName: '<string>',
networkIds: '<string>',
startVm: true,
keyPair: '<string>',
userData: '<string>',
hypervisor: '<string>',
allowPasswordSsh: true,
disableRootCompletely: true,
isoId: '<string>',
diskOfferingId: '<string>',
rootDiskSize: 123,
imageType: 'template',
sshKeyNames: ['<string>'],
dataDiskOfferingList: [{diskOffering: '<string>', size: 123}],
ipToNetworkList: [{networkId: '<string>', ip: '<string>'}]
})
};
fetch('https://api.stg.simnet.cloud/api/v1/compute/instances', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.stg.simnet.cloud/api/v1/compute/instances",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'serviceOfferingId' => '<string>',
'templateId' => '<string>',
'zoneId' => '<string>',
'name' => '<string>',
'displayName' => '<string>',
'networkIds' => '<string>',
'startVm' => true,
'keyPair' => '<string>',
'userData' => '<string>',
'hypervisor' => '<string>',
'allowPasswordSsh' => true,
'disableRootCompletely' => true,
'isoId' => '<string>',
'diskOfferingId' => '<string>',
'rootDiskSize' => 123,
'imageType' => 'template',
'sshKeyNames' => [
'<string>'
],
'dataDiskOfferingList' => [
[
'diskOffering' => '<string>',
'size' => 123
]
],
'ipToNetworkList' => [
[
'networkId' => '<string>',
'ip' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.stg.simnet.cloud/api/v1/compute/instances"
payload := strings.NewReader("{\n \"serviceOfferingId\": \"<string>\",\n \"templateId\": \"<string>\",\n \"zoneId\": \"<string>\",\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"networkIds\": \"<string>\",\n \"startVm\": true,\n \"keyPair\": \"<string>\",\n \"userData\": \"<string>\",\n \"hypervisor\": \"<string>\",\n \"allowPasswordSsh\": true,\n \"disableRootCompletely\": true,\n \"isoId\": \"<string>\",\n \"diskOfferingId\": \"<string>\",\n \"rootDiskSize\": 123,\n \"imageType\": \"template\",\n \"sshKeyNames\": [\n \"<string>\"\n ],\n \"dataDiskOfferingList\": [\n {\n \"diskOffering\": \"<string>\",\n \"size\": 123\n }\n ],\n \"ipToNetworkList\": [\n {\n \"networkId\": \"<string>\",\n \"ip\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.stg.simnet.cloud/api/v1/compute/instances")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"serviceOfferingId\": \"<string>\",\n \"templateId\": \"<string>\",\n \"zoneId\": \"<string>\",\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"networkIds\": \"<string>\",\n \"startVm\": true,\n \"keyPair\": \"<string>\",\n \"userData\": \"<string>\",\n \"hypervisor\": \"<string>\",\n \"allowPasswordSsh\": true,\n \"disableRootCompletely\": true,\n \"isoId\": \"<string>\",\n \"diskOfferingId\": \"<string>\",\n \"rootDiskSize\": 123,\n \"imageType\": \"template\",\n \"sshKeyNames\": [\n \"<string>\"\n ],\n \"dataDiskOfferingList\": [\n {\n \"diskOffering\": \"<string>\",\n \"size\": 123\n }\n ],\n \"ipToNetworkList\": [\n {\n \"networkId\": \"<string>\",\n \"ip\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stg.simnet.cloud/api/v1/compute/instances")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"serviceOfferingId\": \"<string>\",\n \"templateId\": \"<string>\",\n \"zoneId\": \"<string>\",\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"networkIds\": \"<string>\",\n \"startVm\": true,\n \"keyPair\": \"<string>\",\n \"userData\": \"<string>\",\n \"hypervisor\": \"<string>\",\n \"allowPasswordSsh\": true,\n \"disableRootCompletely\": true,\n \"isoId\": \"<string>\",\n \"diskOfferingId\": \"<string>\",\n \"rootDiskSize\": 123,\n \"imageType\": \"template\",\n \"sshKeyNames\": [\n \"<string>\"\n ],\n \"dataDiskOfferingList\": [\n {\n \"diskOffering\": \"<string>\",\n \"size\": 123\n }\n ],\n \"ipToNetworkList\": [\n {\n \"networkId\": \"<string>\",\n \"ip\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"displayName": "<string>",
"state": "<string>",
"instanceType": "<string>",
"cpuNumber": 123,
"cpuSpeed": 123,
"memoryKbs": 123,
"hypervisor": "<string>",
"ipAddress": "<string>",
"networkKbsRead": 123,
"networkKbsWrite": 123,
"receivedBytes": 123,
"sentBytes": 123,
"diskKbsRead": 123,
"diskKbsWrite": 123,
"diskIoRead": 123,
"diskIoWrite": 123,
"osDisplayName": "<string>",
"haEnabled": true,
"deleteProtection": true,
"created": "2023-11-07T05:31:56Z",
"lastUpdated": "2023-11-07T05:31:56Z",
"account": "<string>",
"domain": "<string>",
"tags": {},
"details": {},
"cpuUtilization": "<string>",
"memoryUtilization": "<string>",
"templateId": "<string>",
"templateName": "<string>",
"templateType": "<string>",
"templateFormat": "<string>",
"templateDisplayText": "<string>",
"serviceOfferingId": "<string>",
"serviceOfferingName": "<string>",
"diskOfferingId": "<string>",
"diskOfferingName": "<string>",
"zoneId": "<string>",
"zoneName": "<string>",
"hostId": "<string>",
"hostname": "<string>",
"hostControlState": "<string>",
"memory": 123,
"cpuTotal": "<string>",
"memoryTotal": "<string>",
"instanceName": "<string>",
"passwordEnabled": true,
"displayVm": true,
"isDynamicallyScalable": true,
"userId": "<string>",
"username": "<string>",
"domainId": "<string>",
"guestOsId": "<string>",
"osTypeId": "<string>",
"rootDeviceId": 123,
"rootDeviceType": "<string>",
"bootMode": "<string>",
"bootType": "<string>",
"poolType": "<string>",
"arch": "<string>",
"hasAnnotations": true,
"backupOfferingId": "<string>",
"backupOfferingName": "<string>"
}{
"message": "Operation failed",
"timestamp": "2023-11-07T05:31:56Z",
"detail": "Unable to find a suitable host"
}{
"message": "Operation failed",
"timestamp": "2023-11-07T05:31:56Z",
"detail": "Unable to find a suitable host"
}{
"message": "Operation failed",
"timestamp": "2023-11-07T05:31:56Z",
"detail": "Unable to find a suitable host"
}{
"message": "Operation failed",
"timestamp": "2023-11-07T05:31:56Z",
"detail": "Unable to find a suitable host"
}{
"message": "Operation failed",
"timestamp": "2023-11-07T05:31:56Z",
"detail": "Unable to find a suitable host"
}Create Instance
POST /api/v1/compute/instances
curl --request POST \
--url https://api.stg.simnet.cloud/api/v1/compute/instances \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"serviceOfferingId": "<string>",
"templateId": "<string>",
"zoneId": "<string>",
"name": "<string>",
"displayName": "<string>",
"networkIds": "<string>",
"startVm": true,
"keyPair": "<string>",
"userData": "<string>",
"hypervisor": "<string>",
"allowPasswordSsh": true,
"disableRootCompletely": true,
"isoId": "<string>",
"diskOfferingId": "<string>",
"rootDiskSize": 123,
"imageType": "template",
"sshKeyNames": [
"<string>"
],
"dataDiskOfferingList": [
{
"diskOffering": "<string>",
"size": 123
}
],
"ipToNetworkList": [
{
"networkId": "<string>",
"ip": "<string>"
}
]
}
'import requests
url = "https://api.stg.simnet.cloud/api/v1/compute/instances"
payload = {
"serviceOfferingId": "<string>",
"templateId": "<string>",
"zoneId": "<string>",
"name": "<string>",
"displayName": "<string>",
"networkIds": "<string>",
"startVm": True,
"keyPair": "<string>",
"userData": "<string>",
"hypervisor": "<string>",
"allowPasswordSsh": True,
"disableRootCompletely": True,
"isoId": "<string>",
"diskOfferingId": "<string>",
"rootDiskSize": 123,
"imageType": "template",
"sshKeyNames": ["<string>"],
"dataDiskOfferingList": [
{
"diskOffering": "<string>",
"size": 123
}
],
"ipToNetworkList": [
{
"networkId": "<string>",
"ip": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
serviceOfferingId: '<string>',
templateId: '<string>',
zoneId: '<string>',
name: '<string>',
displayName: '<string>',
networkIds: '<string>',
startVm: true,
keyPair: '<string>',
userData: '<string>',
hypervisor: '<string>',
allowPasswordSsh: true,
disableRootCompletely: true,
isoId: '<string>',
diskOfferingId: '<string>',
rootDiskSize: 123,
imageType: 'template',
sshKeyNames: ['<string>'],
dataDiskOfferingList: [{diskOffering: '<string>', size: 123}],
ipToNetworkList: [{networkId: '<string>', ip: '<string>'}]
})
};
fetch('https://api.stg.simnet.cloud/api/v1/compute/instances', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.stg.simnet.cloud/api/v1/compute/instances",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'serviceOfferingId' => '<string>',
'templateId' => '<string>',
'zoneId' => '<string>',
'name' => '<string>',
'displayName' => '<string>',
'networkIds' => '<string>',
'startVm' => true,
'keyPair' => '<string>',
'userData' => '<string>',
'hypervisor' => '<string>',
'allowPasswordSsh' => true,
'disableRootCompletely' => true,
'isoId' => '<string>',
'diskOfferingId' => '<string>',
'rootDiskSize' => 123,
'imageType' => 'template',
'sshKeyNames' => [
'<string>'
],
'dataDiskOfferingList' => [
[
'diskOffering' => '<string>',
'size' => 123
]
],
'ipToNetworkList' => [
[
'networkId' => '<string>',
'ip' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.stg.simnet.cloud/api/v1/compute/instances"
payload := strings.NewReader("{\n \"serviceOfferingId\": \"<string>\",\n \"templateId\": \"<string>\",\n \"zoneId\": \"<string>\",\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"networkIds\": \"<string>\",\n \"startVm\": true,\n \"keyPair\": \"<string>\",\n \"userData\": \"<string>\",\n \"hypervisor\": \"<string>\",\n \"allowPasswordSsh\": true,\n \"disableRootCompletely\": true,\n \"isoId\": \"<string>\",\n \"diskOfferingId\": \"<string>\",\n \"rootDiskSize\": 123,\n \"imageType\": \"template\",\n \"sshKeyNames\": [\n \"<string>\"\n ],\n \"dataDiskOfferingList\": [\n {\n \"diskOffering\": \"<string>\",\n \"size\": 123\n }\n ],\n \"ipToNetworkList\": [\n {\n \"networkId\": \"<string>\",\n \"ip\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.stg.simnet.cloud/api/v1/compute/instances")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"serviceOfferingId\": \"<string>\",\n \"templateId\": \"<string>\",\n \"zoneId\": \"<string>\",\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"networkIds\": \"<string>\",\n \"startVm\": true,\n \"keyPair\": \"<string>\",\n \"userData\": \"<string>\",\n \"hypervisor\": \"<string>\",\n \"allowPasswordSsh\": true,\n \"disableRootCompletely\": true,\n \"isoId\": \"<string>\",\n \"diskOfferingId\": \"<string>\",\n \"rootDiskSize\": 123,\n \"imageType\": \"template\",\n \"sshKeyNames\": [\n \"<string>\"\n ],\n \"dataDiskOfferingList\": [\n {\n \"diskOffering\": \"<string>\",\n \"size\": 123\n }\n ],\n \"ipToNetworkList\": [\n {\n \"networkId\": \"<string>\",\n \"ip\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stg.simnet.cloud/api/v1/compute/instances")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"serviceOfferingId\": \"<string>\",\n \"templateId\": \"<string>\",\n \"zoneId\": \"<string>\",\n \"name\": \"<string>\",\n \"displayName\": \"<string>\",\n \"networkIds\": \"<string>\",\n \"startVm\": true,\n \"keyPair\": \"<string>\",\n \"userData\": \"<string>\",\n \"hypervisor\": \"<string>\",\n \"allowPasswordSsh\": true,\n \"disableRootCompletely\": true,\n \"isoId\": \"<string>\",\n \"diskOfferingId\": \"<string>\",\n \"rootDiskSize\": 123,\n \"imageType\": \"template\",\n \"sshKeyNames\": [\n \"<string>\"\n ],\n \"dataDiskOfferingList\": [\n {\n \"diskOffering\": \"<string>\",\n \"size\": 123\n }\n ],\n \"ipToNetworkList\": [\n {\n \"networkId\": \"<string>\",\n \"ip\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"displayName": "<string>",
"state": "<string>",
"instanceType": "<string>",
"cpuNumber": 123,
"cpuSpeed": 123,
"memoryKbs": 123,
"hypervisor": "<string>",
"ipAddress": "<string>",
"networkKbsRead": 123,
"networkKbsWrite": 123,
"receivedBytes": 123,
"sentBytes": 123,
"diskKbsRead": 123,
"diskKbsWrite": 123,
"diskIoRead": 123,
"diskIoWrite": 123,
"osDisplayName": "<string>",
"haEnabled": true,
"deleteProtection": true,
"created": "2023-11-07T05:31:56Z",
"lastUpdated": "2023-11-07T05:31:56Z",
"account": "<string>",
"domain": "<string>",
"tags": {},
"details": {},
"cpuUtilization": "<string>",
"memoryUtilization": "<string>",
"templateId": "<string>",
"templateName": "<string>",
"templateType": "<string>",
"templateFormat": "<string>",
"templateDisplayText": "<string>",
"serviceOfferingId": "<string>",
"serviceOfferingName": "<string>",
"diskOfferingId": "<string>",
"diskOfferingName": "<string>",
"zoneId": "<string>",
"zoneName": "<string>",
"hostId": "<string>",
"hostname": "<string>",
"hostControlState": "<string>",
"memory": 123,
"cpuTotal": "<string>",
"memoryTotal": "<string>",
"instanceName": "<string>",
"passwordEnabled": true,
"displayVm": true,
"isDynamicallyScalable": true,
"userId": "<string>",
"username": "<string>",
"domainId": "<string>",
"guestOsId": "<string>",
"osTypeId": "<string>",
"rootDeviceId": 123,
"rootDeviceType": "<string>",
"bootMode": "<string>",
"bootType": "<string>",
"poolType": "<string>",
"arch": "<string>",
"hasAnnotations": true,
"backupOfferingId": "<string>",
"backupOfferingName": "<string>"
}{
"message": "Operation failed",
"timestamp": "2023-11-07T05:31:56Z",
"detail": "Unable to find a suitable host"
}{
"message": "Operation failed",
"timestamp": "2023-11-07T05:31:56Z",
"detail": "Unable to find a suitable host"
}{
"message": "Operation failed",
"timestamp": "2023-11-07T05:31:56Z",
"detail": "Unable to find a suitable host"
}{
"message": "Operation failed",
"timestamp": "2023-11-07T05:31:56Z",
"detail": "Unable to find a suitable host"
}{
"message": "Operation failed",
"timestamp": "2023-11-07T05:31:56Z",
"detail": "Unable to find a suitable host"
}Authorizations
The access token from a signed-in console session, sent as Authorization: Bearer <token>. It must be issued for the Simnet API audience — an identity token, or a token for another application, is refused with 401.
There are no API keys, client secrets or service accounts yet, so this is a personal, short-lived credential carrying your full account access. Programmatic credentials with role-based access are on the roadmap. See Authentication.
Headers
Body
Everything needed to deploy an instance. The three required fields fix what it runs on, what it boots from, and where it lives; the rest have platform defaults.
Deploying from an ISO rather than a template changes which fields matter: set imageType to iso, put the ISO's identifier in isoId, and supply diskOfferingId for the root disk, because an ISO carries no disk of its own.
The compute offering — vCPU and memory. From GET /api/v1/offerings/compute.
The image to boot from. From GET /api/v1/templates. When imageType is iso this is ignored in favour of isoId.
The availability zone to deploy into. From GET /api/v1/zones. Must be a zone in the region the request is routed to.
The internal host name. Must be unique, and constrained to host-name characters. Omit it and the platform generates one.
The label shown in listings. Free-form, and does not need to be unique.
Comma-separated network identifiers to attach, in order — the first becomes the default interface. Omit it to use the zone's default network.
Whether to power the instance on after it is created. Defaults to true.
Name of a single SSH key pair to inject. Prefer sshKeyNames.
Cloud-init payload, base64-encoded. Combined with whatever allowPasswordSsh and disableRootCompletely generate.
Overrides the hypervisor chosen for the deployment. Rarely needed.
Permit password authentication over SSH, by setting ssh_pwauth in the generated cloud-init. Off by default, and best left off when you are injecting a key.
Have cloud-init disable root SSH login entirely, by setting disable_root.
The ISO to boot from. Required when imageType is iso.
The root disk offering. Required when imageType is iso, since an ISO supplies no disk.
Root disk size in GB, overriding the template's own. Cannot be smaller than the template requires.
What the instance boots from: template (default), iso, volume or snapshot.
SSH key pair names to inject. Only the first is used.
Additional data disks to create and attach at deploy time.
Show child attributes
Show child attributes
Fixes a specific private address on a given network instead of letting the platform assign one. Each address must be inside that network's range and not already in use.
Show child attributes
Show child attributes
Response
Accepted.
Core Instance Information
Resource Information maps to serviceofferingname
Network Information
Storage Information
Instance Details
Additional Information
Add to InstanceDTO class
Template Information
Service Offering Information
Zone and Host Information
Memory Information (both raw and formatted) in MB
formatted string like "0.5 Ghz"
formatted string like "0.50 GiB"
Instance Name
Additional flags
User Information
OS Information
Root Device Information
Boot Information
Additional flags
Backup Offering