API

Instances

Instances are running virtual servers on the Civo cloud platform. They can be of variable size.


Create an instance

Any user can create an instance, providing it's within their quota. The size of the instance is from a list of sizes, as is the region to host the instance. Instances in a single region for a given account will all share an internal network, and can (optionally, but by default) have one public IP address assigned to them.

Instances are built from a disk image, which may be just a base operating system such as ubuntu-14.04, or it may be a ready configured application or control panel hosting system.

Instances are created by sending a POST request to https://api.civo.com/v2/instances.

Request

The following parameter(s) should be sent along with the request:

Name Description
hostname (required) a fully qualified domain name that should be set as the instance's hostname
size (required) the name of the size, from the current size list, e.g. "g2.small"
network_id (required) this must be the ID of the network from the network list
template_id (required) the ID for the disk image to use to build the instance, from the current disk image list
count (optional) the number of instances to create (default is 1)
firewall_id (optional) the ID for firewall from firewall list. The firewall must exists in the network (see network_id). If left blank and network_id is default network, the default firewall will be used (open to all).
reverse_dns (optional) a fully qualified domain name that should be used as the instance's IP's reverse DNS (uses the hostname if unspecified)
region (optional) the identifier for the region, from the current region list (a random one will be picked by the system if not specified)
public_ip (optional) this should be either none or create. If create is specified, it will automatically allocate an initial public IP address, rather than having to add the first one later. Default is create)
initial_user (optional) the name of the initial user created on the server (optional; this will default to the template's default_username and fallback to "civo")
ssh_key_id (optional) the ID of an already uploaded SSH public key to use for login to the default user (optional; if one isn't provided a random password will be set and returned in the initial_password field)
script (optional) the contents of a script that will be uploaded to /usr/local/bin/civo-user-init-script on your instance, read/write/executable only by root and then will be executed at the end of the cloud initialization
tags (optional) a space separated list of tags, to be used freely as required

Response

The response is a JSON object that describes the initial setup of the instance, these details may not be returned in future calls to list instances. The script element only appears if one was sent at creation time.

{
    "id": "779d651a-8e10-4019-9cc0-448451d16157",
    "name": "test-b775c2ea",
    "hostname": "test",
    "account_id": "73993076-f1dc-4b53-88d8-158d97d7be92",
    "size": "g3.small",
    "firewall_id": "e9bcefa3-f942-43a3-98f5-354608f0d55e",
    "source_type": "diskimage",
    "source_id": "ubuntu-focal",
    "network_id": "950c8a1c-79d5-4e57-925a-6e941ebec8a3",
    "initial_user": "root",
    "initial_password": "foobar",
    "ssh_key": "ssh-rsa ...",
    "ssh_key_id": "21aa424f-13be-44db-a908-6d4625c7e4f4",
    "tags": [
        "first",
        "second"
    ],
    "user_script": "SGVsbG8gd29ybGQh",
    "status": "BUILDING",
    "civostatsd_token": "12fa5f73-9cca-4d9f-aca8-b7733a422a6b",
    "public_ip": null,
    "private_ip": null,
    "ipv6": null,
    "namespace_id": null,
    "notes": "",
    "reverse_dns": "",
    "cpu_cores": 1,
    "ram_mb": 2048,
    "disk_gb": 25
}

Example of creating an instance

curl -H "Authorization: bearer 12345" https://api.civo.com/v2/instances \
  -d "hostname=server1.prod.example.com&size=g2.xsmall&region=lon1&public_ip=true&template_id=b67d6fed-8ab6-45b9-be2d-2f3337c933c6&initial_user=example"
// At a shell prompt run:
// npm init -y
// npm i --save request

var request = require('request');

request.post(
  'https://api.civo.com/v2/instances',
  {
    form: {
      hostname: "server1.prod.example.com",
      size: "g2.xsmall",
      region: "lon1",
      public_ip: "true",
      template_id: "b67d6fed-8ab6-45b9-be2d-2f3337c933c6",
      initial_user: "example"
    }
  },
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body)
    }
  }
).auth(null, null, true, '12345');
require 'net/http'

http = Net::HTTP.new('api.civo.com', 443)
http.use_ssl = true

headers = {
  'Authorization' => 'bearer 12345',
  'Content-Type' => 'application/x-www-form-urlencoded'
}

resp, data = http.post('/v2/instances', 'hostname=server1.prod.example.com&size=g2.xsmall&region=lon1&public_ip=true&template_id=b67d6fed-8ab6-45b9-be2d-2f3337c933c6&initial_user=example"', headers)

List instances

A list of instances accessible from an account is available by sending a GET request to https://api.civo.com/v2/instances.

Request

You can optionally filter the list of instances by passing in:

