Getting StartedExamplesImagesInstancesInstance TypesCreate an instanceList all instancesGet instanceDestroy an instanceSnapshot an instanceList snapshots of an instanceAttach/Detach security groups from an instanceAttach/Detach volumes from an instanceGet instance actionsPerform actionExamples (cURL)SSH KeysSecurity GroupsSnapshotsVolumes

Instances

An instance is a Genesis Cloud virtual machine. By sending requests to the instances endpoint, you can list, create, or delete instances.

Instance Types

An instance type defines the hardware configuration of your instance. Please refer the pricing page for the costs of each type.

GPU instance: Nvidia 1080Ti

Instance Type (Product Name)API Instance Type IdentifiervCPUsMemoryDiskGPUs
GPU Instance 1x NVIDIA 1080Tivcpu-4_memory-12g_disk-80g_nvidia1080ti-1412 GiB80 GiB1
GPU Instance 2x NVIDIA 1080Tivcpu-8_memory-24g_disk-80g_nvidia1080ti-2824 GiB80 GiB2
GPU Instance 3x NVIDIA 1080Tivcpu-12_memory-36g_disk-80g_nvidia1080ti-31236 GiB80 GiB3
GPU Instance 4x NVIDIA 1080Tivcpu-16_memory-48g_disk-80g_nvidia1080ti-41648 GiB80 GiB4
GPU Instance 5x NVIDIA 1080Tivcpu-20_memory-60g_disk-80g_nvidia1080ti-52060 GiB80 GiB5
GPU Instance 6x NVIDIA 1080Tivcpu-24_memory-72g_disk-80g_nvidia1080ti-62472 GiB80 GiB6
GPU Instance 7x NVIDIA 1080Tivcpu-28_memory-84g_disk-80g_nvidia1080ti-72884 GiB80 GiB7
GPU Instance 8x NVIDIA 1080Tivcpu-32_memory-96g_disk-80g_nvidia1080ti-83296 GiB80 GiB8
GPU Instance 9x NVIDIA 1080Tivcpu-36_memory-108g_disk-80g_nvidia1080ti-936108 GiB80 GiB9
GPU Instance 10x NVIDIA 1080Tivcpu-40_memory-120g_disk-80g_nvidia1080ti-1040120 GiB80 GiB10

CPU Instance

Instance Type (Product Name)API Instance Type IdentifiervCPUsMemoryDisk
CPU Instance 2x vCPUvcpu-2_memory-4g_disk-80g24 GiB80 GiB
CPU Instance 4x vCPUvcpu-4_memory-8g_disk-80g48 GiB80 GiB
CPU Instance 8x vCPUvcpu-8_memory-16g_disk-80g816 GiB80 GiB
CPU Instance 12x vCPUvcpu-12_memory-24g_disk-80g1224 GiB80 GiB
CPU Instance 16x vCPUvcpu-16_memory-32g_disk-80g1632 GiB80 GiB
CPU Instance 20x vCPUvcpu-20_memory-40g_disk-80g2040 GiB80 GiB
CPU Instance 24x vCPUvcpu-24_memory-48g_disk-80g2448 GiB80 GiB

Create an instance

Please Note: Creating an instance results in costs according to Genesis Cloud's pricing. You can see all your billed resources in the billing dashboard.

To create a new instance, send a request to:

POST /compute/v1/instances (HTTP 201 - Created)

The attribute values that must be set to successfully create an instance are:

