API Reference

Introduction

The Joviam API provides access to features available in the context of an organization, centering around the management and provisioning of cloud resources.

The API is JSON only - requests must have JSON as the request body, and all responses will return JSON, including errors.

We make use of the HTTP verbs GET, POST, PUT and DELETE with their appropriate meanings. For example, to create an instance the URL would be POST /instances. To perform actions on a particular object, the URL would be prefixed by the object name and unique ID, e.g. DELETE /instances/f27bd296-084b-4a7b-a978-2b63dd7cc6a7.

Status codes are used to indicate the success or failure of a request: 200 for success, 201 for success (new object created) and 202 for success (operation will completed asynchronously). Error status codes are addressed in the Errors section.

Authentication

Obtaining Access Token

  1. Navigate to your organization settings (menu at top-right of the window)
  2. Click "Access tokens" under the heading "Integrations" in the left navigation pane. Ask your administrator for help if you don't see this menu item.
  3. Click 'Create a token' and follow the on-screen instructions.

An access token grants you full permissions in the API for that organization and does not expire.

Authenticating a Request

Supply the access token during every request, by including it in a header in the format "Authorization: Bearer $TOKEN". All other examples in this documentation include the authentication header.

Errors

The following error codes are possible responses from the system. The JSON key of "error" is necessary because there is the possibility of overlap of different errors for the same HTTP status code.

Status Error Description
400 bad_request Request parameters are invalid. This usually means parameters are missing or are the wrong data types. An extra field called "details" will contain a string explanation of which fields have errors.
401 unauthorized Either invalid or no credentials were supplied when attempting to access resources in the API.
401 invalid_token There was a problem with the supplied authentication token. This may be because it is expired, has been revoked, or was otherwise invalid. A description of the error will be sent in the 'error_description' key. Example:
{
  "error": "invalid_token",
  "error_description": "The access token expired"
}
401 invalid_client You will receive this error only when attempting to authenticate against the OAuth URL, and there is a problem with your supplied credentials. A description of the error will be sent in the 'error_description' key.
401 invalid_request You will receive this error only when attempting to authenticate against the OAuth URL, and your request did not validate - i.e., the correct parameters were not supplied. A description of the error will be sent in the 'error_description' key.
403 forbidden Your identity is authenticated, but you are not authorized to perform this action.
404 not_found The request failed either because the resource with the given ID does not exist, or the URL itself does not exist.
422 validation_fail Many situations can cause this error, including more fine-grained validations on field values that aren't picked up by the basic field checking that the 400 error would catch. It may also happen when attempting to perform actions on a resource when it is currently in an inappropriate state to do so. An extra field "details" will be supplied, which is a dictionary with keys and values indicating the specific field on the object and its errors as an array of strings. Example:
{
  "error": "validation_fail",
  "details": {
    "memory": ["must be between 512MB and 64GB"]
  }
}
500 internal_server_error An error occurred on our servers that was unexpected. We have been notified about it, but if the issue persists please contact support

Console Session

Represents a request and the subsequent credentials required to remotely connect to an instance, either over VNC or serial interfaces. After a session becomes "ready", its connection details may only be used once.

The VNC interface type is wrapped by an HTML websockets connection. The serial interface type is served using Mosh.

Attributes

Name Type Description
created_at date-time When the console session was created.
host nullable string Remote access host (only present when type is "serial").
id uuid Unique identifier of the console session.
instance_id uuid ID of the connected instance.
port nullable integer Remote access port (only present when type is "serial").
state string State of the session.
One of: failed initiating ready
token nullable string VNC password or serial key.
type string Console session type.
One of: serial vnc
updated_at date-time When the console session was last updated.
url nullable uri Websockets URL (only present when type is "vnc").

Console Session Show

Show a console session.
GET /console_sessions/{console_session_id}

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/console_sessions/$CONSOLE_SESSION_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "id": "b80bb774-0288-fda1-f201-890375a60c8f",
  "state": "ready",
  "host": null,
  "port": null,
  "token": "4738y4o10984213",
  "type": "vnc",
  "url": "wss://region.cloudhosting.example/12345",
  "instance_id": "7123a699-d77d-b647-9a1d-8ece2c4f1c16",
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Disk

Represents a block device that can be attached to instances.

Attributes

Name Type Description
cdrom boolean Whether the disk is emulating a CD-ROM.
created_at date-time When the disk was created.
id uuid Unique identifier of the disk.
instance_id nullable uuid ID of the instance to which the disk is attached.
is_template boolean Whether the disk is a template from which other disks may be cloned.
name string Name of the disk.
performance_tier performance_tier Performance tier of the disk.
position nullable integer Index/position at which the disk should be attached to its instance, with 0 as the first disk.
region region Region in which the disk is located.
size integer Size of the disk, in gigabytes.
state string State of the disk.
One of: attached attaching detaching failed_to_provision failed_to_terminate initial pending pending_verification provisioning resizing terminated terminating transferred unattached
template nullable template Template from which the disk was originally sourced.
updated_at date-time When the configuration of the disk was last updated.

Disk Create

Create a new disk. If no template is specified, create a blank disk.
POST /disks

Required Parameters

Name Type Description
name string Name of the disk.
performance_tier uuid ID of the performance tier of the disk.
region uuid ID of the region in which the disk is located.
size integer Size of the disk, in gigabytes.

Optional Parameters

Name Type Description
cdrom boolean Whether the disk is emulating a CD-ROM.
is_template boolean Whether the disk is a template from which other disks may be cloned.
template string ID or slug of the template from which the disk should be sourced.

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/disks \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Linux Disk",
  "size": 100,
  "region": "0f442f96-09e5-d4cc-9452-34896246cce7",
  "performance_tier": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
  "template": "example",
  "cdrom": false,
  "is_template": false
}'

Response Example

  HTTP/1.1 201 Created
{
  "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
  "name": "Linux Disk",
  "position": 0,
  "size": 100,
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "template": null,
  "state": "attached",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "cdrom": false,
  "is_template": false,
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Disk Delete

Delete a disk.
DELETE /disks/{disk_id}

Curl Example

curl -X DELETE https://cloud.joviam.com/api/v1/disks/$DISK_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
  "name": "Linux Disk",
  "position": 0,
  "size": 100,
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "template": null,
  "state": "attached",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "cdrom": false,
  "is_template": false,
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Disk Show

Show a disk.
GET /disks/{disk_id}

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/disks/$DISK_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
  "name": "Linux Disk",
  "position": 0,
  "size": 100,
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "template": null,
  "state": "attached",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "cdrom": false,
  "is_template": false,
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Disk State

Show the state of a disk.
GET /disks/{disk_id}/state

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/disks/$DISK_ID/state \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "state": "attached"
}