Name Description
tags (optional) a space separated list of tags
page (optional) which page of results to return (defaults to 1)
per_page (optional) how many instances to return per page (defaults to 20)
region (optional) the identifier for the region, from the current region list (a random one will be picked by the system if not specified)

Response

The response is a paginated JSON array of objects that describes summary details for each instance (the civostatsd_stats currently is just a string containing CPU %, Memory %, Storage %).

{
    "page": 1,
    "per_page": null,
    "pages": 1,
    "items": [
        {
            "id": "779d651a-8e10-4019-9cc0-448451d16157",
            "name": "test-b775c2ea",
            "hostname": "test",
            "account_id": "73993076-f1dc-4b53-88d8-158d97d7be92",
            "size": "g3.small",
            "firewall_id": "e9bcefa3-f942-43a3-98f5-354608f0d55e",
            "source_type": "diskimage",
            "source_id": "ubuntu-focal",
            "network_id": "950c8a1c-79d5-4e57-925a-6e941ebec8a3",
            "initial_user": "root",
            "initial_password": "foobar",
            "ssh_key": "ssh-rsa ...",
            "ssh_key_id": "21aa424f-13be-44db-a908-6d4625c7e4f4",
            "tags": [
                "first",
                "second"
            ],
            "user_script": "SGVsbG8gd29ybGQh",
            "status": "ACTIVE",
            "civostatsd_token": "12fa5f73-9cca-4d9f-aca8-b7733a422a6b",
            "public_ip": "212.2.247.88",
            "private_ip": "192.168.1.2",
            "ipv6": null,
            "namespace_id": null,
            "notes": "",
            "reverse_dns": "",
            "cpu_cores": 1,
            "ram_mb": 2048,
            "disk_gb": 25
        }
    ]
}

Example of listing instances

curl -H "Authorization: bearer 12345" https://api.civo.com/v2/instances?region=LON1
// At a shell prompt run:
// npm init -y
// npm i --save request

var request = require('request');

request.get(
  'https://api.civo.com/v2/instances',
  {},
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body)
    }
  }
).auth(null, null, true, '12345');
require 'net/http'

http = Net::HTTP.new('api.civo.com', 443)
http.use_ssl = true

headers = {
  'Authorization' => 'bearer 12345',
  'Content-Type' => 'application/x-www-form-urlencoded'
}

resp, data = http.get('/v2/instances', headers)

Retrieving an instance

A single instance's details are available by sending a GET request to https://api.civo.com/v2/instances/:id.

Request

This request requires the ID parameter in the URL (query string) as well as a region parameter containing the name of the region where the instance is running.

Response

The response is a JSON object that describes the details for the instance (the civostatsd_stats currently is just a string containing CPU %, Memory %, Storage %).

{
    "id": "779d651a-8e10-4019-9cc0-448451d16157",
    "name": "test-b775c2ea",
    "hostname": "test",
    "account_id": "73993076-f1dc-4b53-88d8-158d97d7be92",
    "size": "g3.small",
    "firewall_id": "e9bcefa3-f942-43a3-98f5-354608f0d55e",
    "source_type": "diskimage",
    "source_id": "ubuntu-focal",
    "network_id": "950c8a1c-79d5-4e57-925a-6e941ebec8a3",
    "initial_user": "root",
    "initial_password": "foobar",
    "ssh_key": "ssh-rsa ...",
    "ssh_key_id": "21aa424f-13be-44db-a908-6d4625c7e4f4",
    "tags": [
        "first",
        "second"
    ],
    "user_script": "SGVsbG8gd29ybGQh",
    "status": "ACTIVE",
    "civostatsd_token": "12fa5f73-9cca-4d9f-aca8-b7733a422a6b",
    "public_ip": "212.2.247.88",
    "private_ip": "192.168.1.2",
    "ipv6": null,
    "namespace_id": null,
    "notes": "",
    "reverse_dns": "",
    "cpu_cores": 1,
    "ram_mb": 2048,
    "disk_gb": 25
}

Example of retrieving an instance

curl -H "Authorization: bearer 12345" https://api.civo.com/v2/instances/12345?region=NYC1
    
// At a shell prompt run:
// npm init -y
// npm i --save request

var request = require('request');

request.get(
  'https://api.civo.com/v2/instances/12345?region=NYC1',
  {},
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body)
    }
  }
).auth(null, null, true, '12345');
require 'net/http'

http = Net::HTTP.new('api.civo.com', 443)
http.use_ssl = true

headers = {
  'Authorization' => 'bearer 12345',
  'Content-Type' => 'application/x-www-form-urlencoded'
}

resp, data = http.get('/v2/instances/12345?region=NYC1', headers)

Retagging an instance