Body parameters

  • name String Required - The human-readable name set for the instance.
  • hostname String Required - The hostname of your instance.
  • type String Required - The instance type identifier, see API instance type identifiers.
  • image Object Required - The image id.
  • ssh_keys Array Required - An array of ssh key ids. This should not be provided if password authentication method is desired. Please Note: Only one SSH Key is accepted for now.
  • password String Optional - The password to access the instance. Your password must have upper and lower chars, digits and length between 8-72. Please Note: Only one of ssh_keys or password can be provided. Password is less secure - we recommend you use an SSH key-pair instead.
  • security_groups Array Optional - An array of security group ids. Please Note: By default the standard security group is set if you don't specify any Security Groups. You can override this behavior by providing a different Security Group.
  • metadata Object Optional - Option to provide metadata. Currently supported is startup_script.
  • A startup_script is a plain text bash script or 'cloud-config' file that will be executed after the first instance boot. It is limited to 64 KiB in size. You can use it to configure your instance, e.g. installing the NVIDIA GPU driver. Learn more about startup scripts and installing the GPU driver.
{
"name": "name",
"hostname": "hostname",
"type": "vcpu-4_memory-12g_disk-80g_nvidia1080ti-1",
"image": "7b1644e2-d97d-4725-a927-0028bc60bc28",
"ssh_keys": ["45bcd3ac-fccd-4eea-a812-21f01d665464"],
"metadata":{
"startup_script":"#!/bin/bash\nsudo apt update && sudo apt install iperf3"
}
}

Body response

A Instance will be created using the provided information. The response body will contain a JSON object with standard attributes for your new Instance:

  • id String - A unique identifier for each instance. This is automatically generated.
  • name String - The human-readable name set for the instance.
  • hostname String - The instance host name.
  • type String - The instance type (eg. vcpu-4_memory-12g_disk-80g_nvidia1080ti-1).
  • image Object - The instance base image object.
  • ssh_keys Array - The instance's ssh keys.
  • security_groups Array - The instance's security groups.
  • volumes Array - The instance's volumes.
  • status String - The instance status. Possible values are enqueued,creating, active, shutdown, copying, restarting, starting, stopping, deleting, error, and unknown.
  • private_ip String - The instance private ip. It may take some time to be assigned after the instance is created.
  • public_ip String - The instance public ip. It may take some time to be assigned after the instance is created.
  • created_at String - A time value given in ISO8601 combined date and time format that represents when the instance was created.
  • updated_at String - A time value given in ISO8601 combined date and time format that represents when the instance was updated.
{
"instance":{
"id":"9e8ce501-d692-402c-8fca-5a8f5d8ddd57",
"name":"name",
"hostname":"hostname",
"type":"vcpu-4_memory-12g_disk-80g_nvidia1080ti-1",
"image":{
"id":"3394d290-03f6-4e55-8f3b-3a2acd0f64bc",
"name":"Ubuntu 16.04"
},
"ssh_keys":[
{
"id":"45bcd3ac-fccd-4eea-a812-21f01d665464",
"name":"ssh-key-name"
}
],
"security_groups":[
{
"id":"fd537d69-9db7-4a44-83b8-96f79d10071a",
"name":"standard"
}
],
"volumes":[
{
"id":"0580fb4c-de74-4b83-8bdb-1fd87d89f827",
"name":"<volume_name>"
}
],
"status":"active",
"private_ip":"192.168.10.124",
"public_ip":"198.51.100.127",
"created_at":"2020-03-23T10:09:29.152Z",
"updated_at":"2020-03-23T10:10:28.797Z"
}
}

List all instances

To list all the instances, send a GET request to /compute/v1/instances.

GET /compute/v1/instances (HTTP 200 - OK)

Query parameters

  • per_page Integer Optional - A positive integer lower or equal to 100 to select the number of items to return (default: 50).
  • page Integer Optional - A positive integer to choose the page to return.

Response body