Disk List

List disks.
GET /disks

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/disks \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
    "name": "Linux Disk",
    "position": 0,
    "size": 100,
    "performance_tier": {
      "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
      "name": "Standard",
      "region": {
        "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
        "name": "AU East",
        "code": "SY3"
      }
    },
    "template": null,
    "state": "attached",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    },
    "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
    "cdrom": false,
    "is_template": false,
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

Disk Update

Update a disk.
PUT /disks/{disk_id}

Optional Parameters

Name Type Description
cdrom boolean Whether the disk is emulating a CD-ROM.
is_template boolean Whether the disk is a template from which other disks may be cloned.
name string Name of the disk.

Curl Example

curl -X PUT https://cloud.joviam.com/api/v1/disks/$DISK_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Linux Disk",
  "cdrom": false,
  "is_template": false
}'

Response Example

  HTTP/1.1 200 OK
{
  "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
  "name": "Linux Disk",
  "position": 0,
  "size": 100,
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "template": null,
  "state": "attached",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "cdrom": false,
  "is_template": false,
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Disk Resize

Resize a disk.
POST /disks/{disk_id}/resize

Required Parameters

Name Type Description
size integer Size of the disk, in gigabytes.

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/disks/$DISK_ID/resize \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "size": 100
}'

Response Example

  HTTP/1.1 200 OK
{
  "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
  "name": "Linux Disk",
  "position": 0,
  "size": 100,
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "template": null,
  "state": "attached",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "cdrom": false,
  "is_template": false,
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Disk Clone

Clone a disk.
POST /disks/{disk_id}/clone

Optional Parameters

Name Type Description
is_template boolean Whether the disk is a template from which other disks may be cloned.
name string Name of the disk.
performance_tier uuid ID of the performance tier of the disk.

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/disks/$DISK_ID/clone \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Linux Disk",
  "performance_tier": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
  "is_template": false
}'

Response Example

  HTTP/1.1 201 Created
{
  "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
  "name": "Linux Disk",
  "position": 0,
  "size": 100,
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "template": null,
  "state": "attached",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "cdrom": false,
  "is_template": false,
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Instance

A virtual machine.

Attributes

Name Type Description
availability_group array IDs of instances that should be grouped together with the instance for high availability.
boot_device string Device from which the instance should boot.
Default: disk
One of: cdrom disk network
created_at date-time When the instance was created.
disks array[disk] Disks that are attached to the instance, in device order.
hostname string Hostname of the instance.
id uuid Unique identifier of the instance.
memory integer Instance RAM in megabytes.
name string Name of the instance.
network_adapters array[network_adapter] Network adapters that are attached to the instance, in order.
performance_tier performance_tier Performance tier of the instance.
public_keys array[public_key] Public keys that can be used to access the instance.
region region Region in which the instance is located.
start_on_crash boolean Whether to restart the instance after a crash event.
Default: true
start_on_reboot boolean Whether to restart the instance after a reboot event.
Default: true
start_on_shutdown boolean Whether to restart the instance after a shutdown event.
Default: false
state string State of the instance.
One of: failed_to_provision initial pending_verification provisioning running starting stopped stopping terminated terminating transferred updating updating_network
updated_at date-time When the configuration of the instance was last updated.
virtualization string Virtualization mode.
One of: hvm pv

Instance Create (basic)

Create a new instance with a new boot disk (equivalent to "Basic Create" in GUI).
POST /instances

Required Parameters

Name Type Description
disk_performance_tier uuid ID of the performance tier to assign to the new boot disk.
instance_performance_tier uuid ID of the performance tier to assign to the instance.
memory integer Instance RAM in megabytes.
name string Name of the instance.
region uuid ID of the region in which to create the instance.
size integer Size of the boot disk in gigabytes.
template string ID or slug of the template to use for the new boot disk.

Optional Parameters

Name Type Description
allocate_private_ip boolean Whether to allocate an IP address from the first available private network, and attach it to the new instance.
Default: false
allocate_public_ip boolean Whether to allocate an IP address from the first available public network, and attach it to the new instance.
Default: false
availability_group array IDs of instances that should be grouped together with the instance for high availability.
networks array IDs of networks to which the instance should be attached. A new IP address will be allocated for each network.
public_keys array IDs of public keys that can be used to access the instance.
start_when_ready boolean Whether to start the instance immediately after the boot disk is provisioned.
Default: false

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/instances \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Web Server",
  "memory": 2048,
  "region": "0f442f96-09e5-d4cc-9452-34896246cce7",
  "instance_performance_tier": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
  "disk_performance_tier": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
  "template": "example",
  "size": 30,
  "allocate_public_ip": false,
  "allocate_private_ip": false,
  "networks": [
    "41ba5632-95f5-82b1-416e-e4a1ff74fee4"
  ],
  "public_keys": [
    "afa7d08a-ef15-f46f-eed9-ab015431b906"
  ],
  "start_when_ready": true,
  "availability_group": [
    "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
  ]
}'