A user can retag an instance at any time, as they require.

Instances are retagged by sending a PUT request to https://api.civo.com/v2/instances/:id/tags.

Request

This operation doesn't require any additional parameters. If you don't pass a tags parameter, it will remove all the existing tags.

Name Description
tags (required) a space separated list of tags
region (required) the identifier for the region, from the current region list

Response

The response is a JSON object that simply acknowledges the request.

{
  "result": "success"
}

Example of retagging an instance

curl -H "Authorization: bearer 12345" \
  -X PUT https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/tags -d tags=linux
// At a shell prompt run:
// npm init -y
// npm i --save request

var request = require('request');

request.put(
  'https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/tags',
  {
    "tags": "linux"
  },
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body)
    }
  }
).auth(null, null, true, '12345');
require 'net/http'

http = Net::HTTP.new('api.civo.com', 443)
http.use_ssl = true

headers = {
  'Authorization' => 'bearer 12345',
  'Content-Type' => 'application/x-www-form-urlencoded'
}

resp, data = http.put('/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/tags', {tags: "linux"}, headers)

Rebooting an instance

A user can reboot an instance at any time, for example to fix a crashed piece of software.

Instances are hard rebooted by sending a POST request to https://api.civo.com/v2/instances/:id/reboots (or https://api.civo.com/v2/instances/:id/hard_reboots).

If you prefer a soft reboot, you can make the same request to https://api.civo.com/v2/instances/:id/soft_reboots.

Request

This request requires the ID parameter in the URL (query string) as well as a region parameter containing the name of the region where the instance is running.

Response

The response is a JSON object that simply acknowledges the request.

{
  "result": "success"
}

Example of rebooting an instance

curl -H "Authorization: bearer 12345" \
  -x POST https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/reboots?region=NYC1
// At a shell prompt run:
// npm init -y
// npm i --save request

var request = require('request');

request.post(
  'https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/reboots?region=NYC1',
  {},
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body)
    }
  }
).auth(null, null, true, '12345');
require 'net/http'

http = Net::HTTP.new('api.civo.com', 443)
http.use_ssl = true

headers = {
  'Authorization' => 'bearer 12345',
  'Content-Type' => 'application/x-www-form-urlencoded'
}

resp, data = http.post('/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/reboots?region=NYC1', {}, headers)

Shutting down an instance

A user can shut down an instance at any time, for example to stop it from being attacked further.

Instances are shut down by sending a PUT request to https://api.civo.com/v2/instances/:id/stop.

Request

This request requires the ID parameter in the URL (query string) as well as a region parameter containing the name of the region where the instance is running.

Response

The response is a JSON object that simply acknowledges the request.

{
  "result": "success"
}

Example of shutting down an instance

curl -H "Authorization: bearer 12345" \
  -X PUT https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/stop?region=NYC1
// At a shell prompt run:
// npm init -y
// npm i --save request

var request = require('request');

request.put(
  'https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/stop?region=NYC1',
  {},
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body)
    }
  }
).auth(null, null, true, '12345');
require 'net/http'

http = Net::HTTP.new('api.civo.com', 443)
http.use_ssl = true

headers = {
  'Authorization' => 'bearer 12345',
  'Content-Type' => 'application/x-www-form-urlencoded'
}

resp, data = http.put('/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/stop?region=NYC1', {}, headers)

Starting an instance after being shut down

A user can re-start an instance after it's been shut down. Instances are started by sending a PUT request to https://api.civo.com/v2/instances/:id/start.

Request

This request requires the ID parameter in the URL (query string) as well as a region parameter containing the name of the region where the instance is running.

Response

The response is a JSON object that simply acknowledges the request.

{
  "result": "success"
}

Example of restarting a stopped instance

curl -H "Authorization: bearer 12345" \
  -X PUT https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/start?region=NYC1
// At a shell prompt run:
// npm init -y
// npm i --save request

var request = require('request');

request.put(
  'https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/start?region=NYC1',
  {},
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body)
    }
  }
).auth(null, null, true, '12345');
require 'net/http'

http = Net::HTTP.new('api.civo.com', 443)
http.use_ssl = true

headers = {
  'Authorization' => 'bearer 12345',
  'Content-Type' => 'application/x-www-form-urlencoded'
}

resp, data = http.put('/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/start?region=NYC1', {}, headers)

Upgrading (resizing) an instance

A user can resize an instance upwards, providing it's within their quota. The size of the instance is from a list of sizes.

Instances are resized by sending a PUT request to https://api.civo.com/v2/instances/:id/resize.

Request

The following parameter(s) should be sent along with the request:

Name Description
size (required) the identifier for the size, from the current list
region (required) the identifier for the region, from the list of regions, where the instance is running