The response will be a JSON object with pagination details and a key called instances. This will be set to an array of instance objects, each of which will contain the instance object:

  • id String - A unique identifier for each instance. This is automatically generated.
  • name String - The human-readable name set for the instance.
  • hostname String - The instance host name.
  • type String - The instance type (eg. vcpu-4_memory-12g_disk-80g_nvidia1080ti-1).
  • image Object - The instance base image object.
  • ssh_keys Array - The instance's ssh keys.
  • security_groups Array - The instance's security groups.
  • volumes Array - The instance's volumes.
  • status String - The instance status. Possible values are enqueued,creating, active, shutdown, copying, restarting, starting, stopping, deleting, error, and unknown.
  • private_ip String - The instance private ip. It may take some time to be assigned after the instance is created.
  • public_ip String - The instance public ip. It may take some time to be assigned after the instance is created.
  • created_at String - A time value given in ISO8601 combined date and time format that represents when the instance was created.
  • updated_at String - A time value given in ISO8601 combined date and time format that represents when the instance was updated.
{
"instances":[
{
"id":"9e8ce501-d692-402c-8fca-5a8f5d8ddd57",
"name":"name",
"hostname":"hostname",
"type":"vcpu-4_memory-12g_disk-80g_nvidia1080ti-1",
"image":{
"id":"3394d290-03f6-4e55-8f3b-3a2acd0f64bc",
"name":"Ubuntu 16.04"
},
"ssh_keys":[
{
"id":"45bcd3ac-fccd-4eea-a812-21f01d665464",
"name":"ssh-key-name"
}
],
"security_groups":[
{
"id":"fd537d69-9db7-4a44-83b8-96f79d10071a",
"name":"standard"
},
{
"id":"00faf681-6f59-4c94-8523-28903f13da47",
"name":"default"
}
],
"volumes":[
{
"id":"0580fb4c-de74-4b83-8bdb-1fd87d89f827",
"name":"<volume_name>"
}
],
"status":"active",
"private_ip":"192.168.10.124",
"public_ip":"198.51.100.127",
"created_at":"2020-03-23T10:09:29.152Z",
"updated_at":"2020-03-23T10:10:28.797Z"
}
],
"total_count":1,
"page":1,
"per_page":50
}

Get instance

Get details of an instance with the given ID

GET /compute/v1/instances/{instance_id} (HTTP 200 - OK)

Path parameters:

  • instance_id String - Instance id

Response body

The response will be a JSON object that contains the instance attributes:

  • id String - A unique identifier for each instance. This is automatically generated.
  • name String - The human-readable name set for the instance.
  • hostname String - The instance host name.
  • type String - The instance type (eg. vcpu-4_memory-12g_disk-80g_nvidia1080ti-1).
  • image Object - The instance base image object.
  • ssh_keys Array - The instance's ssh keys.
  • security_groups Array - The instance's security groups.
  • volumes Array - The instance's volumes.
  • status String - The instance status. Possible values are creating, active, shutdown, copying, restarting, starting, stopping, deleting, error, and unknown.
  • private_ip String - The instance private ip. It may take some time to be assigned after the instance is created.
  • public_ip String - The instance public ip. It may take some time to be assigned after the instance is created.
  • created_at String - A time value given in ISO8601 combined date and time format that represents when the instance was created.
  • updated_at String - A time value given in ISO8601 combined date and time format that represents when the instance was updated.
{
"instance":{
"id":"9e8ce501-d692-402c-8fca-5a8f5d8ddd57",
"name":"name",
"hostname":"hostname",
"type":"vcpu-4_memory-12g_disk-80g_nvidia1080ti-1",
"image":{
"id":"3394d290-03f6-4e55-8f3b-3a2acd0f64bc",
"name":"Ubuntu 16.04"
},
"ssh_keys":[
{
"id":"45bcd3ac-fccd-4eea-a812-21f01d665464",
"name":"ssh-key-name"
}
],
"security_groups":[
{
"id":"fd537d69-9db7-4a44-83b8-96f79d10071a",
"name":"standard"
},
{
"id":"00faf681-6f59-4c94-8523-28903f13da47",
"name":"default"
}
],
"volumes":[
{
"id":"0580fb4c-de74-4b83-8bdb-1fd87d89f827",
"name":"<volume_name>"
}
],
"status":"active",
"private_ip":"192.168.10.124",
"public_ip":"198.51.100.127",
"created_at":"2020-03-23T10:09:29.152Z",
"updated_at":"2020-03-23T10:10:28.797Z"
}
}

Destroy an instance

Destroy an active instance with the given ID (Only active instances can be destroyed. The data will be lost except for attached volumes. The billing will stop as soon as you request the instance destroy).

DELETE /compute/v1/instances/{instance_id} (HTTP 204 - No content)

Path parameters:

  • instance_id String - Instance id

Snapshot an instance

Takes a snapshot of the instance

POST /compute/v1/instances/{instance_id}/snapshots (HTTP 201 - Created)

Path parameters:

  • instance_id String - Instance id