Response Example

  HTTP/1.1 201 Created
{
  "id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "name": "Web Server",
  "memory": 2048,
  "virtualization": "hvm",
  "hostname": "web-server",
  "boot_device": "disk",
  "start_on_shutdown": false,
  "start_on_reboot": true,
  "start_on_crash": true,
  "state": "stopped",
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "disks": [
    {
      "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
      "name": "Linux Disk",
      "position": 0,
      "size": 100,
      "performance_tier": {
        "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
        "name": "Standard",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        }
      },
      "template": null,
      "state": "attached",
      "region": {
        "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
        "name": "AU East",
        "code": "SY3"
      },
      "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
      "cdrom": false,
      "is_template": false,
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "public_keys": [
    {
      "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
      "name": "Sharon's Desktop",
      "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "network_adapters": [
    {
      "id": "971e4423-2c66-9f81-2f78-b3cb16c3c345",
      "index": 0,
      "dhcp": false,
      "network": {
        "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
        "name": "My Private Network",
        "is_public": false,
        "specification": "192.168.2.0/24",
        "netmask": "255.255.255.0",
        "gateway": "192.168.2.1",
        "primary_nameserver": "192.168.2.4",
        "secondary_nameserver": "192.168.2.5",
        "state": "ready",
        "network_address": "192.168.2.0",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        },
        "created_at": "2016-05-10T03:36:34.615Z",
        "updated_at": "2016-05-10T04:36:34.615Z"
      },
      "ip_addresses": [
        {
          "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
          "name": "Web Server IP",
          "address": "12.34.56.78",
          "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
          "instance_ids": [
            "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
          ],
          "shareable": false,
          "created_at": "2016-05-10T03:36:34.615Z",
          "updated_at": "2016-05-10T04:36:34.615Z"
        }
      ],
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "availability_group": [
    "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
  ],
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Instance Create (advanced)

Create a new instance with existing disks and/or IP addresses (equivalient to "Advanced Create" in GUI).
POST /instances/assemble

Required Parameters

Name Type Description
memory integer Instance RAM in megabytes.
name string Name of the instance.
performance_tier uuid ID of the performance tier to assign to the instance.
region uuid ID of the region in which to create the instance.

Optional Parameters

Name Type Description
availability_group array IDs of instances that should be grouped together with the instance for high availability.
boot_device string Device from which the instance should boot.
Default: disk
One of: cdrom disk network
disks array IDs of disks to be attached to the instance, in device order.
ip_addresses array IDs of IP addresses to be assigned to the instance.
public_keys array IDs of public keys that can be used to access the instance.
start_on_crash boolean Whether to restart the instance after a crash event.
Default: true
start_on_reboot boolean Whether to restart the instance after a reboot event.
Default: true
start_on_shutdown boolean Whether to restart the instance after a shutdown event.
Default: false
virtualization string Virtualization mode.
One of: hvm pv

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/instances/assemble \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Web Server",
  "memory": 2048,
  "region": "0f442f96-09e5-d4cc-9452-34896246cce7",
  "performance_tier": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
  "disks": [
    "dc2706a0-52ce-de25-ff5a-0d15acd34c51"
  ],
  "ip_addresses": [
    "41ba5632-95f5-82b1-416e-e4a1ff74fee4"
  ],
  "public_keys": [
    "afa7d08a-ef15-f46f-eed9-ab015431b906"
  ],
  "boot_device": "disk",
  "start_on_shutdown": false,
  "start_on_reboot": true,
  "start_on_crash": true,
  "virtualization": "hvm",
  "availability_group": [
    "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
  ]
}'

Response Example

  HTTP/1.1 200 OK
{
  "id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "name": "Web Server",
  "memory": 2048,
  "virtualization": "hvm",
  "hostname": "web-server",
  "boot_device": "disk",
  "start_on_shutdown": false,
  "start_on_reboot": true,
  "start_on_crash": true,
  "state": "stopped",
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "disks": [
    {
      "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
      "name": "Linux Disk",
      "position": 0,
      "size": 100,
      "performance_tier": {
        "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
        "name": "Standard",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        }
      },
      "template": null,
      "state": "attached",
      "region": {
        "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
        "name": "AU East",
        "code": "SY3"
      },
      "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
      "cdrom": false,
      "is_template": false,
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "public_keys": [
    {
      "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
      "name": "Sharon's Desktop",
      "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "network_adapters": [
    {
      "id": "971e4423-2c66-9f81-2f78-b3cb16c3c345",
      "index": 0,
      "dhcp": false,
      "network": {
        "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
        "name": "My Private Network",
        "is_public": false,
        "specification": "192.168.2.0/24",
        "netmask": "255.255.255.0",
        "gateway": "192.168.2.1",
        "primary_nameserver": "192.168.2.4",
        "secondary_nameserver": "192.168.2.5",
        "state": "ready",
        "network_address": "192.168.2.0",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        },
        "created_at": "2016-05-10T03:36:34.615Z",
        "updated_at": "2016-05-10T04:36:34.615Z"
      },
      "ip_addresses": [
        {
          "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
          "name": "Web Server IP",
          "address": "12.34.56.78",
          "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
          "instance_ids": [
            "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
          ],
          "shareable": false,
          "created_at": "2016-05-10T03:36:34.615Z",
          "updated_at": "2016-05-10T04:36:34.615Z"
        }
      ],
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "availability_group": [
    "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
  ],
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Instance Delete

Delete an instance.
DELETE /instances/{instance_id}

Curl Example

curl -X DELETE https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 202 Accepted
{
  "id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "name": "Web Server",
  "memory": 2048,
  "virtualization": "hvm",
  "hostname": "web-server",
  "boot_device": "disk",
  "start_on_shutdown": false,
  "start_on_reboot": true,
  "start_on_crash": true,
  "state": "terminating",
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "disks": [
    {
      "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
      "name": "Linux Disk",
      "position": 0,
      "size": 100,
      "performance_tier": {
        "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
        "name": "Standard",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        }
      },
      "template": null,
      "state": "attached",
      "region": {
        "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
        "name": "AU East",
        "code": "SY3"
      },
      "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
      "cdrom": false,
      "is_template": false,
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "public_keys": [
    {
      "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
      "name": "Sharon's Desktop",
      "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "network_adapters": [
    {
      "id": "971e4423-2c66-9f81-2f78-b3cb16c3c345",
      "index": 0,
      "dhcp": false,
      "network": {
        "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
        "name": "My Private Network",
        "is_public": false,
        "specification": "192.168.2.0/24",
        "netmask": "255.255.255.0",
        "gateway": "192.168.2.1",
        "primary_nameserver": "192.168.2.4",
        "secondary_nameserver": "192.168.2.5",
        "state": "ready",
        "network_address": "192.168.2.0",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        },
        "created_at": "2016-05-10T03:36:34.615Z",
        "updated_at": "2016-05-10T04:36:34.615Z"
      },
      "ip_addresses": [
        {
          "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
          "name": "Web Server IP",
          "address": "12.34.56.78",
          "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
          "instance_ids": [
            "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
          ],
          "shareable": false,
          "created_at": "2016-05-10T03:36:34.615Z",
          "updated_at": "2016-05-10T04:36:34.615Z"
        }
      ],
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "availability_group": [
    "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
  ],
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Instance Show

Show an instance.
GET /instances/{instance_id}

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "name": "Web Server",
  "memory": 2048,
  "virtualization": "hvm",
  "hostname": "web-server",
  "boot_device": "disk",
  "start_on_shutdown": false,
  "start_on_reboot": true,
  "start_on_crash": true,
  "state": "stopped",
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "disks": [
    {
      "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
      "name": "Linux Disk",
      "position": 0,
      "size": 100,
      "performance_tier": {
        "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
        "name": "Standard",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        }
      },
      "template": null,
      "state": "attached",
      "region": {
        "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
        "name": "AU East",
        "code": "SY3"
      },
      "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
      "cdrom": false,
      "is_template": false,
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "public_keys": [
    {
      "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
      "name": "Sharon's Desktop",
      "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "network_adapters": [
    {
      "id": "971e4423-2c66-9f81-2f78-b3cb16c3c345",
      "index": 0,
      "dhcp": false,
      "network": {
        "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
        "name": "My Private Network",
        "is_public": false,
        "specification": "192.168.2.0/24",
        "netmask": "255.255.255.0",
        "gateway": "192.168.2.1",
        "primary_nameserver": "192.168.2.4",
        "secondary_nameserver": "192.168.2.5",
        "state": "ready",
        "network_address": "192.168.2.0",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        },
        "created_at": "2016-05-10T03:36:34.615Z",
        "updated_at": "2016-05-10T04:36:34.615Z"
      },
      "ip_addresses": [
        {
          "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
          "name": "Web Server IP",
          "address": "12.34.56.78",
          "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
          "instance_ids": [
            "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
          ],
          "shareable": false,
          "created_at": "2016-05-10T03:36:34.615Z",
          "updated_at": "2016-05-10T04:36:34.615Z"
        }
      ],
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "availability_group": [
    "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
  ],
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Instance List

List instances.
GET /instances

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/instances \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
    "name": "Web Server",
    "memory": 2048,
    "virtualization": "hvm",
    "hostname": "web-server",
    "boot_device": "disk",
    "start_on_shutdown": false,
    "start_on_reboot": true,
    "start_on_crash": true,
    "state": "stopped",
    "performance_tier": {
      "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
      "name": "Standard",
      "region": {
        "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
        "name": "AU East",
        "code": "SY3"
      }
    },
    "disks": [
      {
        "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
        "name": "Linux Disk",
        "position": 0,
        "size": 100,
        "performance_tier": {
          "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
          "name": "Standard",
          "region": {
            "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
            "name": "AU East",
            "code": "SY3"
          }
        },
        "template": null,
        "state": "attached",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        },
        "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
        "cdrom": false,
        "is_template": false,
        "created_at": "2016-05-10T03:36:34.615Z",
        "updated_at": "2016-05-10T04:36:34.615Z"
      }
    ],
    "public_keys": [
      {
        "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
        "name": "Sharon's Desktop",
        "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
        "created_at": "2016-05-10T03:36:34.615Z",
        "updated_at": "2016-05-10T04:36:34.615Z"
      }
    ],
    "network_adapters": [
      {
        "id": "971e4423-2c66-9f81-2f78-b3cb16c3c345",
        "index": 0,
        "dhcp": false,
        "network": {
          "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
          "name": "My Private Network",
          "is_public": false,
          "specification": "192.168.2.0/24",
          "netmask": "255.255.255.0",
          "gateway": "192.168.2.1",
          "primary_nameserver": "192.168.2.4",
          "secondary_nameserver": "192.168.2.5",
          "state": "ready",
          "network_address": "192.168.2.0",
          "region": {
            "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
            "name": "AU East",
            "code": "SY3"
          },
          "created_at": "2016-05-10T03:36:34.615Z",
          "updated_at": "2016-05-10T04:36:34.615Z"
        },
        "ip_addresses": [
          {
            "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
            "name": "Web Server IP",
            "address": "12.34.56.78",
            "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
            "instance_ids": [
              "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
            ],
            "shareable": false,
            "created_at": "2016-05-10T03:36:34.615Z",
            "updated_at": "2016-05-10T04:36:34.615Z"
          }
        ],
        "created_at": "2016-05-10T03:36:34.615Z",
        "updated_at": "2016-05-10T04:36:34.615Z"
      }
    ],
    "availability_group": [
      "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
    ],
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    },
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

Instance Update

Update an instance.
PUT /instances/{instance_id}

Optional Parameters

Name Type Description
boot_device string Device from which the instance should boot.
Default: disk
One of: cdrom disk network
memory integer Instance RAM in megabytes.
name string Name of the instance.
note string Free text field for storing custom information about the instance.
performance_tier uuid ID of the performance tier to assign to the instance.
start_on_crash boolean Whether to restart the instance after a crash event.
Default: true
start_on_reboot boolean Whether to restart the instance after a reboot event.
Default: true
start_on_shutdown boolean Whether to restart the instance after a shutdown event.
Default: false
virtualization string Virtualization mode.
One of: hvm pv

Curl Example

curl -X PUT https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Web Server",
  "note": "Configured nginx with PHP. Firewall only allows SSH through private network.",
  "virtualization": "hvm",
  "memory": 2048,
  "boot_device": "disk",
  "start_on_shutdown": false,
  "start_on_reboot": true,
  "start_on_crash": true,
  "performance_tier": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51"
}'

Response Example

  HTTP/1.1 200 OK
{
  "id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "name": "Web Server",
  "memory": 2048,
  "virtualization": "hvm",
  "hostname": "web-server",
  "boot_device": "disk",
  "start_on_shutdown": false,
  "start_on_reboot": true,
  "start_on_crash": true,
  "state": "stopped",
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "disks": [
    {
      "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
      "name": "Linux Disk",
      "position": 0,
      "size": 100,
      "performance_tier": {
        "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
        "name": "Standard",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        }
      },
      "template": null,
      "state": "attached",
      "region": {
        "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
        "name": "AU East",
        "code": "SY3"
      },
      "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
      "cdrom": false,
      "is_template": false,
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "public_keys": [
    {
      "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
      "name": "Sharon's Desktop",
      "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "network_adapters": [
    {
      "id": "971e4423-2c66-9f81-2f78-b3cb16c3c345",
      "index": 0,
      "dhcp": false,
      "network": {
        "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
        "name": "My Private Network",
        "is_public": false,
        "specification": "192.168.2.0/24",
        "netmask": "255.255.255.0",
        "gateway": "192.168.2.1",
        "primary_nameserver": "192.168.2.4",
        "secondary_nameserver": "192.168.2.5",
        "state": "ready",
        "network_address": "192.168.2.0",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        },
        "created_at": "2016-05-10T03:36:34.615Z",
        "updated_at": "2016-05-10T04:36:34.615Z"
      },
      "ip_addresses": [
        {
          "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
          "name": "Web Server IP",
          "address": "12.34.56.78",
          "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
          "instance_ids": [
            "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
          ],
          "shareable": false,
          "created_at": "2016-05-10T03:36:34.615Z",
          "updated_at": "2016-05-10T04:36:34.615Z"
        }
      ],
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "availability_group": [
    "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
  ],
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Instance State

Get the state of an instance.
GET /instances/{instance_id}/state

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/state \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "state": "stopped"
}

Instance Note

Get the note of an instance.
GET /instances/{instance_id}/note

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/note \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "note": "Configured nginx with PHP. Firewall only allows SSH through private network."
}

Instance Start

Start an instance.
POST /instances/{instance_id}/start

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/start \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 202 Accepted
{
  "id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "name": "Web Server",
  "memory": 2048,
  "virtualization": "hvm",
  "hostname": "web-server",
  "boot_device": "disk",
  "start_on_shutdown": false,
  "start_on_reboot": true,
  "start_on_crash": true,
  "state": "starting",
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "disks": [
    {
      "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
      "name": "Linux Disk",
      "position": 0,
      "size": 100,
      "performance_tier": {
        "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
        "name": "Standard",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        }
      },
      "template": null,
      "state": "attached",
      "region": {
        "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
        "name": "AU East",
        "code": "SY3"
      },
      "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
      "cdrom": false,
      "is_template": false,
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "public_keys": [
    {
      "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
      "name": "Sharon's Desktop",
      "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "network_adapters": [
    {
      "id": "971e4423-2c66-9f81-2f78-b3cb16c3c345",
      "index": 0,
      "dhcp": false,
      "network": {
        "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
        "name": "My Private Network",
        "is_public": false,
        "specification": "192.168.2.0/24",
        "netmask": "255.255.255.0",
        "gateway": "192.168.2.1",
        "primary_nameserver": "192.168.2.4",
        "secondary_nameserver": "192.168.2.5",
        "state": "ready",
        "network_address": "192.168.2.0",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        },
        "created_at": "2016-05-10T03:36:34.615Z",
        "updated_at": "2016-05-10T04:36:34.615Z"
      },
      "ip_addresses": [
        {
          "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
          "name": "Web Server IP",
          "address": "12.34.56.78",
          "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
          "instance_ids": [
            "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
          ],
          "shareable": false,
          "created_at": "2016-05-10T03:36:34.615Z",
          "updated_at": "2016-05-10T04:36:34.615Z"
        }
      ],
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "availability_group": [
    "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
  ],
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Instance Stop

Stop an instance.
POST /instances/{instance_id}/stop

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/stop \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 202 Accepted
{
  "id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
  "name": "Web Server",
  "memory": 2048,
  "virtualization": "hvm",
  "hostname": "web-server",
  "boot_device": "disk",
  "start_on_shutdown": false,
  "start_on_reboot": true,
  "start_on_crash": true,
  "state": "stopping",
  "performance_tier": {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  },
  "disks": [
    {
      "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
      "name": "Linux Disk",
      "position": 0,
      "size": 100,
      "performance_tier": {
        "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
        "name": "Standard",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        }
      },
      "template": null,
      "state": "attached",
      "region": {
        "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
        "name": "AU East",
        "code": "SY3"
      },
      "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
      "cdrom": false,
      "is_template": false,
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "public_keys": [
    {
      "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
      "name": "Sharon's Desktop",
      "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "network_adapters": [
    {
      "id": "971e4423-2c66-9f81-2f78-b3cb16c3c345",
      "index": 0,
      "dhcp": false,
      "network": {
        "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
        "name": "My Private Network",
        "is_public": false,
        "specification": "192.168.2.0/24",
        "netmask": "255.255.255.0",
        "gateway": "192.168.2.1",
        "primary_nameserver": "192.168.2.4",
        "secondary_nameserver": "192.168.2.5",
        "state": "ready",
        "network_address": "192.168.2.0",
        "region": {
          "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
          "name": "AU East",
          "code": "SY3"
        },
        "created_at": "2016-05-10T03:36:34.615Z",
        "updated_at": "2016-05-10T04:36:34.615Z"
      },
      "ip_addresses": [
        {
          "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
          "name": "Web Server IP",
          "address": "12.34.56.78",
          "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
          "instance_ids": [
            "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
          ],
          "shareable": false,
          "created_at": "2016-05-10T03:36:34.615Z",
          "updated_at": "2016-05-10T04:36:34.615Z"
        }
      ],
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    }
  ],
  "availability_group": [
    "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
  ],
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Instance Remote Access

Start a remote access session. See Console Session for connection instructions.
POST /instances/{instance_id}/remote_access

Optional Parameters

Name Type Description
type string Type of remote access.
One of: serial vnc

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/remote_access \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "type": "vnc"
}'

Response Example

  HTTP/1.1 202 Accepted
{
  "id": "b80bb774-0288-fda1-f201-890375a60c8f",
  "state": "ready",
  "host": "192.168.5.5",
  "port": 50321,
  "token": "4738y4o10984213",
  "type": "vnc",
  "url": "wss://region.cloudhosting.example/12345",
  "instance_id": "7123a699-d77d-b647-9a1d-8ece2c4f1c16",
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Instance Update Disks

Replace the list of disks attached to the instance. Status 202 will be returned if the instance is running (to allow for live attaching and/or detaching).
PUT /instances/{instance_id}/disks

Required Parameters

Name Type Description
disks array IDs of disks to be attached to the instance, in device order.

Curl Example

curl -X PUT https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/disks \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "disks": [
    "dc2706a0-52ce-de25-ff5a-0d15acd34c51"
  ]
}'

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
    "name": "Linux Disk",
    "position": 0,
    "size": 100,
    "performance_tier": {
      "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
      "name": "Standard",
      "region": {
        "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
        "name": "AU East",
        "code": "SY3"
      }
    },
    "template": null,
    "state": "attached",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    },
    "instance_id": "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c",
    "cdrom": false,
    "is_template": false,
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

Instance Update Public Keys

Replace the list of public keys associated with the instance. Status 202 will be returned if the instance is running.
PUT /instances/{instance_id}/public_keys

Required Parameters

Name Type Description
public_keys array IDs of public keys that can be used to access the instance.

Curl Example

curl -X PUT https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/public_keys \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "public_keys": [
    "afa7d08a-ef15-f46f-eed9-ab015431b906"
  ]
}'

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
    "name": "Sharon's Desktop",
    "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

Instance Update Networking

Replace the list of network adapters connected to the instance. Status 202 will be returned if the instance is running (to allow for life attaching and/or detaching)
PUT /instances/{instance_id}/network_adapters

Required Parameters

Name Type Description
network_adapters array An array of objects that each describe a connection to a given network, with the following keys:
Name Type Description
network uuid Network ID.
ip_addresses array[uuid], string Either an array of zero or more IP address IDs, or dhcp.

Curl Example

curl -X PUT https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/network_adapters \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "network_adapters": [
    {
      "network": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
      "ip_addresses": [
        "41ba5632-95f5-82b1-416e-e4a1ff74fee4"
      ]
    }
  ]
}'

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "971e4423-2c66-9f81-2f78-b3cb16c3c345",
    "index": 0,
    "dhcp": false,
    "network": {
      "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
      "name": "My Private Network",
      "is_public": false,
      "specification": "192.168.2.0/24",
      "netmask": "255.255.255.0",
      "gateway": "192.168.2.1",
      "primary_nameserver": "192.168.2.4",
      "secondary_nameserver": "192.168.2.5",
      "state": "ready",
      "network_address": "192.168.2.0",
      "region": {
        "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
        "name": "AU East",
        "code": "SY3"
      },
      "created_at": "2016-05-10T03:36:34.615Z",
      "updated_at": "2016-05-10T04:36:34.615Z"
    },
    "ip_addresses": [
      {
        "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
        "name": "Web Server IP",
        "address": "12.34.56.78",
        "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
        "instance_ids": [
          "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
        ],
        "shareable": false,
        "created_at": "2016-05-10T03:36:34.615Z",
        "updated_at": "2016-05-10T04:36:34.615Z"
      }
    ],
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

Instance Update High Availability

Replace the list of instances with which the instance is grouped for high availability.
PUT /instances/{instance_id}/availability_group

Required Parameters

Name Type Description
availability_group array IDs of instances that should be grouped together with the instance for high availability.

Curl Example

curl -X PUT https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/availability_group \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "availability_group": [
    "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
  ]
}'

Response Example

  HTTP/1.1 200 OK
[
  "0c4dde6f-7c55-0afd-e15f-a5bd0f157033"
]

Instance Get Context

Get context variables.
GET /instances/{instance_id}/context

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/context \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "MY_VARIABLE": "value of my variable",
  "EMPTY_VARIABLE": ""
}

Instance Set Context

Set context variables. Existing variables will be deleted first.
POST /instances/{instance_id}/context

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/context \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "MY_VARIABLE": "value of my variable",
  "EMPTY_VARIABLE": ""
}'

Response Example

  HTTP/1.1 200 OK
{
  "MY_VARIABLE": "value of my variable",
  "EMPTY_VARIABLE": ""
}

Instance Update Context

Update context variables. Values will be merged with existing variables.
PUT /instances/{instance_id}/context

Curl Example

curl -X PUT https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/context \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "MY_VARIABLE": "value of my variable",
  "EMPTY_VARIABLE": ""
}'

Response Example

  HTTP/1.1 200 OK
{
  "MY_VARIABLE": "value of my variable",
  "EMPTY_VARIABLE": ""
}

Instance Delete Context Variable

Delete a context variable.
DELETE /instances/{instance_id}/context/{instance_context_key}

Curl Example

curl -X DELETE https://cloud.joviam.com/api/v1/instances/$INSTANCE_ID/context/$INSTANCE_CONTEXT_KEY \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "MY_VARIABLE": "value of my variable",
  "EMPTY_VARIABLE": ""
}

IP Address

An IP address.

Attributes

Name Type Description
address ipv4 Address in IPv4 notation.
created_at date-time When the IP address was allocated.
id uuid Unique identifier of the IP address.
instance_ids array IDs of instances to which the IP address is attached.
name nullable string Name of the IP address.
network_id uuid ID of the network to which the IP address belongs.
shareable boolean Whether the IP address can be shared between instances.
updated_at date-time When the IP address was last updated.

IP Address Allocate

Allocate a new IP address.
POST /ip_addresses

Optional Parameters

Name Type Description
address ipv4 Address in IPv4 notation.
name nullable string Name of the IP address.
network uuid ID of the network to which the IP address belongs. Optional for public IPs if region is provided.
region uuid ID of the region in which to create the IP address. Optional if network is provided.
shareable boolean Whether the IP address can be shared between instances.

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/ip_addresses \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Web Server IP",
  "shareable": false,
  "address": "12.34.56.78",
  "region": "0f442f96-09e5-d4cc-9452-34896246cce7",
  "network": "4e19114d-66ab-e7ed-ba93-91885a98c59b"
}'

Response Example

  HTTP/1.1 201 Created
{
  "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
  "name": "Web Server IP",
  "address": "12.34.56.78",
  "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
  "instance_ids": [
    "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
  ],
  "shareable": false,
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

IP Address Deallocate

Deallocate an IP address.
DELETE /ip_addresses/{ip_address_id}

Curl Example

curl -X DELETE https://cloud.joviam.com/api/v1/ip_addresses/$IP_ADDRESS_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
}

IP Address List

List IP addresses.
GET /ip_addresses

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/ip_addresses \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
    "name": "Web Server IP",
    "address": "12.34.56.78",
    "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
    "instance_ids": [
      "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
    ],
    "shareable": false,
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

IP Address List (public)

List public IP addresses.
GET /ip_addresses/public

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/ip_addresses/public \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
    "name": "Web Server IP",
    "address": "12.34.56.78",
    "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
    "instance_ids": [
      "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
    ],
    "shareable": false,
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

IP Address List (private)

List private IP addresses.
GET /ip_addresses/private

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/ip_addresses/private \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
    "name": "Web Server IP",
    "address": "12.34.56.78",
    "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
    "instance_ids": [
      "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
    ],
    "shareable": false,
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

IP Address Show

Show an IP address.
GET /ip_addresses/{ip_address_id}

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/ip_addresses/$IP_ADDRESS_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
  "name": "Web Server IP",
  "address": "12.34.56.78",
  "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
  "instance_ids": [
    "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
  ],
  "shareable": false,
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

IP Address Update

Update an IP address.
PUT /ip_addresses/{ip_address_id}

Optional Parameters

Name Type Description
name nullable string Name of the IP address.
shareable boolean Whether the IP address can be shared between instances.

Curl Example

curl -X PUT https://cloud.joviam.com/api/v1/ip_addresses/$IP_ADDRESS_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Web Server IP",
  "shareable": false
}'

Response Example

  HTTP/1.1 200 OK
{
  "id": "41ba5632-95f5-82b1-416e-e4a1ff74fee4",
  "name": "Web Server IP",
  "address": "12.34.56.78",
  "network_id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
  "instance_ids": [
    "51afcc4f-fa9f-7e01-87e0-e53ba9ef0e4c"
  ],
  "shareable": false,
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Network

A virtual network.

Attributes

Name Type Description
created_at date-time When the network was created.
gateway nullable ipv4 Gateway of the network.
id uuid Unique identifier of the network.
is_public boolean Whether the network is public (i.e. routable on the Internet).
name nullable string Name of the network.
netmask ipv4 Netmask of the network.
network_address ipv4 Reserved address of the network (i.e. the first IP in its range).
primary_nameserver nullable ipv4 Primary name server for the network.
region region Region of the network.
secondary_nameserver nullable ipv4 Secondary name server for the network.
specification string Network specification in CIDR format.
state string State of the network.
One of: failed_to_provision initial pending_verification provisioning ready terminated terminating transferred
updated_at date-time When the network was last updated.

Network Create

Create a private network.
POST /networks

Required Parameters

Name Type Description
name nullable string Name of the network.
region uuid ID of the region in which to create the network.
specification string Network specification in CIDR format.

Optional Parameters

Name Type Description
gateway nullable ipv4 Gateway of the network.
primary_nameserver nullable ipv4 Primary name server for the network.
secondary_nameserver nullable ipv4 Secondary name server for the network.

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/networks \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "My Private Network",
  "specification": "192.168.2.0/24",
  "gateway": "192.168.2.1",
  "primary_nameserver": "192.168.2.4",
  "secondary_nameserver": "192.168.2.5",
  "region": "0f442f96-09e5-d4cc-9452-34896246cce7"
}'

Response Example

  HTTP/1.1 201 Created
{
  "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
  "name": "My Private Network",
  "is_public": false,
  "specification": "192.168.2.0/24",
  "netmask": "255.255.255.0",
  "gateway": "192.168.2.1",
  "primary_nameserver": "192.168.2.4",
  "secondary_nameserver": "192.168.2.5",
  "state": "ready",
  "network_address": "192.168.2.0",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Network Delete

Delete a private network.
DELETE /networks/{network_id}

Curl Example

curl -X DELETE https://cloud.joviam.com/api/v1/networks/$NETWORK_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
  "name": "My Private Network",
  "is_public": false,
  "specification": "192.168.2.0/24",
  "netmask": "255.255.255.0",
  "gateway": "192.168.2.1",
  "primary_nameserver": "192.168.2.4",
  "secondary_nameserver": "192.168.2.5",
  "state": "ready",
  "network_address": "192.168.2.0",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Network List

List networks.
GET /networks

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/networks \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
    "name": "My Private Network",
    "is_public": false,
    "specification": "192.168.2.0/24",
    "netmask": "255.255.255.0",
    "gateway": "192.168.2.1",
    "primary_nameserver": "192.168.2.4",
    "secondary_nameserver": "192.168.2.5",
    "state": "ready",
    "network_address": "192.168.2.0",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    },
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

Network List (public)

List public networks.
GET /networks/public

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/networks/public \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
    "name": "My Private Network",
    "is_public": false,
    "specification": "192.168.2.0/24",
    "netmask": "255.255.255.0",
    "gateway": "192.168.2.1",
    "primary_nameserver": "192.168.2.4",
    "secondary_nameserver": "192.168.2.5",
    "state": "ready",
    "network_address": "192.168.2.0",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    },
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

Network List (private)

List private networks.
GET /networks/private

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/networks/private \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
    "name": "My Private Network",
    "is_public": false,
    "specification": "192.168.2.0/24",
    "netmask": "255.255.255.0",
    "gateway": "192.168.2.1",
    "primary_nameserver": "192.168.2.4",
    "secondary_nameserver": "192.168.2.5",
    "state": "ready",
    "network_address": "192.168.2.0",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    },
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

Network Show

Show a network.
GET /networks/{network_id}

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/networks/$NETWORK_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
  "name": "My Private Network",
  "is_public": false,
  "specification": "192.168.2.0/24",
  "netmask": "255.255.255.0",
  "gateway": "192.168.2.1",
  "primary_nameserver": "192.168.2.4",
  "secondary_nameserver": "192.168.2.5",
  "state": "ready",
  "network_address": "192.168.2.0",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Network Update

Update a private network.
PUT /networks/{network_id}

Optional Parameters

Name Type Description
gateway nullable ipv4 Gateway of the network.
name nullable string Name of the network.
primary_nameserver nullable ipv4 Primary name server for the network.
secondary_nameserver nullable ipv4 Secondary name server for the network.

Curl Example

curl -X PUT https://cloud.joviam.com/api/v1/networks/$NETWORK_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "My Private Network",
  "gateway": "192.168.2.1",
  "primary_nameserver": "192.168.2.4",
  "secondary_nameserver": "192.168.2.5"
}'

Response Example

  HTTP/1.1 200 OK
{
  "id": "4e19114d-66ab-e7ed-ba93-91885a98c59b",
  "name": "My Private Network",
  "is_public": false,
  "specification": "192.168.2.0/24",
  "netmask": "255.255.255.0",
  "gateway": "192.168.2.1",
  "primary_nameserver": "192.168.2.4",
  "secondary_nameserver": "192.168.2.5",
  "state": "ready",
  "network_address": "192.168.2.0",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Network Adapter

Binding between an instance and a network (i.e. a NIC).

Attributes

Name Type Description
created_at date-time When the network adapter was created.
dhcp boolean Whether DHCP is enabled for the network adapter.
Default: false
id uuid Unique identifier of the network adapter.
index integer The position at which the network adapter is connected to the instances (e.g. 2 => eth2)
ip_addresses array[ip_address] Static IP addresses attached to the network adapter.
network network The network to which the adapter is connected.
updated_at date-time When the network adapter was last updated.

Performance Tier

A pre-defined configuration of performance characteristics for a disk or instance.

Attributes

Name Type Description
id uuid Unique identifier of the performance tier.
name string Name of the performance tier.
region region Region in which the performance tier is available.

Performance Tier List (instance)

List instance performance tiers.
GET /performance_tiers/instances

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/performance_tiers/instances \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  }
]

Performance Tier List (disk)

List disk performance tiers.
GET /performance_tiers/disks

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/performance_tiers/disks \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "9023fa53-fe2a-81b7-6904-7d28ae3e3d51",
    "name": "Standard",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    }
  }
]

Public Key

An SSH public key that can be used to log into SSH-enabled instances.

Attributes

Name Type Description
created_at date-time When the public key was created.
id uuid Unique identifier of the public key.
key string Public key in OpenSSH format.
name string Name of the public key.
updated_at date-time When the public key was last updated.

Public Key Create

Upload a public key.
POST /public_keys

Required Parameters

Name Type Description
key string Public key in OpenSSH format.
name string Name of the public key.

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/public_keys \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Sharon's Desktop",
  "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)"
}'

Response Example

  HTTP/1.1 201 Created
{
  "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
  "name": "Sharon's Desktop",
  "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Public Key Delete

Delete a public key.
DELETE /public_keys/{public_key_id}

Curl Example

curl -X DELETE https://cloud.joviam.com/api/v1/public_keys/$PUBLIC_KEY_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
}

Public Key Show

Show a public key.
GET /public_keys/{public_key_id}

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/public_keys/$PUBLIC_KEY_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
  "name": "Sharon's Desktop",
  "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Public Key List

List public keys.
GET /public_keys

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/public_keys \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
    "name": "Sharon's Desktop",
    "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
    "created_at": "2016-05-10T03:36:34.615Z",
    "updated_at": "2016-05-10T04:36:34.615Z"
  }
]