Response

The response is a JSON object that describes the initial setup of the instance, these details may not be returned in future calls to list instances.

{
    "result": "success"
}

Example of resizing an instance

curl -H "Authorization: bearer 12345" \
  -X PUT https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/resize -d size=g3.small -d region=NYC1
// At a shell prompt run:
// npm init -y
// npm i --save request

var request = require('request');

request.put(
  'https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/resize',
  {
    "size": "g3.small",
    "region": "NYC1"
  },
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body)
    }
  }
).auth(null, null, true, '12345');
require 'net/http'

http = Net::HTTP.new('api.civo.com', 443)
http.use_ssl = true

headers = {
  'Authorization' => 'bearer 12345',
  'Content-Type' => 'application/x-www-form-urlencoded'
}

resp, data = http.put('/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/resize', {size: "g1.small", region: "NYC1"}, headers)

Setting the firewall for an instance

A user can set the firewall to use for an instance by sending a PUT request to https://api.civo.com/v2/instances/:id/firewall.

Request

The following parameter(s) should be sent along with the request:

Name Description
firewall_id (required) the ID of the firewall to use, from the current list. The firewall must exists in the network (see instance's network_id). If left blank and network_id is default network, the default firewall will be used (open to all).
region (required) the identifier for the region, from the list of regions, where the instance is running

Response

The response is a JSON object that simply acknowledges the request.

{
    "id": "779d651a-8e10-4019-9cc0-448451d16157",
    "name": "test-b775c2ea",
    "hostname": "test",
    "account_id": "73993076-f1dc-4b53-88d8-158d97d7be92",
    "size": "g3.large",
    "firewall_id": "b6dfca68-059e-48c8-85a7-bac37996fde1",
    "source_type": "diskimage",
    "source_id": "ubuntu-focal",
    "network_id": "950c8a1c-79d5-4e57-925a-6e941ebec8a3",
    "initial_user": "root",
    "initial_password": "foobar",
    "ssh_key": "ssh-rsa ...",
    "ssh_key_id": "21aa424f-13be-44db-a908-6d4625c7e4f4",
    "tags": [
        "first",
        "second"
    ],
    "user_script": "SGVsbG8gd29ybGQh",
    "status": "ACTIVE",
    "civostatsd_token": "12fa5f73-9cca-4d9f-aca8-b7733a422a6b",
    "public_ip": "212.2.247.88",
    "private_ip": "192.168.1.2",
    "ipv6": null,
    "namespace_id": null,
    "notes": "",
    "reverse_dns": "",
    "cpu_cores": 4,
    "ram_mb": 8192,
    "disk_gb": 100
}

Example of setting the firewall for an instance

curl -H "Authorization: bearer 12345" \
  -X PUT https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/firewall -d name=restrictive-firewall
// At a shell prompt run:
// npm init -y
// npm i --save request

var request = require('request');

request.put(
    'https://api.civo.com/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/firewall',
    {
      "name": "restrictive-firewall"
    },
    function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(body)
        }
    }
).auth(null, null, true, '12345');
require 'net/http'

http = Net::HTTP.new('api.civo.com', 443)
http.use_ssl = true

headers = {
  'Authorization' => 'bearer 12345',
  'Content-Type' => 'application/x-www-form-urlencoded'
}

resp, data = http.put('/v2/instances/4a07ac84-70f8-11e5-8fe9-5cf9389be614/firewall', {name: "restrictive-firewall"}, headers)


Deleting an instance

An account holder can remove an instance by sending a DELETE request to https://api.civo.com/v2/instances/:id.

Request

This request requires the ID parameter in the URL (query string) as well as a region parameter containing the name of the region where the instance is running. No confirmation step is required; this step will remove the instance immediately.

Response

The response from the server will be a JSON block. The response will include a result field and the HTTP status will be 200 OK.

{
    "result": "success"
}

Example of deleting an instance

curl -H "Authorization: bearer 12345" \
  -X DELETE https://api.civo.com/v2/instances/b177ae0e-60fa-11e5-be02-5cf9389be614?region=NYC1
// At a shell prompt run:
// npm init -y
// npm i --save request

var request = require('request');

request.del(
  'https://api.civo.com/v2/instances/b177ae0e-60fa-11e5-be02-5cf9389be614',
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body)
    }
  }
).auth(null, null, true, '12345');
require 'net/http'

http = Net::HTTP.new('api.civo.com', 443)
http.use_ssl = true

headers = {
  'Authorization' => 'bearer 12345',
  'Content-Type' => 'application/x-www-form-urlencoded'
}

resp, data = http.delete('/v2/instances/b177ae0e-60fa-11e5-be02-5cf9389be614', headers)