Body parameters

  • name String Required - The snapshot name.
{
"name":"name",
}

The response will be a JSON object that contains the snapshot attributes:

{
"snapshot": {
"id": "ca73c941-7bd7-4d05-98d3-485e7980638b",
"name": "snapshot",
"status": "active",
"resource_id": "<instance-id>",
"created_at": "2020-03-30T13:39:44.540Z"
}
}

List snapshots of an instance

Lists all snapshots that were taken of this instance.

GET /compute/v1/instances/{instance_id}/snapshots (HTTP 200 - OK)

Path parameters:

  • instance_id String - Instance id

Response body

The response will be a JSON object with pagination details and a key called snapshots. This will be set to an array of instance snapshot objects, each of which will contain the instance snapshot object:

  • id String - A unique identifier for each snapshot. This is automatically generated.
  • name String - The human-readable name set for the snapshot.
  • size Integer - The storage size of this snapshot given in bytes.
  • status String - The snapshot status. Possible values are creating, active, and error.
  • resource_id String - The id of the resource (i.e. instance) that was snapshotted.
  • created_at String - A time value given in ISO8601 combined date and time format that represents when the snapshot was created.
{
"snapshots":[
{
"id":"ff942497-62f6-4a9d-8dc4-3766ebc2b8a2",
"name":"snapshot name",
"size":"85899345920",
"status":"active",
"resource_id":"<snapshotted-resource-id>",
"created_at":"2020-04-06T10:47:46.786Z"
}
],
"total_count":1,
"page":1,
"per_page":50
}

Attach/Detach security groups from an instance

Attach/Detach a security group to an instance is possible by passing the full list of security groups IDs. This means, in order to add one additional security group you need to pass the list of current security groups plus the security group to be added.

PATCH /compute/v1/instances/{instance_id} (HTTP 200 - OK)

Path parameters:

  • instance_id String - Instance id.

Body parameters

  • security_groups Array Required - The list of security group IDs.
{
"security_groups": ["fd537d69-9db7-4a44-83b8-96f79d10071a", "00faf681-6f59-4c94-8523-28903f13da47"],
}

The response will be a JSON object that represents the instance object:

{
"instance":{
"id":"9e8ce501-d692-402c-8fca-5a8f5d8ddd57",
"name":"name",
"hostname":"hostname",
"type":"vcpu-4_memory-12g_disk-80g_nvidia1080ti-1",
"image":{
"id":"3394d290-03f6-4e55-8f3b-3a2acd0f64bc",
"name":"Ubuntu 16.04"
},
"ssh_keys":[
{
"id":"45bcd3ac-fccd-4eea-a812-21f01d665464",
"name":"ssh-key-name"
}
],
"security_groups":[
{
"id":"fd537d69-9db7-4a44-83b8-96f79d10071a",
"name":"standard"
},
{
"id":"00faf681-6f59-4c94-8523-28903f13da47",
"name":"example sg"
}
],
"volumes":[
{
"id":"0580fb4c-de74-4b83-8bdb-1fd87d89f827",
"name":"<volume_name>"
}
],
"status":"active",
"private_ip":"192.168.10.124",
"public_ip":"198.51.100.127",
"created_at":"2020-03-23T10:09:29.152Z",
"updated_at":"2020-03-23T10:10:28.797Z"
}
}

Attach/Detach volumes from an instance

Attach/Detach a volume to an instance is possible by passing the full list of volumes IDs. This means, in order to add one additional volume you need to pass the list of current volumes plus the volume to be added.

PATCH /compute/v1/instances/{instance_id} (HTTP 200 - OK)

Path parameters:

  • instance_id String - Instance id.

Body parameters

  • volumes Array Required - The list of volume IDs.
{
"volumes": ["0580fb4c-de74-4b83-8bdb-1fd87d89f827"],
}

The response will be a JSON object that represents the instance object:

{
"instance":{
"id":"9e8ce501-d692-402c-8fca-5a8f5d8ddd57",
"name":"name",
"hostname":"hostname",
"type":"vcpu-4_memory-12g_disk-80g_nvidia1080ti-1",
"image":{
"id":"3394d290-03f6-4e55-8f3b-3a2acd0f64bc",
"name":"Ubuntu 16.04"
},
"ssh_keys":[
{
"id":"45bcd3ac-fccd-4eea-a812-21f01d665464",
"name":"ssh-key-name"
}
],
"security_groups":[
{
"id":"fd537d69-9db7-4a44-83b8-96f79d10071a",
"name":"standard"
},
{
"id":"00faf681-6f59-4c94-8523-28903f13da47",
"name":"example sg"
}
],
"volumes":[
{
"id":"0580fb4c-de74-4b83-8bdb-1fd87d89f827",
"name":"<volume_name>"
}
],
"status":"active",
"private_ip":"192.168.10.124",
"public_ip":"198.51.100.127",
"created_at":"2020-03-23T10:09:29.152Z",
"updated_at":"2020-03-23T10:10:28.797Z"
}
}

Get instance actions

List all actions that can currently be performed on a instance.

GET /compute/v1/instances/{instance_id}/actions (HTTP 200 - OK)

Path parameters:

  • instance_id String - Instance id

Response body

The response will be a JSON object that contains the instance actions:

  • actions Array - List all actions that can currently be performed on a instance.
{
"actions":[
"reset",
"stop"
]
}

Perform action

The action to perform on the instance.

POST /compute/v1/instances/{instance_id}/actions (HTTP 204 - No Content)

Body parameters

  • action String Required - The action to perform on the instance. Possible values: start, stop or reset.
{
"action": "reset"
}

Examples (cURL)

# Create a new instance
curl --request POST 'https://api.genesiscloud.com/compute/v1/instances' \
-H 'X-Auth-Token: <TOKEN>' \
-H 'Content-Type: application/json' \
--data-raw '
{
"name": "name",
"hostname": "hostname",
"type": "vcpu-4_memory-12g_disk-80g_nvidia1080ti-1",
"image": "7b1644e2-d97d-4725-a927-0028bc60bc28",
"ssh_keys": ["45bcd3ac-fccd-4eea-a812-21f01d665464"]
}'
# List all instances of an account
curl -H 'X-Auth-Token: <TOKEN>' \
'https://api.genesiscloud.com/compute/v1/instances'
# Get instance by id
curl -H 'X-Auth-Token: <TOKEN>' \
'https://api.genesiscloud.com/compute/v1/instances/<instance_id>'
# Destroy an active instance
curl --request DELETE -H 'X-Auth-Token: <TOKEN>' \
'https://api.genesiscloud.com/compute/v1/<instance_id>'
# Snapshot an instance
curl --request POST \
'https://api.genesiscloud.com/compute/v1/instances/<instance_id>/snapshots' \
-H 'X-Auth-Token: <TOKEN>' --header 'Content-Type: application/json' \
--data-raw '
{
"name": "snapshot-name"
}
# List all Snapshots of an instance
curl -H 'X-Auth-Token: <TOKEN>' \
'https://api.genesiscloud.com/compute/v1/instances/<instance_id>/snapshots'
# Update the security groups of an instance
curl --request PATCH 'https://api.genesiscloud.com/compute/v1/instances/<instance_id>' \
-H 'X-Auth-Token: <TOKEN>' \
-H 'Content-Type: application/json' \
--data-raw '
{
"security_groups": ["fd537d69-9db7-4a44-83b8-96f79d10071a"]
}'
# Update the volumes of an instance
curl --request PATCH 'https://api.genesiscloud.com/compute/v1/instances/<instance_id>' \
-H 'X-Auth-Token: <TOKEN>' \
-H 'Content-Type: application/json' \
--data-raw '
{
"volumes": ["0580fb4c-de74-4b83-8bdb-1fd87d89f827"]
}'
# Get instance actions
curl -H 'X-Auth-Token: <TOKEN>' \
'https://api.genesiscloud.com/compute/v1/instances/<instance_id>/actions'
# Perform a reset action
curl --request POST 'https://api.genesiscloud.com/compute/v1/instances/<instance_id>/actions' \
-H 'X-Auth-Token: <TOKEN>' \
-H 'Content-Type: application/json' \
--data-raw '
{
"action": "reset"
}'