Public Key Update

Update a public key.
PUT /public_keys/{public_key_id}

Optional Parameters

Name Type Description
name string Name of the public key.

Curl Example

curl -X PUT https://cloud.joviam.com/api/v1/public_keys/$PUBLIC_KEY_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Sharon's Desktop"
}'

Response Example

  HTTP/1.1 200 OK
{
  "id": "afa7d08a-ef15-f46f-eed9-ab015431b906",
  "name": "Sharon's Desktop",
  "key": "ssh-rsa AAAAB3NzaC......uL/jU95H sharon@sharons-desktop.local (example is truncated)",
  "created_at": "2016-05-10T03:36:34.615Z",
  "updated_at": "2016-05-10T04:36:34.615Z"
}

Region

A physical region (i.e. a data center).

Attributes

Name Type Description
code string Code of the region.
id uuid Unique identifier of the region.
name string Name of the region.

Region Show

Show a region.
GET /regions/{region_id}

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/regions/$REGION_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
  "name": "AU East",
  "code": "SY3"
}

Region List

List regions.
GET /regions

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/regions \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  }
]

Template

A template that is used to provision boot disks.

Attributes

Name Type Description
allows_public_key_auth boolean Whether the operating system on the template supports SSH key functionality.
disk_id nullable uuid ID of the disk that contains the data for this template. Null for system templates.
id uuid Unique identifier of the template.
minimum_disk_size nullable integer Minimum size for boot disks that use the template, in gigabytes.
name nullable string Name of the template.
published boolean Whether or not this template is published and shared to other organizations.
recommended_virtualization string The type of virtualization recommended (or in some cases required) for the template.
One of: hvm pv
region region Region in which the template is available.
slug nullable string A unique short name used to find the most recent version of a template.
superseded_by_id nullable uuid ID of the template which superseded this template (caused by updating the source disk).
version integer A number starting from 1 that increases each time the source disk for a template is changed.

Template Show

Show a template.
GET /templates/{template_id}

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/templates/$TEMPLATE_ID \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
{
  "id": "74f53564-53a6-9e43-8e0f-58ef93103cc0",
  "name": "Ubuntu 16.04",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "minimum_disk_size": 50,
  "allows_public_key_auth": true,
  "slug": "ubuntu-16-04",
  "version": 1,
  "disk_id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
  "published": true,
  "superseded_by_id": "74f53564-53a6-9e43-8e0f-58ef93103cc0",
  "recommended_virtualization": "hvm"
}

Template List

List templates.
GET /templates

Curl Example

curl -X GET https://cloud.joviam.com/api/v1/templates \
  -H "Authorization: Bearer $OAUTH_TOKEN"

Response Example

  HTTP/1.1 200 OK
[
  {
    "id": "74f53564-53a6-9e43-8e0f-58ef93103cc0",
    "name": "Ubuntu 16.04",
    "region": {
      "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
      "name": "AU East",
      "code": "SY3"
    },
    "minimum_disk_size": 50,
    "allows_public_key_auth": true,
    "slug": "ubuntu-16-04",
    "version": 1,
    "disk_id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
    "published": true,
    "superseded_by_id": "74f53564-53a6-9e43-8e0f-58ef93103cc0",
    "recommended_virtualization": "hvm"
  }
]

Template Supersede

Create a new template by superseding an existing one with a different source disk.
POST /templates

Required Parameters

Name Type Description
disk uuid Unique identifier of the disk.
supersedes uuid ID of the template to supersede (create a new version of).

Curl Example

curl -X POST https://cloud.joviam.com/api/v1/templates \
  -H "Authorization: Bearer $OAUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "disk": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
  "supersedes": "74f53564-53a6-9e43-8e0f-58ef93103cc0"
}'

Response Example

  HTTP/1.1 201 Created
{
  "id": "74f53564-53a6-9e43-8e0f-58ef93103cc0",
  "name": "Ubuntu 16.04",
  "region": {
    "id": "0f442f96-09e5-d4cc-9452-34896246cce7",
    "name": "AU East",
    "code": "SY3"
  },
  "minimum_disk_size": 50,
  "allows_public_key_auth": true,
  "slug": "ubuntu-16-04",
  "version": 1,
  "disk_id": "dc2706a0-52ce-de25-ff5a-0d15acd34c51",
  "published": true,
  "superseded_by_id": "74f53564-53a6-9e43-8e0f-58ef93103cc0",
  "recommended_virtualization": "hvm"
}