NAV <<<<<<< Updated upstream
=======
>>>>>>> Stashed changes

Introduction

Cloud 66 is a full stack container management as a service. It allows you to build, provision, configure and manage Docker containers on your own server on any cloud. You can find more information on Cloud 66 on our help site.

Resource model

The Cloud 66 API is organised around REST. It is designed to have predictable, resource-oriented URLs and to use HTTP response codes to indicate API errors.

We use built-in HTTP features, like HTTP authentication and HTTP verbs, which can be understood by off-the-shelf HTTP clients.

JSON will be returned in all responses from the API, including errors (though if you're using API bindings, we will convert the response to the appropriate language-specific object).

Authentication

Cloud 66 uses OAuth2 to authenticate users and grant access to stacks and redeployments. To use it, you need an OAuth 2.0 compatible client. To submit API requests, you must pass an OAuth token. An OAuth token functions as a complete authentication request, acting as a substitute for a username and password pair. Because of this, it is absolutely essential that you keep your OAuth tokens secure.

To authenticate your requests with OAuth you need to send a bearer authorization header with your request. This is the preferred method of authenticating because it completes the authorization request in the header portion, away from the actual request.

Usually, you use a language binding (like a Ruby gem or Go package) to deal with the OAuth authentication. Alternatively, you can include the OAuth authentication token in the header of each request:

Authorization: bearer 5262d64b892e8d4341000001

You can generate an OAuth token by visiting the Apps , under your Account.

How to authenticate with OAuth2

You can generate an OAuth token using the Your Account > Apps area of the Cloud 66 user interface or using the API.

Step 1 - Redirect users to request Cloud 66 access

GET https://app.cloud66.com/oauth/authorize

Parameter Description Presence
client_id The client ID you received from Cloud 66 when you registered. required
redirect_url URL in your app where users will be sent after authorization. required
scope Comma separated list of scopes. optional

Step 2 - Cloud 66 redirects back to your site

If the user accepts your request, Cloud 66 redirects back to your site with a temporary code in a code parameter as well as the state you provided in the previous step in a state parameter. If the states don’t match, the request has been created by a third party and the process should be aborted.

Exchange this for an access token:

POST https://app.cloud66.com/oauth/token

Parameter Description Presence
client_id The client ID you received from Cloud 66 when you registered. required
redirect_url URL in your app where users will be sent after authorization. optional
client_secret The client secret you received from Cloud 66 when you registered. required

Response By default, the response will take the following form:

access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&amp;token_type=bearer
Accept: application/json {"access_token":"e72e16c7e42f292c6912e7710c838347ae178b4a","token_type":"bearer"}

Step 3 - Use the access token to access the API

The access token allows you to make requests to the API on behalf of a user.

GET "https://app.cloud66.com/api/3/stacks.json" -H "Authorization: Bearer e72e...b4a"

Scoped access

A user’s scope defines the limits of the actions the user can perform with the Cloud 66 API. The user’s scope is encrypted as part of the OAuth access token. Users cannot submit requests not allowed by their defined scopes.

For the web flow, requested scopes be displayed to the user on the authorize form.

Scope Description
(no scope) Users with this scope have public read-only access and can view limited stack information.
public Users with this scope have public read-only access and can view limited stack information.
redeploy Users with this scope can redeploy any stacks they can access.
jobs Users with this scope can view the scheduled jobs for the stacks they can access.
users Users with this scope can manage other users’ mobile devices.
admin Users with this scope can set and manage settings for the servers they can access.

https://app.cloud66.com/oauth/authorize?client_id=...&scope=public+redeploy

Example

require 'rubygems'
require 'oauth2'
require 'json'

base = 'https://app.cloud66.com'
api_url = 'https://app.cloud66.com/api/3'

if File.exists? '/tmp/cloud66_oauth_test.json'
    config = JSON.parse(File.read('/tmp/cloud66_oauth_test.json'))
    client = OAuth2::Client.new(config['app_id'], config['app_secret'], :site => base)
    token = OAuth2::AccessToken.new(client, config['token'])
else
    client = OAuth2::Client.new(ENV['APP_ID'], ENV['APP_SECRET'], :site => base)
    puts client.auth_code.authorize_url(:redirect_uri => 'urn:ietf:wg:oauth:2.0:oob', :scope => 'public admin redeploy')

    puts "Enter the code:"
    code = gets.strip

    token = client.auth_code.get_token(code, :redirect_uri => "urn:ietf:wg:oauth:2.0:oob")

    # save it
    File.write('/tmp/cloud66_oauth_test.json', { :app_id => ENV['APP_ID'], :app_secret => ENV['APP_SECRET'], :token => token.token }.to_json)
end

# Now you can use the token to call API methods, like:

# List all the stacks
response = token.get("#{api_url}/stacks.json")

# list all the servers in the stack
stack_uid = 'ENTER_STACK_UID'
response = token.get("#{api_url}/stacks/#{stack_uid}/servers.json")

# show the response (no error handling)
puts JSON.parse(response.body)['response']
# Simple GET
# Get list of stacks:
curl -X GET "https://app.cloud66.com/api/3/stacks.json" -H "Authorization: Bearer 4c9c9b1111"

# GET with some params
# Get list of all `mysql` backups in `1345` backup group:
curl -X GET "https://app.cloud66.com/api/3/stacks/f196c5b41758cb7977620d49eb1492ef/backups.json" -H "Authorization: Bearer 4c9c9b1111" -d group=1345 -d db_type=mysql

# POST
# Add a new iPhone application to user ID 18 with 'wertqy' as a token:
curl -X POST "https://app.cloud66.com/api/3/users/18/devices.json" -H "Authorization: Bearer 4c9c9b1111" -d token=wertqy -d device_type=1 -d sub_type=1

# PUT
# Update the type of device with token 'wertqy' to iPad:
curl -X PUT "https://app.cloud66.com/api/3/users/18/devices/wertqy.json" -H "Authorization: Bearer 4c9c9b1111" -d device_type=1 -d sub_type=2

# DELETE
# Delete device with token 'wertqy':
curl -X DELETE "https://app.cloud66.com/api/3/users/18/devices/wertqy.json" -H "Authorization: Bearer 4c9c9b1111"

Ruby

This example shows how to get the first token using the Application (Client) ID and Secret. This is using urn:ietf:wg:oauth:2.0:oob for command line tools.

Once you have the code, you can apply for a token. Tokens issued by the API server do not expire and are valid until the user revokes their access. You can see how to store and retrieve the token for future use in this example.

cURL

For example, you can get lists of stacks with this command:

curl -X GET "https://app.cloud66.com/api/3/stacks.json" -H "Authorization: Bearer PERSONAL_ACCESS_TOKEN"`

You can use your personal access token to call the API with cURL - it just needs to be passed in as a header.

Assuming that your personal access token is 4c9c9b1111, you can find some examples for using cURL.

Go Example

You can use the Cloud 66 Go library repository if you want to use Go.

Synchronous vs. asynchronous requests

#Asynchronous example
stack_id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.post("#{api_url}/stacks/#{stack_id}/actions.json", {body: {:command => 'clear_caches'}})

#Get the action ID
id = JSON.parse(response.body)['response']['id']
puts "Started action with ID: #{id}"

...

#After some time check status
response = token.get("#{api_url}/stacks/#{stack_id}/actions/#{id}.json")

result = JSON.parse(response.body)['response']

#Check if the request finished successfully
if result['finished_success']=='true'
  puts 'Success!'
else
  puts "Failed. Error: #{result['finished_message']}"
end

The Cloud 66 API uses both synchronous and asynchronous methods. Asynchronous methods are specified in the documentation for the associated calls; all others are generally considered synchronous.

Synchronous methods will wait for the server to return a response for the request before it will continue processing. Your application will not perform any additional actions until it receives a response from the server.

Asynchronous methods will submit the request to the server, but the application will not wait for a response from the server to continue processing. When the server returns a response, the application can execute a callback function to retrieve the response object, but will continue processing until the response is received.

Date formats

Cloud 66 accepts and returns date values according to the ISO 8601 standard. Combined date and time values appear in UTC including local time zone offsets. For example: 2014-06-15T14:13:18+00:00

Rate limiting

The Cloud 66 API can receive a maximum of 3,000 requests per user per hour. When the request level reaches the maximum rate, subsequent requests will return a 503: throttled HTTP status message and the user must retry the request in the next hourly interval.

Standard HTTP response statuses

Requests made using the Cloud 66 API can return any of the following response status codes.

Code Message Description
200 ok The request completed successfully.
400 bad_request The system cannot parse the request syntax. It might be missing required parameters or include an invalid value.
401 unauthenticated No authentication token was passed in the request.
402 trial_expired The user’s Cloud 66 trial period has expired.
403 forbidden The user does not have the scope required to submit this request.
404 not_found The system cannot find a response for this request URI.
408 time_out The system did not return a response before the server timed out.
409 conflict The system did not return a response because there is a current conflict with the resource.
503 not_implemented This resource is not actively implemented in this version of the Cloud 66 API.
503 throttled The user has reached or exceeded the maximum rate limit and must wait until the next hourly interval to retry the request.

Stack UID retrieval

Many requests in the Cloud 66 API rely on the Stack UID value, an alphanumeric string that uniquely identifies your stack. You can retrieve this value by accessing the Stack information page from the right sidebar of your stack page or by submitting an API request to list all stacks. The Stack UID appears in the response body for each stack you maintain.

Cloud vendor instance names

Amazon Web Services

Key Description
a1.2xlarge General purpose (a1.2xlarge)
a1.4xlarge General purpose (a1.4xlarge)
a1.large General purpose (a1.large)
a1.medium General purpose (a1.medium)
a1.xlarge General purpose (a1.xlarge)
c1.medium Compute optimized (c1.medium)
c1.xlarge Compute optimized (c1.xlarge)
c3.2xlarge Compute optimized (c3.2xlarge)
c3.4xlarge Compute optimized (c3.4xlarge)
c3.8xlarge Compute optimized (c3.8xlarge)
c3.large Compute optimized (c3.large)
c3.xlarge Compute optimized (c3.xlarge)
c4.2xlarge Compute optimized (c4.2xlarge)
c4.4xlarge Compute optimized (c4.4xlarge)
c4.8xlarge Compute optimized (c4.8xlarge)
c4.large Compute optimized (c4.large)
c4.xlarge Compute optimized (c4.xlarge)
c5.18xlarge Compute optimized (c5.18xlarge)
c5.2xlarge Compute optimized (c5.2xlarge)
c5.4xlarge Compute optimized (c5.4xlarge)
c5.9xlarge Compute optimized (c5.9xlarge)
c5.large Compute optimized (c5.large)
c5.xlarge Compute optimized (c5.xlarge)
c5d.18xlarge Compute optimized (c5d.18xlarge)
c5d.2xlarge Compute optimized (c5d.2xlarge)
c5d.4xlarge Compute optimized (c5d.4xlarge)
c5d.9xlarge Compute optimized (c5d.9xlarge)
c5d.large Compute optimized (c5d.large)
c5d.xlarge Compute optimized (c5d.xlarge)
c5n.18xlarge Compute optimized (c5n.18xlarge)
c5n.2xlarge Compute optimized (c5n.2xlarge)
c5n.4xlarge Compute optimized (c5n.4xlarge)
c5n.9xlarge Compute optimized (c5n.9xlarge)
c5n.large Compute optimized (c5n.large)
c5n.xlarge Compute optimized (c5n.xlarge)
cc2.8xlarge Compute optimized (cc2.8xlarge)
cr1.8xlarge Memory optimized (cr1.8xlarge)
d2.2xlarge Storage optimized (d2.2xlarge)
d2.4xlarge Storage optimized (d2.4xlarge)
d2.8xlarge Storage optimized (d2.8xlarge)
d2.xlarge Storage optimized (d2.xlarge)
h1.16xlarge Storage optimized (h1.16xlarge)
h1.2xlarge Storage optimized (h1.2xlarge)
h1.4xlarge Storage optimized (h1.4xlarge)
h1.8xlarge Storage optimized (h1.8xlarge)
hs1.8xlarge Storage optimized (hs1.8xlarge)
i2.2xlarge Storage optimized (i2.2xlarge)
i2.4xlarge Storage optimized (i2.4xlarge)
i2.8xlarge Storage optimized (i2.8xlarge)
i2.xlarge Storage optimized (i2.xlarge)
i3.16xlarge Storage optimized (i3.16xlarge)
i3.2xlarge Storage optimized (i3.2xlarge)
i3.4xlarge Storage optimized (i3.4xlarge)
i3.8xlarge Storage optimized (i3.8xlarge)
i3.large Storage optimized (i3.large)
i3.metal Storage optimized (i3.metal)
i3.xlarge Storage optimized (i3.xlarge)
m1.large General purpose (m1.large)
m1.medium General purpose (m1.medium)
m1.small General purpose (m1.small)
m1.xlarge General purpose (m1.xlarge)
m2.2xlarge Memory optimized (m2.2xlarge)
m2.4xlarge Memory optimized (m2.4xlarge)
m2.xlarge Memory optimized (m2.xlarge)
m3.2xlarge General purpose (m3.2xlarge)
m3.large General purpose (m3.large)
m3.medium General purpose (m3.medium)
m3.xlarge General purpose (m3.xlarge)
m4.10xlarge General purpose (m4.10xlarge)
m4.16xlarge General purpose (m4.16xlarge)
m4.2xlarge General purpose (m4.2xlarge)
m4.4xlarge General purpose (m4.4xlarge)
m4.large General purpose (m4.large)
m4.xlarge General purpose (m4.xlarge)
m5.12xlarge General purpose (m5.12xlarge)
m5.24xlarge General purpose (m5.24xlarge)
m5.2xlarge General purpose (m5.2xlarge)
m5.4xlarge General purpose (m5.4xlarge)
m5.large General purpose (m5.large)
m5.metal General purpose (m5.metal)
m5.xlarge General purpose (m5.xlarge)
m5a.12xlarge General purpose (m5a.12xlarge)
m5a.24xlarge General purpose (m5a.24xlarge)
m5a.2xlarge General purpose (m5a.2xlarge)
m5a.4xlarge General purpose (m5a.4xlarge)
m5a.large General purpose (m5a.large)
m5a.xlarge General purpose (m5a.xlarge)
m5ad.12xlarge General purpose (m5ad.12xlarge)
m5ad.24xlarge General purpose (m5ad.24xlarge)
m5ad.2xlarge General purpose (m5ad.2xlarge)
m5ad.4xlarge General purpose (m5ad.4xlarge)
m5ad.large General purpose (m5ad.large)
m5ad.xlarge General purpose (m5ad.xlarge)
m5d.12xlarge General purpose (m5d.12xlarge)
m5d.24xlarge General purpose (m5d.24xlarge)
m5d.2xlarge General purpose (m5d.2xlarge)
m5d.4xlarge General purpose (m5d.4xlarge)
m5d.large General purpose (m5d.large)
m5d.metal General purpose (m5d.metal)
m5d.xlarge General purpose (m5d.xlarge)
r3.2xlarge Memory optimized (r3.2xlarge)
r3.4xlarge Memory optimized (r3.4xlarge)
r3.8xlarge Memory optimized (r3.8xlarge)
r3.large Memory optimized (r3.large)
r3.xlarge Memory optimized (r3.xlarge)
r4.16xlarge Memory optimized (r4.16xlarge)
r4.2xlarge Memory optimized (r4.2xlarge)
r4.4xlarge Memory optimized (r4.4xlarge)
r4.8xlarge Memory optimized (r4.8xlarge)
r4.large Memory optimized (r4.large)
r4.xlarge Memory optimized (r4.xlarge)
r5.12xlarge Memory optimized (r5.12xlarge)
r5.24xlarge Memory optimized (r5.24xlarge)
r5.2xlarge Memory optimized (r5.2xlarge)
r5.4xlarge Memory optimized (r5.4xlarge)
r5.large Memory optimized (r5.large)
r5.metal Memory optimized (r5.metal)
r5.xlarge Memory optimized (r5.xlarge)
r5a.12xlarge Memory optimized (r5a.12xlarge)
r5a.24xlarge Memory optimized (r5a.24xlarge)
r5a.2xlarge Memory optimized (r5a.2xlarge)
r5a.4xlarge Memory optimized (r5a.4xlarge)
r5a.large Memory optimized (r5a.large)
r5a.xlarge Memory optimized (r5a.xlarge)
r5ad.12xlarge Memory optimized (r5ad.12xlarge)
r5ad.24xlarge Memory optimized (r5ad.24xlarge)
r5ad.2xlarge Memory optimized (r5ad.2xlarge)
r5ad.4xlarge Memory optimized (r5ad.4xlarge)
r5ad.large Memory optimized (r5ad.large)
r5ad.xlarge Memory optimized (r5ad.xlarge)
r5d.12xlarge Memory optimized (r5d.12xlarge)
r5d.24xlarge Memory optimized (r5d.24xlarge)
r5d.2xlarge Memory optimized (r5d.2xlarge)
r5d.4xlarge Memory optimized (r5d.4xlarge)
r5d.large Memory optimized (r5d.large)
r5d.metal Memory optimized (r5d.metal)
r5d.xlarge Memory optimized (r5d.xlarge)
t1.micro Micro instances (t1.micro)
t2.2xlarge General purpose (t2.2xlarge)
t2.large General purpose (t2.large)
t2.medium General purpose (t2.medium)
t2.micro General purpose (t2.micro)
t2.nano General purpose (t2.nano)
t2.small General purpose (t2.small)
t2.xlarge General purpose (t2.xlarge)
t3.2xlarge General purpose (t3.2xlarge)
t3.large General purpose (t3.large)
t3.medium General purpose (t3.medium)
t3.micro General purpose (t3.micro)
t3.nano General purpose (t3.nano)
t3.small General purpose (t3.small)
t3.xlarge General purpose (t3.xlarge)
t3a.2xlarge General purpose (t3a.2xlarge)
t3a.large General purpose (t3a.large)
t3a.medium General purpose (t3a.medium)
t3a.micro General purpose (t3a.micro)
t3a.nano General purpose (t3a.nano)
t3a.small General purpose (t3a.small)
t3a.xlarge General purpose (t3a.xlarge)
u-12tb1.metal Memory optimized (u-12tb1.metal)
u-6tb1.metal Memory optimized (u-6tb1.metal)
u-9tb1.metal Memory optimized (u-9tb1.metal)
x1.16xlarge Memory optimized (x1.16xlarge)
x1.32xlarge Memory optimized (x1.32xlarge)
x1e.16xlarge Memory optimized (x1e.16xlarge)
x1e.2xlarge Memory optimized (x1e.2xlarge)
x1e.32xlarge Memory optimized (x1e.32xlarge)
x1e.4xlarge Memory optimized (x1e.4xlarge)
x1e.8xlarge Memory optimized (x1e.8xlarge)
x1e.xlarge Memory optimized (x1e.xlarge)
z1d.12xlarge Memory optimized (z1d.12xlarge)
z1d.2xlarge Memory optimized (z1d.2xlarge)
z1d.3xlarge Memory optimized (z1d.3xlarge)
z1d.6xlarge Memory optimized (z1d.6xlarge)
z1d.large Memory optimized (z1d.large)
z1d.metal Memory optimized (z1d.metal)
z1d.xlarge Memory optimized (z1d.xlarge)

Azure

Key Description
Basic_A0 Basic - A0 - 1 vCPUs - 0.75GB RAM
Basic_A1 Basic - A1 - 1 vCPUs - 1.75GB RAM
Basic_A2 Basic - A2 - 2 vCPUs - 3.5GB RAM
Basic_A3 Basic - A3 - 4 vCPUs - 7GB RAM
Basic_A4 Basic - A4 - 8 vCPUs - 14GB RAM
Standard_A0 A0 - 1 vCPUs - 0.75GB RAM
Standard_A1 A1 - 1 vCPUs - 1.75GB RAM
Standard_A1_v2 A1 (v2) - 1 vCPUs - 2GB RAM
Standard_A2 A2 - 2 vCPUs - 3.5GB RAM
Standard_A2_v2 A2 (v2) - 2 vCPUs - 4GB RAM
Standard_A2m_v2 A2m (v2) - 2 vCPUs - 16GB RAM
Standard_A3 A3 - 4 vCPUs - 7GB RAM
Standard_A4 A4 - 8 vCPUs - 14GB RAM
Standard_A4_v2 A4 (v2) - 4 vCPUs - 8GB RAM
Standard_A4m_v2 A4m (v2) - 4 vCPUs - 32GB RAM
Standard_A5 A5 - 2 vCPUs - 14GB RAM
Standard_A6 A6 - 4 vCPUs - 28GB RAM
Standard_A7 A7 - 8 vCPUs - 56GB RAM
Standard_A8 A8 - 8 vCPUs - 56GB RAM
Standard_A8_v2 A8 (v2) - 8 vCPUs - 16GB RAM
Standard_A8m_v2 A8m (v2) - 8 vCPUs - 64GB RAM
Standard_A9 A9 - 16 vCPUs - 112GB RAM
Standard_A10 A10 - 8 vCPUs - 56GB RAM
Standard_A11 A11 - 16 vCPUs - 112GB RAM
Standard_B1ls B1ls - 1 vCPUs - 0.5GB RAM
Standard_B1ms B1ms - 1 vCPUs - 2GB RAM
Standard_B1s B1s - 1 vCPUs - 1GB RAM
Standard_B2ms B2ms - 2 vCPUs - 8GB RAM
Standard_B2s B2s - 2 vCPUs - 4GB RAM
Standard_B4ms B4ms - 4 vCPUs - 16GB RAM
Standard_B8ms B8ms - 8 vCPUs - 32GB RAM
Standard_B12ms B12ms - 12 vCPUs - 48GB RAM
Standard_B16ms B16ms - 16 vCPUs - 64GB RAM
Standard_B20ms B20ms - 20 vCPUs - 80GB RAM
Standard_D1 D1 - 1 vCPUs - 3.5GB RAM
Standard_D1_v2 D1 (v2) - 1 vCPUs - 3.5GB RAM
Standard_D2 D2 - 2 vCPUs - 7GB RAM
Standard_D2_v2 D2 (v2) - 2 vCPUs - 7GB RAM
Standard_D2_v2_Promo D2 (v2) Promo - 2 vCPUs - 7GB RAM
Standard_D2_v3 D2 (v3) - 2 vCPUs - 8GB RAM
Standard_D2a_v4 D2a (v4) - 2 vCPUs - 8GB RAM
Standard_D2as_v4 D2as (v4) - 2 vCPUs - 8GB RAM
Standard_D2s_v3 D2s (v3) - 2 vCPUs - 8GB RAM
Standard_D3 D3 - 4 vCPUs - 14GB RAM
Standard_D3_v2 D3 (v2) - 4 vCPUs - 14GB RAM
Standard_D3_v2_Promo D3 (v2) Promo - 4 vCPUs - 14GB RAM
Standard_D4 D4 - 8 vCPUs - 28GB RAM
Standard_D4_v2 D4 (v2) - 8 vCPUs - 28GB RAM
Standard_D4_v2_Promo D4 (v2) Promo - 8 vCPUs - 28GB RAM
Standard_D4_v3 D4 (v3) - 4 vCPUs - 16GB RAM
Standard_D4a_v4 D4a (v4) - 4 vCPUs - 16GB RAM
Standard_D4as_v4 D4as (v4) - 4 vCPUs - 16GB RAM
Standard_D4s_v3 D4s (v3) - 4 vCPUs - 16GB RAM
Standard_D5_v2 D5 (v2) - 16 vCPUs - 56GB RAM
Standard_D5_v2_Promo D5 (v2) Promo - 16 vCPUs - 56GB RAM
Standard_D8_v3 D8 (v3) - 8 vCPUs - 32GB RAM
Standard_D8a_v4 D8a (v4) - 8 vCPUs - 32GB RAM
Standard_D8as_v4 D8as (v4) - 8 vCPUs - 32GB RAM
Standard_D8s_v3 D8s (v3) - 8 vCPUs - 32GB RAM
Standard_D11 D11 - 2 vCPUs - 14GB RAM
Standard_D11_v2 D11 (v2) - 2 vCPUs - 14GB RAM
Standard_D11_v2_Promo D11 (v2) Promo - 2 vCPUs - 14GB RAM
Standard_D12 D12 - 4 vCPUs - 28GB RAM
Standard_D12_v2 D12 (v2) - 4 vCPUs - 28GB RAM
Standard_D12_v2_Promo D12 (v2) Promo - 4 vCPUs - 28GB RAM
Standard_D13 D13 - 8 vCPUs - 56GB RAM
Standard_D13_v2 D13 (v2) - 8 vCPUs - 56GB RAM
Standard_D13_v2_Promo D13 (v2) Promo - 8 vCPUs - 56GB RAM
Standard_D14 D14 - 16 vCPUs - 112GB RAM
Standard_D14_v2 D14 (v2) - 16 vCPUs - 112GB RAM
Standard_D14_v2_Promo D14 (v2) Promo - 16 vCPUs - 112GB RAM
Standard_D15_v2 D15 (v2) - 20 vCPUs - 140GB RAM
Standard_D16_v3 D16 (v3) - 16 vCPUs - 64GB RAM
Standard_D16a_v4 D16a (v4) - 16 vCPUs - 64GB RAM
Standard_D16as_v4 D16as (v4) - 16 vCPUs - 64GB RAM
Standard_D16s_v3 D16s (v3) - 16 vCPUs - 64GB RAM
Standard_D32_v3 D32 (v3) - 32 vCPUs - 128GB RAM
Standard_D32a_v4 D32a (v4) - 32 vCPUs - 128GB RAM
Standard_D32as_v4 D32as (v4) - 32 vCPUs - 128GB RAM
Standard_D32s_v3 D32s (v3) - 32 vCPUs - 128GB RAM
Standard_D48_v3 D48 (v3) - 48 vCPUs - 192GB RAM
Standard_D48a_v4 D48a (v4) - 48 vCPUs - 192GB RAM
Standard_D48as_v4 D48as (v4) - 48 vCPUs - 192GB RAM
Standard_D48s_v3 D48s (v3) - 48 vCPUs - 192GB RAM
Standard_D64_v3 D64 (v3) - 64 vCPUs - 256GB RAM
Standard_D64a_v4 D64a (v4) - 64 vCPUs - 256GB RAM
Standard_D64as_v4 D64as (v4) - 64 vCPUs - 256GB RAM
Standard_D64s_v3 D64s (v3) - 64 vCPUs - 256GB RAM
Standard_D96a_v4 D96a (v4) - 96 vCPUs - 384GB RAM
Standard_D96as_v4 D96as (v4) - 96 vCPUs - 384GB RAM
Standard_DC1s_v2 DC1s (v2) - 1 vCPUs - 4GB RAM
Standard_DC2s DC2s - 2 vCPUs - 8GB RAM
Standard_DC2s_v2 DC2s (v2) - 2 vCPUs - 8GB RAM
Standard_DC4s DC4s - 4 vCPUs - 16GB RAM
Standard_DC4s_v2 DC4s (v2) - 4 vCPUs - 16GB RAM
Standard_DC8_v2 DC8 (v2) - 8 vCPUs - 32GB RAM
Standard_DS1 DS1 - 1 vCPUs - 3.5GB RAM
Standard_DS1_v2 DS1 (v2) - 1 vCPUs - 3.5GB RAM
Standard_DS2 DS2 - 2 vCPUs - 7GB RAM
Standard_DS2_v2 DS2 (v2) - 2 vCPUs - 7GB RAM
Standard_DS2_v2_Promo DS2 (v2) Promo - 2 vCPUs - 7GB RAM
Standard_DS3 DS3 - 4 vCPUs - 14GB RAM
Standard_DS3_v2 DS3 (v2) - 4 vCPUs - 14GB RAM
Standard_DS3_v2_Promo DS3 (v2) Promo - 4 vCPUs - 14GB RAM
Standard_DS4 DS4 - 8 vCPUs - 28GB RAM
Standard_DS4_v2 DS4 (v2) - 8 vCPUs - 28GB RAM
Standard_DS4_v2_Promo DS4 (v2) Promo - 8 vCPUs - 28GB RAM
Standard_DS5_v2 DS5 (v2) - 16 vCPUs - 56GB RAM
Standard_DS5_v2_Promo DS5 (v2) Promo - 16 vCPUs - 56GB RAM
Standard_DS11 DS11 - 2 vCPUs - 14GB RAM
Standard_DS11-1_v2 DS11-1 (v2) - 2 vCPUs - 14GB RAM
Standard_DS11_v2 DS11 (v2) - 2 vCPUs - 14GB RAM
Standard_DS11_v2_Promo DS11 (v2) Promo - 2 vCPUs - 14GB RAM
Standard_DS12 DS12 - 4 vCPUs - 28GB RAM
Standard_DS12-1_v2 DS12-1 (v2) - 4 vCPUs - 28GB RAM
Standard_DS12-2_v2 DS12-2 (v2) - 4 vCPUs - 28GB RAM
Standard_DS12_v2 DS12 (v2) - 4 vCPUs - 28GB RAM
Standard_DS12_v2_Promo DS12 (v2) Promo - 4 vCPUs - 28GB RAM
Standard_DS13 DS13 - 8 vCPUs - 56GB RAM
Standard_DS13-2_v2 DS13-2 (v2) - 8 vCPUs - 56GB RAM
Standard_DS13-4_v2 DS13-4 (v2) - 8 vCPUs - 56GB RAM
Standard_DS13_v2 DS13 (v2) - 8 vCPUs - 56GB RAM
Standard_DS13_v2_Promo DS13 (v2) Promo - 8 vCPUs - 56GB RAM
Standard_DS14 DS14 - 16 vCPUs - 112GB RAM
Standard_DS14-4_v2 DS14-4 (v2) - 16 vCPUs - 112GB RAM
Standard_DS14-8_v2 DS14-8 (v2) - 16 vCPUs - 112GB RAM
Standard_DS14_v2 DS14 (v2) - 16 vCPUs - 112GB RAM
Standard_DS14_v2_Promo DS14 (v2) Promo - 16 vCPUs - 112GB RAM
Standard_DS15_v2 DS15 (v2) - 20 vCPUs - 140GB RAM
Standard_E2_v3 E2 (v3) - 2 vCPUs - 16GB RAM
Standard_E2a_v4 E2a (v4) - 2 vCPUs - 16GB RAM
Standard_E2as_v4 E2as (v4) - 2 vCPUs - 16GB RAM
Standard_E2s_v3 E2s (v3) - 2 vCPUs - 16GB RAM
Standard_E4-2s_v3 E4-2s (v3) - 4 vCPUs - 32GB RAM
Standard_E4_v3 E4 (v3) - 4 vCPUs - 32GB RAM
Standard_E4a_v4 E4a (v4) - 4 vCPUs - 32GB RAM
Standard_E4as_v4 E4as (v4) - 4 vCPUs - 32GB RAM
Standard_E4s_v3 E4s (v3) - 4 vCPUs - 32GB RAM
Standard_E8-2s_v3 E8-2s (v3) - 8 vCPUs - 64GB RAM
Standard_E8-4s_v3 E8-4s (v3) - 8 vCPUs - 64GB RAM
Standard_E8_v3 E8 (v3) - 8 vCPUs - 64GB RAM
Standard_E8a_v4 E8a (v4) - 8 vCPUs - 64GB RAM
Standard_E8as_v4 E8as (v4) - 8 vCPUs - 64GB RAM
Standard_E8s_v3 E8s (v3) - 8 vCPUs - 64GB RAM
Standard_E16-4s_v3 E16-4s (v3) - 16 vCPUs - 128GB RAM
Standard_E16-8s_v3 E16-8s (v3) - 16 vCPUs - 128GB RAM
Standard_E16_v3 E16 (v3) - 16 vCPUs - 128GB RAM
Standard_E16a_v4 E16a (v4) - 16 vCPUs - 128GB RAM
Standard_E16as_v4 E16as (v4) - 16 vCPUs - 128GB RAM
Standard_E16s_v3 E16s (v3) - 16 vCPUs - 128GB RAM
Standard_E20_v3 E20 (v3) - 20 vCPUs - 160GB RAM
Standard_E20a_v4 E20a (v4) - 20 vCPUs - 160GB RAM
Standard_E20as_v4 E20as (v4) - 20 vCPUs - 160GB RAM
Standard_E20s_v3 E20s (v3) - 20 vCPUs - 160GB RAM
Standard_E32-8s_v3 E32-8s (v3) - 32 vCPUs - 256GB RAM
Standard_E32-16s_v3 E32-16s (v3) - 32 vCPUs - 256GB RAM
Standard_E32_v3 E32 (v3) - 32 vCPUs - 256GB RAM
Standard_E32a_v4 E32a (v4) - 32 vCPUs - 256GB RAM
Standard_E32as_v4 E32as (v4) - 32 vCPUs - 256GB RAM
Standard_E32s_v3 E32s (v3) - 32 vCPUs - 256GB RAM
Standard_E48_v3 E48 (v3) - 48 vCPUs - 384GB RAM
Standard_E48a_v4 E48a (v4) - 48 vCPUs - 384GB RAM
Standard_E48as_v4 E48as (v4) - 48 vCPUs - 384GB RAM
Standard_E48s_v3 E48s (v3) - 48 vCPUs - 384GB RAM
Standard_E64-16s_v3 E64-16s (v3) - 64 vCPUs - 432GB RAM
Standard_E64-32s_v3 E64-32s (v3) - 64 vCPUs - 432GB RAM
Standard_E64_v3 E64 (v3) - 64 vCPUs - 432GB RAM
Standard_E64a_v4 E64a (v4) - 64 vCPUs - 432GB RAM
Standard_E64as_v4 E64as (v4) - 64 vCPUs - 432GB RAM
Standard_E64i_v3 E64i (v3) - 64 vCPUs - 432GB RAM
Standard_E64is_v3 E64is (v3) - 64 vCPUs - 432GB RAM
Standard_E64s_v3 E64s (v3) - 64 vCPUs - 432GB RAM
Standard_E96a_v4 E96a (v4) - 96 vCPUs - 672GB RAM
Standard_E96as_v4 E96as (v4) - 96 vCPUs - 672GB RAM
Standard_F1 F1 - 1 vCPUs - 2GB RAM
Standard_F1s F1s - 1 vCPUs - 2GB RAM
Standard_F2 F2 - 2 vCPUs - 4GB RAM
Standard_F2s F2s - 2 vCPUs - 4GB RAM
Standard_F2s_v2 F2s (v2) - 2 vCPUs - 4GB RAM
Standard_F4 F4 - 4 vCPUs - 8GB RAM
Standard_F4s F4s - 4 vCPUs - 8GB RAM
Standard_F4s_v2 F4s (v2) - 4 vCPUs - 8GB RAM
Standard_F8 F8 - 8 vCPUs - 16GB RAM
Standard_F8s F8s - 8 vCPUs - 16GB RAM
Standard_F8s_v2 F8s (v2) - 8 vCPUs - 16GB RAM
Standard_F16 F16 - 16 vCPUs - 32GB RAM
Standard_F16s F16s - 16 vCPUs - 32GB RAM
Standard_F16s_v2 F16s (v2) - 16 vCPUs - 32GB RAM
Standard_F32s_v2 F32s (v2) - 32 vCPUs - 64GB RAM
Standard_F48s_v2 F48s (v2) - 48 vCPUs - 96GB RAM
Standard_F64s_v2 F64s (v2) - 64 vCPUs - 128GB RAM
Standard_F72s_v2 F72s (v2) - 72 vCPUs - 144GB RAM
Standard_G1 G1 - 2 vCPUs - 28GB RAM
Standard_G2 G2 - 4 vCPUs - 56GB RAM
Standard_G3 G3 - 8 vCPUs - 112GB RAM
Standard_G4 G4 - 16 vCPUs - 224GB RAM
Standard_G5 G5 - 32 vCPUs - 448GB RAM
Standard_GS1 GS1 - 2 vCPUs - 28GB RAM
Standard_GS2 GS2 - 4 vCPUs - 56GB RAM
Standard_GS3 GS3 - 8 vCPUs - 112GB RAM
Standard_GS4 GS4 - 16 vCPUs - 224GB RAM
Standard_GS4-4 GS4-4 - 16 vCPUs - 224GB RAM
Standard_GS4-8 GS4-8 - 16 vCPUs - 224GB RAM
Standard_GS5 GS5 - 32 vCPUs - 448GB RAM
Standard_GS5-8 GS5-8 - 32 vCPUs - 448GB RAM
Standard_GS5-16 GS5-16 - 32 vCPUs - 448GB RAM
Standard_H8 H8 - 8 vCPUs - 56GB RAM
Standard_H8_Promo H8 Promo - 8 vCPUs - 56GB RAM
Standard_H8m H8m - 8 vCPUs - 112GB RAM
Standard_H8m_Promo H8m Promo - 8 vCPUs - 112GB RAM
Standard_H16 H16 - 16 vCPUs - 112GB RAM
Standard_H16_Promo H16 Promo - 16 vCPUs - 112GB RAM
Standard_H16m H16m - 16 vCPUs - 224GB RAM
Standard_H16m_Promo H16m Promo - 16 vCPUs - 224GB RAM
Standard_H16mr H16mr - 16 vCPUs - 224GB RAM
Standard_H16mr_Promo H16mr Promo - 16 vCPUs - 224GB RAM
Standard_H16r H16r - 16 vCPUs - 112GB RAM
Standard_H16r_Promo H16r Promo - 16 vCPUs - 112GB RAM
Standard_HB60rs HB60rs - 60 vCPUs - 224GB RAM
Standard_HB120rs_v2 HB120rs (v2) - 120 vCPUs - 469GB RAM
Standard_HC44rs HC44rs - 44 vCPUs - 328GB RAM
Standard_L4s L4s - 4 vCPUs - 32GB RAM
Standard_L8s L8s - 8 vCPUs - 64GB RAM
Standard_L8s_v2 L8s (v2) - 8 vCPUs - 64GB RAM
Standard_L16s L16s - 16 vCPUs - 128GB RAM
Standard_L16s_v2 L16s (v2) - 16 vCPUs - 128GB RAM
Standard_L32s L32s - 32 vCPUs - 256GB RAM
Standard_L32s_v2 L32s (v2) - 32 vCPUs - 256GB RAM
Standard_L48s_v2 L48s (v2) - 48 vCPUs - 384GB RAM
Standard_L64s_v2 L64s (v2) - 64 vCPUs - 512GB RAM
Standard_L80s_v2 L80s (v2) - 80 vCPUs - 640GB RAM
Standard_M8-2ms M8-2ms - 8 vCPUs - 219GB RAM
Standard_M8-4ms M8-4ms - 8 vCPUs - 219GB RAM
Standard_M8ms M8ms - 8 vCPUs - 219GB RAM
Standard_M16-4ms M16-4ms - 16 vCPUs - 438GB RAM
Standard_M16-8ms M16-8ms - 16 vCPUs - 438GB RAM
Standard_M16ms M16ms - 16 vCPUs - 438GB RAM
Standard_M24ms_v2 M24ms (v2) - 24 vCPUs - 537GB RAM
Standard_M24s_v2 M24s (v2) - 24 vCPUs - 268GB RAM
Standard_M32-8ms M32-8ms - 32 vCPUs - 875GB RAM
Standard_M32-16ms M32-16ms - 32 vCPUs - 875GB RAM
Standard_M32ls M32ls - 32 vCPUs - 256GB RAM
Standard_M32ms M32ms - 32 vCPUs - 875GB RAM
Standard_M32ts M32ts - 32 vCPUs - 192GB RAM
Standard_M48ms_v2 M48ms (v2) - 48 vCPUs - 1074GB RAM
Standard_M48s_v2 M48s (v2) - 48 vCPUs - 537GB RAM
Standard_M64 M64 - 64 vCPUs - 1000GB RAM
Standard_M64-16ms M64-16ms - 64 vCPUs - 1750GB RAM
Standard_M64-32ms M64-32ms - 64 vCPUs - 1750GB RAM
Standard_M64ls M64ls - 64 vCPUs - 512GB RAM
Standard_M64m M64m - 64 vCPUs - 1750GB RAM
Standard_M64ms M64ms - 64 vCPUs - 1750GB RAM
Standard_M64s M64s - 64 vCPUs - 1000GB RAM
Standard_M96ms_v2 M96ms (v2) - 96 vCPUs - 7516GB RAM
Standard_M96s_v2 M96s (v2) - 96 vCPUs - 1074GB RAM
Standard_M128 M128 - 128 vCPUs - 2000GB RAM
Standard_M128-32ms M128-32ms - 128 vCPUs - 3800GB RAM
Standard_M128-64ms M128-64ms - 128 vCPUs - 3800GB RAM
Standard_M128m M128m - 128 vCPUs - 3800GB RAM
Standard_M128ms M128ms - 128 vCPUs - 3800GB RAM
Standard_M128s M128s - 128 vCPUs - 2000GB RAM
Standard_M192ms_v2 M192ms (v2) - 192 vCPUs - 4295GB RAM
Standard_M192s_v2 M192s (v2) - 192 vCPUs - 2147GB RAM
Standard_M208ms_v2 M208ms (v2) - 208 vCPUs - 5700GB RAM
Standard_M208s_v2 M208s (v2) - 208 vCPUs - 2850GB RAM
Standard_M416ms_v2 M416ms (v2) - 416 vCPUs - 11400GB RAM
Standard_M416s_v2 M416s (v2) - 416 vCPUs - 5700GB RAM
Standard_NC6 NC6 - 6 vCPUs - 56GB RAM
Standard_NC6_Promo NC6 Promo - 6 vCPUs - 56GB RAM
Standard_NC6s_v2 NC6s (v2) - 6 vCPUs - 112GB RAM
Standard_NC6s_v3 NC6s (v3) - 6 vCPUs - 112GB RAM
Standard_NC12 NC12 - 12 vCPUs - 112GB RAM
Standard_NC12_Promo NC12 Promo - 12 vCPUs - 112GB RAM
Standard_NC12s_v2 NC12s (v2) - 12 vCPUs - 224GB RAM
Standard_NC12s_v3 NC12s (v3) - 12 vCPUs - 224GB RAM
Standard_NC24 NC24 - 24 vCPUs - 224GB RAM
Standard_NC24_Promo NC24 Promo - 24 vCPUs - 224GB RAM
Standard_NC24r NC24r - 24 vCPUs - 224GB RAM
Standard_NC24r_Promo NC24r Promo - 24 vCPUs - 224GB RAM
Standard_NC24rs_v2 NC24rs (v2) - 24 vCPUs - 448GB RAM
Standard_NC24rs_v3 NC24rs (v3) - 24 vCPUs - 448GB RAM
Standard_NC24s_v2 NC24s (v2) - 24 vCPUs - 448GB RAM
Standard_NC24s_v3 NC24s (v3) - 24 vCPUs - 448GB RAM
Standard_ND6s ND6s - 6 vCPUs - 112GB RAM
Standard_ND12s ND12s - 12 vCPUs - 224GB RAM
Standard_ND24rs ND24rs - 24 vCPUs - 448GB RAM
Standard_ND24s ND24s - 24 vCPUs - 448GB RAM
Standard_ND40rs_v2 ND40rs (v2) - 40 vCPUs - 672GB RAM
Standard_ND40s_v3 ND40s (v3) - 40 vCPUs - 672GB RAM
Standard_NP10s NP10s - 10 vCPUs - 168GB RAM
Standard_NP20s NP20s - 20 vCPUs - 336GB RAM
Standard_NP40s NP40s - 40 vCPUs - 672GB RAM
Standard_NV4as_v4 NV4as (v4) - 4 vCPUs - 14GB RAM
Standard_NV6 NV6 - 6 vCPUs - 56GB RAM
Standard_NV6_Promo NV6 Promo - 6 vCPUs - 56GB RAM
Standard_NV6s_v2 NV6s (v2) - 6 vCPUs - 112GB RAM
Standard_NV8as_v4 NV8as (v4) - 8 vCPUs - 28GB RAM
Standard_NV12 NV12 - 12 vCPUs - 112GB RAM
Standard_NV12_Promo NV12 Promo - 12 vCPUs - 112GB RAM
Standard_NV12s_v2 NV12s (v2) - 12 vCPUs - 224GB RAM
Standard_NV12s_v3 NV12s (v3) - 12 vCPUs - 112GB RAM
Standard_NV16as_v4 NV16as (v4) - 16 vCPUs - 56GB RAM
Standard_NV24 NV24 - 24 vCPUs - 224GB RAM
Standard_NV24_Promo NV24 Promo - 24 vCPUs - 224GB RAM
Standard_NV24s_v2 NV24s (v2) - 24 vCPUs - 448GB RAM
Standard_NV24s_v3 NV24s (v3) - 24 vCPUs - 224GB RAM
Standard_NV32as_v4 NV32as (v4) - 32 vCPUs - 112GB RAM
Standard_NV48s_v3 NV48s (v3) - 48 vCPUs - 448GB RAM
Standard_PB6s PB6s - 6 vCPUs - 112GB RAM

CloudA Cloud

Key Description
512 MB 512 MB - General Purpose
1 GB 1 GB - General Purpose
2 GB 2 GB - General Purpose
4 GB 4 GB - General Purpose
8 GB 8 GB - General Purpose
16 GB 16 GB - General Purpose
32 GB 32 GB - General Purpose
8 GB - HM 8 GB - High Memory
16 GB - HM 16 GB - High Memory
32 GB - HM 32 GB - High Memory
4 GB - HC 4 GB - High Compute
8 GB - HC 8 GB - High Compute
16 GB - HC 16 GB - High Compute

DigitalOcean

Key Description
s-1vcpu-1gb-amd Basic AMD - 1 vCPUs - 1GB RAM - 25GB SSD - 1TB Transfer
s-1vcpu-2gb-amd Basic AMD - 1 vCPUs - 2GB RAM - 50GB SSD - 2TB Transfer
s-2vcpu-2gb-amd Basic AMD - 2 vCPUs - 2GB RAM - 60GB SSD - 3TB Transfer
s-2vcpu-4gb-amd Basic AMD - 2 vCPUs - 4GB RAM - 80GB SSD - 4TB Transfer
s-4vcpu-8gb-amd Basic AMD - 4 vCPUs - 8GB RAM - 160GB SSD - 5TB Transfer
s-8vcpu-16gb-amd Basic AMD - 8 vCPUs - 16GB RAM - 320GB SSD - 6TB Transfer
s-1vcpu-1gb-intel Basic Intel - 1 vCPUs - 1GB RAM - 25GB SSD - 1TB Transfer
s-1vcpu-2gb-intel Basic Intel - 1 vCPUs - 2GB RAM - 50GB SSD - 2TB Transfer
s-2vcpu-2gb-intel Basic Intel - 2 vCPUs - 2GB RAM - 60GB SSD - 3TB Transfer
s-2vcpu-4gb-intel Basic Intel - 2 vCPUs - 4GB RAM - 80GB SSD - 4TB Transfer
s-4vcpu-8gb-intel Basic Intel - 4 vCPUs - 8GB RAM - 160GB SSD - 5TB Transfer
s-8vcpu-16gb-intel Basic Intel - 8 vCPUs - 16GB RAM - 320GB SSD - 6TB Transfer
s-1vcpu-1gb Basic - 1 vCPUs - 1GB RAM - 25GB SSD - 1TB Transfer
s-1vcpu-2gb Basic - 1 vCPUs - 2GB RAM - 50GB SSD - 2TB Transfer
s-2vcpu-4gb Basic - 2 vCPUs - 4GB RAM - 80GB SSD - 4TB Transfer
s-4vcpu-8gb Basic - 4 vCPUs - 8GB RAM - 160GB SSD - 5TB Transfer
s-8vcpu-16gb Basic - 8 vCPUs - 16GB RAM - 320GB SSD - 6TB Transfer
c2-2vcpu-4gb CPU-Optimized 2x SSD - 2 vCPUs - 4GB RAM - 50GB SSD - 4TB Transfer
c2-4vcpu-8gb CPU-Optimized 2x SSD - 4 vCPUs - 8GB RAM - 100GB SSD - 5TB Transfer
c2-8vcpu-16gb CPU-Optimized 2x SSD - 8 vCPUs - 16GB RAM - 200GB SSD - 6TB Transfer
c2-16vcpu-32gb CPU-Optimized 2x SSD - 16 vCPUs - 32GB RAM - 400GB SSD - 7TB Transfer
c2-32vcpu-64gb CPU-Optimized 2x SSD - 32 vCPUs - 64GB RAM - 800GB SSD - 9TB Transfer
c-2 CPU-Optimized - 2 vCPUs - 4GB RAM - 25GB SSD - 4TB Transfer
c-4 CPU-Optimized - 4 vCPUs - 8GB RAM - 50GB SSD - 5TB Transfer
c-8 CPU-Optimized - 8 vCPUs - 16GB RAM - 100GB SSD - 6TB Transfer
c-32 CPU-Optimized - 32 vCPUs - 64GB RAM - 400GB SSD - 9TB Transfer
gd-2vcpu-8gb General Purpose 2x SSD - 2 vCPUs - 8GB RAM - 50GB SSD - 4TB Transfer
gd-4vcpu-16gb General Purpose 2x SSD - 4 vCPUs - 16GB RAM - 100GB SSD - 5TB Transfer
gd-8vcpu-32gb General Purpose 2x SSD - 8 vCPUs - 32GB RAM - 200GB SSD - 6TB Transfer
gd-16vcpu-64gb General Purpose 2x SSD - 16 vCPUs - 64GB RAM - 400GB SSD - 7TB Transfer
gd-32vcpu-128gb General Purpose 2x SSD - 32 vCPUs - 128GB RAM - 800GB SSD - 8TB Transfer
gd-40vcpu-160gb General Purpose 2x SSD - 40 vCPUs - 163,840MB RAM - 1,000GB SSD - 9TB Transfer
g-2vcpu-8gb General Purpose - 2 vCPUs - 8GB RAM - 25GB SSD - 4TB Transfer
g-4vcpu-16gb General Purpose - 4 vCPUs - 16GB RAM - 50GB SSD - 5TB Transfer
g-8vcpu-32gb General Purpose - 8 vCPUs - 32GB RAM - 100GB SSD - 6TB Transfer
g-16vcpu-64gb General Purpose - 16 vCPUs - 64GB RAM - 200GB SSD - 7TB Transfer
g-32vcpu-128gb General Purpose - 32 vCPUs - 128GB RAM - 400GB SSD - 8TB Transfer
g-40vcpu-160gb General Purpose - 40 vCPUs - 160GB RAM - 500GB SSD - 9TB Transfer
s-1vcpu-3gb Legacy Basic - 1 vCPUs - 3GB RAM - 60GB SSD - 3TB Transfer
s-2vcpu-2gb Legacy Basic - 2 vCPUs - 2GB RAM - 60GB SSD - 3TB Transfer
s-3vcpu-1gb Legacy Basic - 3 vCPUs - 1GB RAM - 60GB SSD - 3TB Transfer
s-6vcpu-16gb Legacy Basic - 6 vCPUs - 16GB RAM - 320GB SSD - 6TB Transfer
s-8vcpu-32gb Legacy Basic - 8 vCPUs - 32GB RAM - 640GB SSD - 7TB Transfer
s-12vcpu-48gb Legacy Basic - 12 vCPUs - 49,152MB RAM - 960GB SSD - 8TB Transfer
s-16vcpu-64gb Legacy Basic - 16 vCPUs - 64GB RAM - 1,280GB SSD - 9TB Transfer
s-20vcpu-96gb Legacy Basic - 20 vCPUs - 96GB RAM - 1,920GB SSD - 10TB Transfer
s-24vcpu-128gb Legacy Basic - 24 vCPUs - 128GB RAM - 2,560GB SSD - 11TB Transfer
s-32vcpu-192gb Legacy Basic - 32 vCPUs - 192GB RAM - 3,840GB SSD - 12TB Transfer
c-16 Legacy CPU-Optimized - 16 vCPUs - 32GB RAM - 200GB SSD - 7TB Transfer
m-1vcpu-8gb Legacy Memory-Optimized - 1 vCPUs - 8GB RAM - 40GB SSD - 5TB Transfer
m-16gb Legacy Memory-Optimized - 2 vCPUs - 16GB RAM - 60GB SSD - 5TB Transfer
m-32gb Legacy Memory-Optimized - 4 vCPUs - 32GB RAM - 90GB SSD - 5TB Transfer
m-64gb Legacy Memory-Optimized - 8 vCPUs - 64GB RAM - 200GB SSD - 5TB Transfer
m-128gb Legacy Memory-Optimized - 16 vCPUs - 128GB RAM - 340GB SSD - 5TB Transfer
m-224gb Legacy Memory-Optimized - 32 vCPUs - 229,376MB RAM - 500GB SSD - 5TB Transfer
m3-2vcpu-16gb Memory-Optimized 3x SSD - 2 vCPUs - 16GB RAM - 150GB SSD - 4TB Transfer
m3-4vcpu-32gb Memory-Optimized 3x SSD - 4 vCPUs - 32GB RAM - 300GB SSD - 6TB Transfer
m3-8vcpu-64gb Memory-Optimized 3x SSD - 8 vCPUs - 64GB RAM - 600GB SSD - 7TB Transfer
m3-16vcpu-128gb Memory-Optimized 3x SSD - 16 vCPUs - 128GB RAM - 1,200GB SSD - 8TB Transfer
m3-24vcpu-192gb Memory-Optimized 3x SSD - 24 vCPUs - 192GB RAM - 1,800GB SSD - 9TB Transfer
m3-32vcpu-256gb Memory-Optimized 3x SSD - 32 vCPUs - 256GB RAM - 2,400GB SSD - 10TB Transfer
m6-2vcpu-16gb Memory-Optimized 6x SSD - 2 vCPUs - 16GB RAM - 300GB SSD - 4TB Transfer
m6-4vcpu-32gb Memory-Optimized 6x SSD - 4 vCPUs - 32GB RAM - 600GB SSD - 6TB Transfer
m6-8vcpu-64gb Memory-Optimized 6x SSD - 8 vCPUs - 64GB RAM - 1,200GB SSD - 7TB Transfer
m6-16vcpu-128gb Memory-Optimized 6x SSD - 16 vCPUs - 128GB RAM - 2,400GB SSD - 8TB Transfer
m6-24vcpu-192gb Memory-Optimized 6x SSD - 24 vCPUs - 192GB RAM - 3,600GB SSD - 9TB Transfer
m6-32vcpu-256gb Memory-Optimized 6x SSD - 32 vCPUs - 256GB RAM - 4,800GB SSD - 10TB Transfer
m-2vcpu-16gb Memory-Optimized - 2 vCPUs - 16GB RAM - 50GB SSD - 4TB Transfer
m-4vcpu-32gb Memory-Optimized - 4 vCPUs - 32GB RAM - 100GB SSD - 6TB Transfer
m-8vcpu-64gb Memory-Optimized - 8 vCPUs - 64GB RAM - 200GB SSD - 7TB Transfer
m-16vcpu-128gb Memory-Optimized - 16 vCPUs - 128GB RAM - 400GB SSD - 8TB Transfer
m-24vcpu-192gb Memory-Optimized - 24 vCPUs - 192GB RAM - 600GB SSD - 9TB Transfer
m-32vcpu-256gb Memory-Optimized - 32 vCPUs - 256GB RAM - 800GB SSD - 10TB Transfer
so1_5-2vcpu-16gb Storage-Optimized 1.5x SSD - 2 vCPUs - 16GB RAM - 450GB SSD - 4TB Transfer
so1_5-4vcpu-32gb Storage-Optimized 1.5x SSD - 4 vCPUs - 32GB RAM - 900GB SSD - 6TB Transfer
so1_5-8vcpu-64gb Storage-Optimized 1.5x SSD - 8 vCPUs - 64GB RAM - 1,800GB SSD - 7TB Transfer
so1_5-16vcpu-128gb Storage-Optimized 1.5x SSD - 16 vCPUs - 128GB RAM - 3,600GB SSD - 8TB Transfer
so1_5-24vcpu-192gb Storage-Optimized 1.5x SSD - 24 vCPUs - 192GB RAM - 5,400GB SSD - 9TB Transfer
so1_5-32vcpu-256gb Storage-Optimized 1.5x SSD - 32 vCPUs - 256GB RAM - 7,200GB SSD - 10TB Transfer
so-2vcpu-16gb Storage-Optimized - 2 vCPUs - 16GB RAM - 300GB SSD - 4TB Transfer
so-4vcpu-32gb Storage-Optimized - 4 vCPUs - 32GB RAM - 600GB SSD - 6TB Transfer
so-8vcpu-64gb Storage-Optimized - 8 vCPUs - 64GB RAM - 1,200GB SSD - 7TB Transfer
so-16vcpu-128gb Storage-Optimized - 16 vCPUs - 128GB RAM - 2,400GB SSD - 8TB Transfer
so-24vcpu-192gb Storage-Optimized - 24 vCPUs - 192GB RAM - 3,600GB SSD - 9TB Transfer
so-32vcpu-256gb Storage-Optimized - 32 vCPUs - 256GB RAM - 4,800GB SSD - 10TB Transfer
512mb Legacy Basic - 1 vCPUs - 512MB RAM - 20GB SSD - 1TB Transfer
1gb Legacy Basic - 1 vCPUs - 1GB RAM - 30GB SSD - 2TB Transfer
2gb Legacy Basic - 2 vCPUs - 2GB RAM - 40GB SSD - 3TB Transfer
4gb Legacy Basic - 2 vCPUs - 4GB RAM - 60GB SSD - 4TB Transfer
8gb Legacy Basic - 4 vCPUs - 8GB RAM - 80GB SSD - 5TB Transfer
16gb Legacy Basic - 8 vCPUs - 16GB RAM - 160GB SSD - 6TB Transfer
32gb Legacy Basic - 12 vCPUs - 32GB RAM - 320GB SSD - 7TB Transfer
48gb Legacy Basic - 16 vCPUs - 49,152MB RAM - 480GB SSD - 8TB Transfer
64gb Legacy Basic - 20 vCPUs - 64GB RAM - 640GB SSD - 9TB Transfer

Google Compute Engine

Key Description
c2-standard-4 4 vCPUs, 16GB RAM
c2-standard-8 8 vCPUs, 32GB RAM
c2-standard-16 16 vCPUs, 64GB RAM
c2-standard-30 30 vCPUs, 120GB RAM
c2-standard-60 60 vCPUs, 240GB RAM
e2-highcpu-2 2 vCPUs, 2GB RAM
e2-highcpu-4 4 vCPUs, 4GB RAM
e2-highcpu-8 8 vCPUs, 8GB RAM
e2-highcpu-16 16 vCPUs, 16GB RAM
e2-highmem-2 2 vCPUs, 16GB RAM
e2-highmem-4 4 vCPUs, 32GB RAM
e2-highmem-8 8 vCPUs, 64GB RAM
e2-highmem-16 16 vCPUs, 128GB RAM
e2-medium 2 vCPUs, 4GB RAM
e2-micro 2 vCPUs, 1GB RAM
e2-small 2 vCPUs, 2GB RAM
e2-standard-2 2 vCPUs, 8GB RAM
e2-standard-4 4 vCPUs, 16GB RAM
e2-standard-8 8 vCPUs, 32GB RAM
e2-standard-16 16 vCPUs, 64GB RAM
f1-micro 1 vCPU, 600MB RAM
g1-small 1 vCPU, 1GB RAM
m1-megamem-96 96 vCPUs, 1,433GB RAM
m1-ultramem-40 40 vCPUs, 961GB RAM
m1-ultramem-80 80 vCPUs, 1,922GB RAM
m1-ultramem-160 160 vCPUs, 3,844GB RAM
n1-highcpu-2 2 vCPUs, 1GB RAM
n1-highcpu-4 4 vCPUs, 3GB RAM
n1-highcpu-8 8 vCPUs, 7GB RAM
n1-highcpu-16 16 vCPUs, 14GB RAM
n1-highcpu-32 32 vCPUs, 28GB RAM
n1-highcpu-64 64 vCPUs, 57GB RAM
n1-highcpu-96 96 vCPUs, 86GB RAM
n1-highmem-2 2 vCPUs, 13GB RAM
n1-highmem-4 4 vCPUs, 26GB RAM
n1-highmem-8 8 vCPUs, 52GB RAM
n1-highmem-16 16 vCPUs, 104GB RAM
n1-highmem-32 32 vCPUs, 208GB RAM
n1-highmem-64 64 vCPUs, 416GB RAM
n1-highmem-96 96 vCPUs, 624GB RAM
n1-megamem-96 96 vCPUs, 1,433GB RAM
n1-standard-1 1 vCPU, 3GB RAM
n1-standard-2 2 vCPUs, 7GB RAM
n1-standard-4 4 vCPUs, 15GB RAM
n1-standard-8 8 vCPUs, 30GB RAM
n1-standard-16 16 vCPUs, 60GB RAM
n1-standard-32 32 vCPUs, 120GB RAM
n1-standard-64 64 vCPUs, 240GB RAM
n1-standard-96 96 vCPUs, 360GB RAM
n1-ultramem-40 40 vCPUs, 961GB RAM
n1-ultramem-80 80 vCPUs, 1,922GB RAM
n1-ultramem-160 160 vCPUs, 3,844GB RAM
n2-highcpu-2 2 vCPUs, 2GB RAM
n2-highcpu-4 4 vCPUs, 4GB RAM
n2-highcpu-8 8 vCPUs, 8GB RAM
n2-highcpu-16 16 vCPUs, 16GB RAM
n2-highcpu-32 32 vCPUs, 32GB RAM
n2-highcpu-48 48 vCPUs, 48GB RAM
n2-highcpu-64 64 vCPUs, 64GB RAM
n2-highcpu-80 80 vCPUs, 80GB RAM
n2-highmem-2 2 vCPUs, 16GB RAM
n2-highmem-4 4 vCPUs, 32GB RAM
n2-highmem-8 8 vCPUs, 64GB RAM
n2-highmem-16 16 vCPUs, 128GB RAM
n2-highmem-32 32 vCPUs, 256GB RAM
n2-highmem-48 48 vCPUs, 384GB RAM
n2-highmem-64 64 vCPUs, 512GB RAM
n2-highmem-80 80 vCPUs, 640GB RAM
n2-standard-2 2 vCPUs, 8GB RAM
n2-standard-4 4 vCPUs, 16GB RAM
n2-standard-8 8 vCPUs, 32GB RAM
n2-standard-16 16 vCPUs, 64GB RAM
n2-standard-32 32 vCPUs, 128GB RAM
n2-standard-48 48 vCPUs, 192GB RAM
n2-standard-64 64 vCPUs, 256GB RAM
n2-standard-80 80 vCPUs, 320GB RAM
n2d-highcpu-2 2 vCPUs, 2GB RAM
n2d-highcpu-4 4 vCPUs, 4GB RAM
n2d-highcpu-8 8 vCPUs, 8GB RAM
n2d-highcpu-16 16 vCPUs, 16GB RAM
n2d-highcpu-32 32 vCPUs, 32GB RAM
n2d-highcpu-48 48 vCPUs, 48GB RAM
n2d-highcpu-64 64 vCPUs, 64GB RAM
n2d-highcpu-80 80 vCPUs, 80GB RAM
n2d-highcpu-96 96 vCPUs, 96GB RAM
n2d-highcpu-128 128 vCPUs, 128GB RAM
n2d-highcpu-224 224 vCPUs, 224GB RAM
n2d-highmem-2 2 vCPUs, 16GB RAM
n2d-highmem-4 4 vCPUs, 32GB RAM
n2d-highmem-8 8 vCPUs, 64GB RAM
n2d-highmem-16 16 vCPUs, 128GB RAM
n2d-highmem-32 32 vCPUs, 256GB RAM
n2d-highmem-48 48 vCPUs, 384GB RAM
n2d-highmem-64 64 vCPUs, 512GB RAM
n2d-highmem-80 80 vCPUs, 640GB RAM
n2d-highmem-96 96 vCPUs, 768GB RAM
n2d-standard-2 2 vCPUs, 8GB RAM
n2d-standard-4 4 vCPUs, 16GB RAM
n2d-standard-8 8 vCPUs, 32GB RAM
n2d-standard-16 16 vCPUs, 64GB RAM
n2d-standard-32 32 vCPUs, 128GB RAM
n2d-standard-48 48 vCPUs, 192GB RAM
n2d-standard-64 64 vCPUs, 256GB RAM
n2d-standard-80 80 vCPUs, 320GB RAM
n2d-standard-96 96 vCPUs, 384GB RAM
n2d-standard-128 128 vCPUs, 512GB RAM
n2d-standard-224 224 vCPUs, 896GB RAM

Hetzner

Key Description
11 Dedicated - CCX11 - 2 vCPUs - 8.0 GB RAM - 80 GB disk
12 Dedicated - CCX21 - 4 vCPUs - 16.0 GB RAM - 160 GB disk
13 Dedicated - CCX31 - 8 vCPUs - 32.0 GB RAM - 240 GB disk
14 Dedicated - CCX41 - 16 vCPUs - 64.0 GB RAM - 360 GB disk
15 Dedicated - CCX51 - 32 vCPUs - 128.0 GB RAM - 600 GB disk
3 Local storage - CX21 - 2 vCPUs - 4.0 GB RAM - 40 GB disk
5 Local storage - CX31 - 2 vCPUs - 8.0 GB RAM - 80 GB disk
22 Local storage - CPX11 - 2 vCPUs - 2.0 GB RAM - 40 GB disk
23 Local storage - CPX21 - 3 vCPUs - 4.0 GB RAM - 80 GB disk
7 Local storage - CX41 - 4 vCPUs - 16.0 GB RAM - 160 GB disk
24 Local storage - CPX31 - 4 vCPUs - 8.0 GB RAM - 160 GB disk
9 Local storage - CX51 - 8 vCPUs - 32.0 GB RAM - 240 GB disk
25 Local storage - CPX41 - 8 vCPUs - 16.0 GB RAM - 240 GB disk
26 Local storage - CPX51 - 16 vCPUs - 32.0 GB RAM - 360 GB disk
4 Network storage - CX21-CEPH - 2 vCPUs - 4.0 GB RAM - 40 GB disk
6 Network storage - CX31-CEPH - 2 vCPUs - 8.0 GB RAM - 80 GB disk
8 Network storage - CX41-CEPH - 4 vCPUs - 16.0 GB RAM - 160 GB disk
10 Network storage - CX51-CEPH - 8 vCPUs - 32.0 GB RAM - 240 GB disk

Linode

Key Description
Nanode 1GB Nanode 1GB
Linode 2GB Linode 2GB
Linode 4GB Linode 4GB
Linode 8GB Linode 8GB
Linode 16GB Linode 16GB
Linode 32GB Linode 32GB
Linode 64GB Linode 64GB
Linode 96GB Linode 96GB
Linode 128GB Linode 128GB
Linode 192GB Linode 192GB
Linode 24GB Linode 24GB
Linode 48GB Linode 48GB
Linode 90GB Linode 90GB
Linode 150GB Linode 150GB
Linode 300GB Linode 300GB

Maxihost

Key Description
c2.medium.x86 C2.MEDIUM.X86 - E-2288G - 1 CPU(s) 8 COREs - 64GB - 2x500GB SSD
c2.small.x86 C2.SMALL.X86 - E-2276G - 1 CPU(s) 6 COREs - 32GB - 1x500GB SSD
c2.large.x86 C2.LARGE.X86 - Silver 4210 - 2 CPU(s) 20 COREs - 128GB - 2x1TB SSD

OVH

Key Description
b2-7 b2-7 - 50GB Disk - 2 vCPUs - 7GB RAM
b2-15 b2-15 - 100GB Disk - 4 vCPUs - 15GB RAM
b2-30 b2-30 - 200GB Disk - 8 vCPUs - 30GB RAM
b2-60 b2-60 - 400GB Disk - 16 vCPUs - 60GB RAM
b2-120 b2-120 - 400GB Disk - 32 vCPUs - 120GB RAM
c2-7 c2-7 - 50GB Disk - 2 vCPUs - 7GB RAM
c2-15 c2-15 - 100GB Disk - 4 vCPUs - 15GB RAM
c2-30 c2-30 - 200GB Disk - 8 vCPUs - 30GB RAM
c2-60 c2-60 - 400GB Disk - 16 vCPUs - 60GB RAM
c2-120 c2-120 - 400GB Disk - 32 vCPUs - 120GB RAM
i1-45 i1-45 - 50GB Disk - 8 vCPUs - 45GB RAM
i1-90 i1-90 - 50GB Disk - 16 vCPUs - 90GB RAM
i1-180 i1-180 - 50GB Disk - 32 vCPUs - 180GB RAM
r2-15 r2-15 - 50GB Disk - 2 vCPUs - 15GB RAM
r2-30 r2-30 - 50GB Disk - 2 vCPUs - 30GB RAM
r2-60 r2-60 - 100GB Disk - 4 vCPUs - 60GB RAM
r2-120 r2-120 - 200GB Disk - 8 vCPUs - 120GB RAM
r2-240 r2-240 - 400GB Disk - 16 vCPUs - 240GB RAM
s1-2 s1-2 - 10GB Disk - 1 vCPU - 2GB RAM
s1-4 s1-4 - 20GB Disk - 1 vCPU - 4GB RAM
s1-8 s1-8 - 40GB Disk - 2 vCPUs - 8GB RAM
t1-45 t1-45 - 400GB Disk - 8 vCPUs - 45GB RAM
t1-90 t1-90 - 800GB Disk - 16 vCPUs - 90GB RAM
t1-180 t1-180 - 50GB Disk - 32 vCPUs - 180GB RAM

Packet

Key Description
baremetal_0 t1.small.x86
baremetal_1 c1.small.x86
baremetal_1e x1.small.x86
c2.medium.x86 c2.medium.x86
baremetal_s s1.large.x86
baremetal_3 c1.xlarge.x86
baremetal_2 m1.xlarge.x86
m2.xlarge.x86 m2.xlarge.x86
n2.xlarge.x86 n2.xlarge.x86
x2.xlarge.x86 x2.xlarge.x86

Rackspace

Key Description
512MB Standard Instance 512MB Standard Instance
1GB Standard Instance 1GB Standard Instance
2GB Standard Instance 2GB Standard Instance
4GB Standard Instance 4GB Standard Instance
8GB Standard Instance 8GB Standard Instance
15GB Standard Instance 15GB Standard Instance
30GB Standard Instance 30GB Standard Instance
3.75 GB Compute v1 3.75 GB Compute v1
7.5 GB Compute v1 7.5 GB Compute v1
15 GB Compute v1 15 GB Compute v1
30 GB Compute v1 30 GB Compute v1
60 GB Compute v1 60 GB Compute v1
1 GB General Purpose v1 1 GB General Purpose v1
2 GB General Purpose v1 2 GB General Purpose v1
4 GB General Purpose v1 4 GB General Purpose v1
8 GB General Purpose v1 8 GB General Purpose v1
15 GB I/O v1 15 GB I/O v1
30 GB I/O v1 30 GB I/O v1
60 GB I/O v1 60 GB I/O v1
90 GB I/O v1 90 GB I/O v1
120 GB I/O v1 120 GB I/O v1
15 GB Memory v1 15 GB Memory v1
30 GB Memory v1 30 GB Memory v1
60 GB Memory v1 60 GB Memory v1
120 GB Memory v1 120 GB Memory v1
240 GB Memory v1 240 GB Memory v1
1 GB Performance 1 GB Performance
2 GB Performance 2 GB Performance
4 GB Performance 4 GB Performance
8 GB Performance 8 GB Performance
15 GB Performance 15 GB Performance
30 GB Performance 30 GB Performance
60 GB Performance 60 GB Performance
90 GB Performance 90 GB Performance
120 GB Performance 120 GB Performance

Vultr

Key Description
vc2-1c-1gb Cloud Compute (Intel) - 1 vCPUs - 1 GB RAM
vc2-1c-2gb Cloud Compute (Intel) - 1 vCPUs - 2 GB RAM
vc2-2c-4gb Cloud Compute (Intel) - 2 vCPUs - 4 GB RAM
vc2-2c-4gb-sc1 Cloud Compute (Intel) - 2 vCPUs - 4 GB RAM
vc2-4c-8gb Cloud Compute (Intel) - 4 vCPUs - 8 GB RAM
vc2-4c-8gb-sc1 Cloud Compute (Intel) - 4 vCPUs - 8 GB RAM
vc2-6c-16gb Cloud Compute (Intel) - 6 vCPUs - 16 GB RAM
vc2-6c-16gb-sc1 Cloud Compute (Intel) - 6 vCPUs - 16 GB RAM
vc2-8c-32gb Cloud Compute (Intel) - 8 vCPUs - 32 GB RAM
vc2-8c-32gb-sc1 Cloud Compute (Intel) - 8 vCPUs - 32 GB RAM
vc2-16c-64gb Cloud Compute (Intel) - 16 vCPUs - 64 GB RAM
vc2-16c-64gb-sc1 Cloud Compute (Intel) - 16 vCPUs - 64 GB RAM
vc2-24c-96gb Cloud Compute (Intel) - 24 vCPUs - 96 GB RAM
vc2-24c-96gb-sc1 Cloud Compute (Intel) - 24 vCPUs - 96 GB RAM
vhf-1c-1gb High Frequency - 1 vCPUs - 1 GB RAM
vhf-1c-2gb High Frequency - 1 vCPUs - 2 GB RAM
vhf-1c-2gb-sc1 High Frequency - 1 vCPUs - 2 GB RAM
vhf-2c-2gb High Frequency - 2 vCPUs - 2 GB RAM
vhf-2c-2gb-sc1 High Frequency - 2 vCPUs - 2 GB RAM
vhf-2c-4gb High Frequency - 2 vCPUs - 4 GB RAM
vhf-2c-4gb-sc1 High Frequency - 2 vCPUs - 4 GB RAM
vhf-3c-8gb High Frequency - 3 vCPUs - 8 GB RAM
vhf-3c-8gb-sc1 High Frequency - 3 vCPUs - 8 GB RAM
vhf-4c-16gb High Frequency - 4 vCPUs - 16 GB RAM
vhf-4c-16gb-sc1 High Frequency - 4 vCPUs - 16 GB RAM
vhf-6c-24gb High Frequency - 6 vCPUs - 24 GB RAM
vhf-6c-24gb-sc1 High Frequency - 6 vCPUs - 24 GB RAM
vhf-8c-32gb High Frequency - 8 vCPUs - 32 GB RAM
vhf-8c-32gb-sc1 High Frequency - 8 vCPUs - 32 GB RAM
vhf-12c-48gb High Frequency - 12 vCPUs - 48 GB RAM
vhf-12c-48gb-sc1 High Frequency - 12 vCPUs - 48 GB RAM
vhp-1c-1gb-amd High Performance - 1 vCPUs - 1 GB RAM
vhp-1c-2gb-amd High Performance - 1 vCPUs - 2 GB RAM
vhp-2c-2gb-amd High Performance - 2 vCPUs - 2 GB RAM
vhp-2c-4gb-amd High Performance - 2 vCPUs - 4 GB RAM
vhp-4c-8gb-amd High Performance - 4 vCPUs - 8 GB RAM
vhp-4c-12gb-amd High Performance - 4 vCPUs - 12 GB RAM
vhp-8c-16gb-amd High Performance - 8 vCPUs - 16 GB RAM
vhp-12c-24gb-amd High Performance - 12 vCPUs - 24 GB RAM
vhp-1c-1gb-intel High Performance - 1 vCPUs - 1 GB RAM
vhp-1c-2gb-intel High Performance - 1 vCPUs - 2 GB RAM
vhp-2c-2gb-intel High Performance - 2 vCPUs - 2 GB RAM
vhp-2c-4gb-intel High Performance - 2 vCPUs - 4 GB RAM
vhp-4c-8gb-intel High Performance - 4 vCPUs - 8 GB RAM
vhp-4c-12gb-intel High Performance - 4 vCPUs - 12 GB RAM
vhp-8c-16gb-intel High Performance - 8 vCPUs - 16 GB RAM
vhp-12c-24gb-intel High Performance - 12 vCPUs - 24 GB RAM
voc-c-1c-2gb-25s-amd Optimized Cloud (AMD) - 1 vCPUs - 2 GB RAM
voc-g-1c-4gb-30s-amd Optimized Cloud (AMD) - 1 vCPUs - 4 GB RAM
voc-m-1c-8gb-50s-amd Optimized Cloud (AMD) - 1 vCPUs - 8 GB RAM
voc-c-2c-4gb-50s-amd Optimized Cloud (AMD) - 2 vCPUs - 4 GB RAM
voc-g-2c-8gb-50s-amd Optimized Cloud (AMD) - 2 vCPUs - 8 GB RAM
voc-c-2c-4gb-75s-amd Optimized Cloud (AMD) - 2 vCPUs - 4 GB RAM
voc-c-4c-8gb-75s-amd Optimized Cloud (AMD) - 4 vCPUs - 8 GB RAM
voc-g-4c-16gb-80s-amd Optimized Cloud (AMD) - 4 vCPUs - 16 GB RAM
voc-m-2c-16gb-100s-amd Optimized Cloud (AMD) - 2 vCPUs - 16 GB RAM
voc-s-1c-8gb-150s-amd Optimized Cloud (AMD) - 1 vCPUs - 8 GB RAM
voc-c-4c-8gb-150s-amd Optimized Cloud (AMD) - 4 vCPUs - 8 GB RAM
voc-c-8c-16gb-150s-amd Optimized Cloud (AMD) - 8 vCPUs - 16 GB RAM
voc-g-8c-32gb-160s-amd Optimized Cloud (AMD) - 8 vCPUs - 32 GB RAM
voc-m-2c-16gb-200s-amd Optimized Cloud (AMD) - 2 vCPUs - 16 GB RAM
voc-m-4c-32gb-200s-amd Optimized Cloud (AMD) - 4 vCPUs - 32 GB RAM
voc-c-8c-16gb-300s-amd Optimized Cloud (AMD) - 8 vCPUs - 16 GB RAM
voc-c-16c-32gb-300s-amd Optimized Cloud (AMD) - 16 vCPUs - 32 GB RAM
voc-s-2c-16gb-320s-amd Optimized Cloud (AMD) - 2 vCPUs - 16 GB RAM
voc-g-16c-64gb-320s-amd Optimized Cloud (AMD) - 16 vCPUs - 64 GB RAM
voc-m-2c-16gb-400s-amd Optimized Cloud (AMD) - 2 vCPUs - 16 GB RAM
voc-m-4c-32gb-400s-amd Optimized Cloud (AMD) - 4 vCPUs - 32 GB RAM
voc-m-8c-64gb-400s-amd Optimized Cloud (AMD) - 8 vCPUs - 64 GB RAM
voc-s-2c-16gb-480s-amd Optimized Cloud (AMD) - 2 vCPUs - 16 GB RAM
voc-g-24c-96gb-480s-amd Optimized Cloud (AMD) - 24 vCPUs - 96 GB RAM
voc-c-16c-32gb-500s-amd Optimized Cloud (AMD) - 16 vCPUs - 32 GB RAM

Cloud vendor instance regions

Amazon Web Services

Key Description
us-east-1 US East (Northern Virginia)
us-east-2 US East (Ohio)
ap-south-1 Asia Pacific (Mumbai)
eu-west-3 Europe (Paris)
eu-west-2 Europe (London)
eu-west-1 Europe (Dublin, Ireland)
eu-north-1 Europe (Stockholm)
ap-northeast-1 Asia Pacific (Tokyo)
ap-northeast-2 Asia Pacific (Seoul)
sa-east-1 South America (Sao Paulo, Brazil)
ca-central-1 Canada (Central)
ap-southeast-1 Asia Pacific (Singapore)
ap-southeast-2 Asia Pacific (Sydney)
eu-central-1 Europe (Frankfurt, Germany)
us-west-1 US West (Northern California)
us-west-2 US West (Oregon)

Azure

Key Description
australiacentral Australia Central
australiacentral2 Australia Central 2
australiaeast Australia East
australiasoutheast Australia Southeast
brazilsouth Brazil South
canadacentral Canada Central
canadaeast Canada East
centralindia Central India
centralus Central US
eastasia East Asia
eastus East US
eastus2 East US 2
francecentral France Central
francesouth France South
germanynorth Germany North
germanywestcentral Germany West Central
japaneast Japan East
japanwest Japan West
koreacentral Korea Central
koreasouth Korea South
northcentralus North Central US
northeurope North Europe
norwayeast Norway East
norwaywest Norway West
southafricanorth South Africa North
southafricawest South Africa West
southcentralus South Central US
southindia South India
southeastasia Southeast Asia
switzerlandnorth Switzerland North
switzerlandwest Switzerland West
uaecentral UAE Central
uaenorth UAE North
uksouth UK South
ukwest UK West
westcentralus West Central US
westeurope West Europe
westindia West India
westus West US
westus2 West US 2

CloudA Cloud

Key Description
default default

DigitalOcean

Key Description
ams2 Amsterdam 2, Netherlands
ams3 Amsterdam 3, Netherlands
blr1 Bangalore, IN
fra1 Frankfurt, Germany
lon1 London, UK
nyc1 New York, US
nyc2 New York 2, US
nyc3 New York 3, US
sfo1 San Francisco, US
sfo2 San Francisco 2, US
sfo3 San Francisco 3, US
sgp1 Singapore
tor1 Toronto, CA

Google Compute Engine

Key Description
asia-east1-a asia-east1-a
asia-east1-b asia-east1-b
asia-east1-c asia-east1-c
asia-east2-a asia-east2-a
asia-east2-b asia-east2-b
asia-east2-c asia-east2-c
asia-northeast1-a asia-northeast1-a
asia-northeast1-b asia-northeast1-b
asia-northeast1-c asia-northeast1-c
asia-northeast2-a asia-northeast2-a
asia-northeast2-b asia-northeast2-b
asia-northeast2-c asia-northeast2-c
asia-northeast3-a asia-northeast3-a
asia-northeast3-b asia-northeast3-b
asia-northeast3-c asia-northeast3-c
asia-south1-a asia-south1-a
asia-south1-b asia-south1-b
asia-south1-c asia-south1-c
asia-southeast1-a asia-southeast1-a
asia-southeast1-b asia-southeast1-b
asia-southeast1-c asia-southeast1-c
asia-southeast2-a asia-southeast2-a
asia-southeast2-b asia-southeast2-b
asia-southeast2-c asia-southeast2-c
australia-southeast1-a australia-southeast1-a
australia-southeast1-b australia-southeast1-b
australia-southeast1-c australia-southeast1-c
europe-north1-a europe-north1-a
europe-north1-b europe-north1-b
europe-north1-c europe-north1-c
europe-west1-b europe-west1-b
europe-west1-c europe-west1-c
europe-west1-d europe-west1-d
europe-west2-a europe-west2-a
europe-west2-b europe-west2-b
europe-west2-c europe-west2-c
europe-west3-a europe-west3-a
europe-west3-b europe-west3-b
europe-west3-c europe-west3-c
europe-west4-a europe-west4-a
europe-west4-b europe-west4-b
europe-west4-c europe-west4-c
europe-west6-a europe-west6-a
europe-west6-b europe-west6-b
europe-west6-c europe-west6-c
northamerica-northeast1-a northamerica-northeast1-a
northamerica-northeast1-b northamerica-northeast1-b
northamerica-northeast1-c northamerica-northeast1-c
southamerica-east1-a southamerica-east1-a
southamerica-east1-b southamerica-east1-b
southamerica-east1-c southamerica-east1-c
us-central1-a us-central1-a
us-central1-b us-central1-b
us-central1-c us-central1-c
us-central1-f us-central1-f
us-east1-b us-east1-b
us-east1-c us-east1-c
us-east1-d us-east1-d
us-east4-a us-east4-a
us-east4-b us-east4-b
us-east4-c us-east4-c
us-west1-a us-west1-a
us-west1-b us-west1-b
us-west1-c us-west1-c
us-west2-a us-west2-a
us-west2-b us-west2-b
us-west2-c us-west2-c
us-west3-a us-west3-a
us-west3-b us-west3-b
us-west3-c us-west3-c
us-west4-a us-west4-a
us-west4-b us-west4-b
us-west4-c us-west4-c

Hetzner

Key Description
1 Falkenstein DC Park 1
2 Nuremberg DC Park 1
3 Helsinki DC Park 1

Linode

Key Description
Atlanta, GA, USA Atlanta, GA, USA
Dallas, TX, USA Dallas, TX, USA
Frankfurt, DE Frankfurt, DE
Fremont, CA, USA Fremont, CA, USA
London, England, UK London, England, UK
Newark, NJ, USA Newark, NJ, USA
Singapore, SG Singapore, SG
Tokyo 2, JP Tokyo 2, JP
Toronto, ON Toronto, ON

Maxihost

Key Description
ch3 CH3, Chicago, US
dal2 DAL2, Dallas, US
la2 LA2, Los Angeles, US
mi1 MI1, Miami, US
ny2 NY2, New York, US
san SAN, Santiago, CL
mh1 MH1, São Paulo, BR
syd SYD, Ultimo, AU

OVH

Key Description
WAW1 Warsaw, PL
UK1 London, UK
BHS5 Beauharnois, CA
DE1 Frankfurt, DE
GRA7 Gravelines, FR
SBG5 Strasbourg, DE
US-EAST-VA-1 Virginia, USA

Packet

Key Description
ams1 Amsterdam, NL
atl1 Atlanta, GA
dfw1 Dallas, TX 1
dfw2 Dallas, TX 2
ewr1 Parsippany, NJ
fra2 Frankfurt 2, DE
hkg1 Hong Kong 1, HK
iad1 Ashburn, VA
lax1 Los Angeles, CA
mrs1 Marseille, France
nrt1 Tokyo, JP
ord1 Chicago, IL
sea1 Seattle, WA
sin1 Singapore
sjc1 Sunnyvale, CA
syd1 Sydney, Australia
yyz1 Toronto, ON, CA

Rackspace

Key Description
chicago Chicago
dallas Dallas
hong_kong Hong Kong
london London
northern_virginia Northern Virginia
sydney Sydney

Vultr

Key Description
ams Amsterdam, NL
atl Atlanta, US
blr Bangalore, IN
ord Chicago, US
dfw Dallas, US
del Delhi NCR, IN
fra Frankfurt, DE
hnl Honolulu, US
jnb Johannesburg, ZA
lhr London, GB
lax Los Angeles, US
mad Madrid, ES
mel Melbourne, AU
mex Mexico City, MX
mia Miami, US
bom Mumbai, IN
ewr New Jersey, US
itm Osaka, JP
cdg Paris, FR
scl Santiago, CL
sea Seattle, US
icn Seoul, KR
sjc Silicon Valley, US
sgp Singapore, SG
sto Stockholm, SE
syd Sydney, AU
nrt Tokyo, JP
yto Toronto, CA
waw Warsaw, PL

Stacks

Methods

Using the Stacks endpoint, you can submit requests using the following methods.

  • List all stacks
  • View a stack
  • Create a new stack (Docker only)
  • List all stack actions
  • View a stack action
  • Perform a stack action
  • Add an SSL certificate to a stack

Stack List

response = token.get("#{api_url}/stacks.json")

puts JSON.parse(response.body)['response']
GET /stacks HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": [
        {
            "uid": "5999b763474b0eafa5fafb64bff0ba80",
            "name": "Awesome App",
            "git": "http://github.com/cloud66-samples/awesome-app.git",
            "git_branch": "fig",
            "environment": "production",
            "cloud": "DigitalOcean",
            "fqdn": "awesome-app.dev.c66.me",
            "language": "ruby",
            "framework": "rails",
            "status": 1,
            "health": 3,
            "last_activity": "2014-08-14T01:46:53+00:00",
            "last_activity_iso": "2014-08-14T01:46:53+00:00",
            "maintenance_mode": false,
            "has_loadbalancer": false,
            "created_at": "2014-08-14 00:38:14 UTC",
            "updated_at": "2014-08-14 01:46:52 UTC",
            "deploy_directory": "/var/deploy/awesome_app",
            "cloud_status": "partial",
            "created_at_iso": "2014-08-14T00:38:14Z",
            "updated_at_iso": "2014-08-14T01:46:52Z",
            "redeploy_hook": "http://hooks.cloud66.com/stacks/redeploy/b806f1c3344eb3aa2a024b23254b75b3/6d677352a6b2eefec6e345ee2b491521"
        }
    ],
    "count": 1,
    "pagination": {
        "previous": null,
        "next": null,
        "current": 1,
        "per_page": 30,
        "count": 1,
        "pages": 1
    }
}

Retrieves a paged list of all the stack objects the user can access.

HTTP Request

GET /stacks

The stack object

Property Data type Description Sample value
uid string The unique identifier of the stack. 5999b763474b0eafa5fafb64bff0ba80
name string The name defined for the stack. My Awesome App
git string The git repository URL associated with the stack. http://github.com/mysamples/awesome-app.git
git_branch string The git repository branch associated with the stack. fig
environment string The environment associated with the stack. production
cloud string The cloud provider associated with the stack. DigitalOcean
fqdn string The fully qualified namespace of the stack. awesome-app.dev.c66.me
language string The programming language of the stack. ruby
framework string The framework used for the stack. rails
status int The current status code for the stack. 1
health int The current health code for the stack. 3
last_activity datetime The date and time the last action was performed for the stack, in UTC datetime. 2014-08-14T01:46:53+00:00
last_activity_iso datetime The date and time the last action was performed for the stack, in UTC datetime 2014-08-14T01:46:53+00:00
maintenance mode bool Whether the stack currently has maintenance mode enabled. false
has_loadbalancer bool Whether the stack has an associated load balancer add-in. false
created_at datetime The date and time the stack was created, in iso8601 format 2014-09-01T19:08:05Z
updated_at datetime The date and time the stack was last modified, in iso8601 format 2014-09-01T19:18:05Z
deploy_directory string The target directory for stack deployment. /var/deploy/awesome_app
cloud_status string The current cloud provider status associated with the stack. partial
redeploy_hook string If applicable, the deploy hook URL associated with the stack. http://hooks.cloud66.com/stacks/redeploy/ b806f1c3344eb3aa2a024b23254b75b3/6d677352a6b2eefec6e345ee2b491521

Stack

id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.get("#{api_url}/stacks/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
"response":
  {
    "uid": "5999b763474b0eafa5fafb64bff0ba80",
      "name": "Awesome App",
      "git": "http://github.com/cloud66-samples/awesome-app.git",
      "git_branch": "fig",
      "environment": "production",
      "cloud": "DigitalOcean",
      "fqdn": "awesome-app.dev.c66.me",
      "language": "ruby",
      "framework": "rails",
      "status": 1,
      "health": 3,
      "last_activity": "2014-08-14T01:46:53+00:00",
      "last_activity_iso": "2014-08-14T01:46:53+00:00",
      "maintenance_mode": false,
      "has_loadbalancer": false,
      "created_at": "2014-08-14 00:38:14 UTC",
      "updated_at": "2014-08-14 01:46:52 UTC",
      "deploy_directory": "/var/deploy/awesome_app",
      "cloud_status": "partial",
      "created_at_iso": "2014-08-14T00:38:14Z",
      "updated_at_iso": "2014-08-14T01:46:52Z",
      "redeploy_hook": "http://hooks.cloud66.com/stacks/redeploy/b806f1c3344eb3aa2a024b23254b75b3/6d677352a6b2eefec6e345ee2b491521"
  }
}

Retrieve the details of the stack specified in the request.

HTTP Request

GET /stacks/{id}

Query parameters

Parameter Presence Data type Description Sample value
id required string Unique identifier of the stack 5999b763474b0eafa5fafb64bff0ba80

Stack status values

Status Code Description
STK_QUEUED 0 Pending analysis
STK_SUCCESS 1 Deployed successfully
STK_FAILED 2 Deployment failed
STK_ANALYSING 3 Analyzing
STK_ANALYSED 4 Analyzed
STK_QUEUED_FOR_DEPLOYING 5 Queued for deployment
STK_DEPLOYING 6 Deploying
STK_TERMINAL_FAILURE 7 Unable to analyze

Stack health status values

Status Code Description
HLT_UNKNOWN 0 Unknown
HLT_BUILDING 1 Building
HLT_PARTIAL 2 Impaired
HLT_OK 3 Healthy
HLT_BROKEN 4 Failed

Stack Create

service_file = File.read('path/to/service.yml')
manifest_file = File.read('path/to/manifest.yml')

#Using manifest.yml
response = token.post("#{api_url}/stacks.json", {body: {:name => 'new_stack_name', :environment => 'production', :service_yaml => service_file, :manifest_yaml => manifest_file}})

#Using separate parameters
response = token.post("#{api_url}/stacks.json", {body: {:name => 'new_stack_name', :environment => 'production', :service_yaml => service_file, :cloud => 'digitalocean', :region => 'ams1', :size => '1gb', :build_type => 'single'}})

puts JSON.parse(response.body)['response']
POST /stacks HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{ "response":
    {
        "id":10,
        "user":"test@cloud66.com",
        "resource_type":"stack",
        "action":"stack_create",
        "resource_id":"283",
        "started_via":"api",
        "started_at":"2015-09-01T19:08:05Z",
        "finished_at":null,
        "finished_success":null,
        "finished_message":null
    }
}

Create and build a new docker stack. Either manifest definition, or cloud, region, size and build_type must be passed as params.

HTTP Request

POST /stacks

Query parameters

Parameter Presence Data type Description Sample value
name required string New stack name new_stack_name
environment required string New stack environment production
service_yaml required string The services definition of the new docker stack service_yaml_serialised
manifest_yaml optional string The manifest definition of the new docker stack manifest_yaml_serialised
cloud optional string Cloud provider to create servers in aws
key_name optional string Name of the cloud provider key (Default or first available key for the cloud if not specified) my_key
region optional string Region within the cloud to create servers in us-east-1
size optional string Size of the server t1.micro
build_type optional string Deploy all services to single or multi servers multi

Stack Action list

id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.get("#{api_url}/stacks/#{id}/actions.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id}/actions HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
        [
    {
      "id": 6566418,
      "user": "person@company.com",
      "resource_type": "stack",
      "action": "application_deployment",
      "resource_id": "84195",
      "started_via": "api",
      "started_at": "2023-10-11T11:43:57Z",
      "finished_at": "2023-10-11T11:47:42Z",
      "finished_success": true,
      "finished_message": "Completed successfully",
      "finished_result": {},
      "metadata": {
                "user_reference": "my-useful-id" 
                }
    }
  ],
  "count":1,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":1,
      "pages":1
    }
}

Retrieve a paged list of all asynchronous actions performed for the stack specified in the request. You can filter actions by your own metadata using user_reference (note: metadata needs to be added to the action when it is invoked to be available here).

HTTP Request

GET /stacks/{id}/actions

Query parameters

Parameter Presence Data type Description Sample value
id required string Unique identifier of the stack 5999b763474b0eafa5fafb64bff0ba80

The stack action object

Property Data type Description Sample value
id int The numeric identifier of the stack action. Identifiers increment by one for each performed action. 10
user_reference string (up to 255 chars) Returns actions where the metadata matches the query. useful-reference-123
user string The email address of the user who performed the stack action. hello@cloud66.com
resource_type string The resource for which the action was performed, which is stack in this case. stack
action string The action that was performed for the stack. restart
resource_id int The unique ID of the resource 283
started_via string The process that initiated the action, which is the UI, API, or command line. api
started_at datetime The date and time the action was initiated, in UTC datetime. 2014-09-01T19:08:05Z
finished_at datetime The date and time the action was completed, in UTC datetime. 2014-09-01T19:08:09Z
finished_success bool Whether the action completed successfully. true
finished_message string If applicable, the system message associated with the completed action. null

Stack Action

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
id = '202161'
response = token.get("#{api_url}/stacks/#{stack_id}/actions/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/actions/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

    {
    "id": 6566418,
    "user": "person@company.com",
    "resource_type": "stack",
    "action": "application_deployment",
    "resource_id": "84195",
    "started_via": "api",
    "started_at": "2023-10-11T11:43:57Z",
    "finished_at": "2023-10-11T11:47:42Z",
    "finished_success": true,
    "finished_message": "Completed successfully",
    "finished_result": {},
    "metadata": {
        "user_reference": "my-useful-id" 
                }
    }

Retrieve the details of an asynchronous action performed for the the stack specified in the request based on the supplied action ID.

HTTP Request

GET /stacks/{stack_id}/actions/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string Unique identifier of the stack 5999b763474b0eafa5fafb64bff0ba80
id required integer Identifier of the asynchronous action 4153

Run Stack action

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.post("#{api_url}/stacks/#{stack_id}/actions.json", {body: {:command => 'clear_caches'}})

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/actions HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":10,
      "user":"test@cloud66.com",
      "resource_type":"stack",
      "action":"clear_caches",
      "resource_id":"283",
      "started_via":"api",
      "started_at":"2014-09-01T19:08:05Z",
      "finished_at":null,
      "finished_success":null,
      "finished_message":null
    }
}

Perform an asynchronous action for the stack specified in the request. You can use this method to restart the stack, clear the stack's cache, or enable maintenance mode.

HTTP Request

POST /stacks/{stack_id}/actions

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string Unique identifier of the stack 5999b763474b0eafa5fafb64bff0ba80
command required string The action to perform for the stack. Valid values are clear_caches, maintenance_mode, and restart. restart
Command Comments Extra Parameters
container_restart Restarts a particular container on the given stack container:5999b763474b0eafa5fafb64bff0ba80
disable_replication_slave_db Disable replication to the specified slave database server server:server-name
server_group: valid values all, mysql, postgresql, redis, mongodb
maintenance_mode Enable to Disable maintenance mode for a stack. value:1 for enable or 0 for disable
process_pause Pauses the specified process. process-name
process_restart Restarts the specified process. process-name
process_resume Resumes the specified process. process-name
promote_slave_db Promote the specified slave database server to a standalone master server:server-name
server_group: valid values all, mysql, postgresql, redis, mongodb
restart Restarts all stack components (nginx, db, etc.) None
resync_slave_db Re-sync the specified slave database server with its master database server server:server-name
server_group: valid values all, mysql, postgresql, redis, mongodb
service_pause Pauses all the containers from the given service service_name:api
server_id_filter:474b30a8fea888df8468fc145ea49bac (optional)
service_restart Restarts all the containers from the given service service_name:web
server_id_filter:f8468fc145ea49bac474b30a8fea888d (optional)
service_resume Pauses all the containers from the given service service_name:api
server_id_filter:474b30a8fea888df8468fc145ea49bac (optional)

Reboot the Stack

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.post("#{api_url}/stacks/#{stack_id}/reboot_servers.json")

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/reboot_servers HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":10,
      "user":"test@cloud66.com",
      "resource_type":"stack",
      "action":"stack_reboot",
      "resource_id":"283",
      "started_via":"api",
      "started_at":"2016-01-01T19:08:05Z",
      "finished_at":null,
      "finished_success":null,
      "finished_message":null
    }
}

You can use this method to reboot the stack or speific server group of a stack.

HTTP Request

POST /stacks/{stack_id}/reboot_servers

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string Unique identifier of the stack 5999b763474b0eafa5fafb64bff0ba80
strategy required string parallel or serial parallel
group optional string all or web/db/redis etc (default is web) mysql

SSL certificate

stack_id = 'JReEhI8LboQjFcI4hMmbgLqvPbMkgT7T'
response = token.post("#{api_url}/stacks/#{stack_id}/ssl_certificates.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/ssl_certificates HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": [
        {
            "uuid": "ssl-9ad095613rrr4e0b8f718302bab8709e",
            "name": "pp-ticker-prod-cllaz",
            "server_group_id": null,
            "server_names": "www.fyp111.co",
            "sha256_fingerprint": "481f22f00e117e209dbde4c2ae3831401109fc824784943e39a194a3adb64082",
            "ca_name": "Let's Encrypt",
            "type": "lets_encrypt",
            "wildcard": false,
            "dns_provider_uuid": null,
            "ssl_termination": true,
            "has_intermediate_cert": true,
            "status": 3,
            "created_at": "2023-01-26T10:23:34Z",
            "updated_at": "2023-01-26T10:26:29Z",
            "expires_at": "2023-04-26T09:24:32Z",
            "certificate": null,
            "key": null,
            "intermediate_certificate": null
        }
    ],
    "count": 1,
    "pagination": {
        "previous": null,
        "next": null,
        "current": 1,
        "per_page": 30,
        "count": 1,
        "pages": 1
    }
}

You can use this method to query, add, delete or update SSL certificates on a stack.

HTTP Request

GET /stacks/:stack_id/ssl_certificates

POST /stacks/:stack_id/ssl_certificates

GET /stacks/:stack_id/ssl_certificates/:id

PATCH /stacks/:stack_id/ssl_certificates/:id

PUT /stacks/:stack_id/ssl_certificates/:id

DELETE /stacks/:stack_id/ssl_certificates/:id

POST, PATCH and PUT should use the following object format:

{"ssl_certificate":{"server_names":"mywebsite.com","ssl_termination":true,"type":"lets_encrypt","wildcard":true,"dns_provider_uuid":"dp-fbe3dd78cdc600b187b38c4d4b6b016b"}}

Query parameters

Parameter Presence Data type Description Sample value
type required string Type of certificate (manual or lets_encrypt) lets_encrypt
ssl_termination required bool Whether SSL certificate is terminated on the load balancer or not true
server_names required string comma separated list of domains hello.com,world.co.uk
wildcard optional bool Whether the certificate must support wildcarded domain names - only applies to type lets_encrypt false
dns_provider_uuid required for wildcard certs string DNS provider to use for the Let's Encrypt DNS challenge dp-fbe3dd78cdc...
certificate required for manual certs string The certificate address -----BEGIN CERTIFICATE-----
entire cert hash
-----END CERTIFICATE-----
key required for manual certs string The certificate key -----BEGIN RSA PRIVATE KEY-----
entire key hash
-----END RSA PRIVATE KEY-----
intermediate_certificate optional string The intermediate certificate chain -----BEGIN CERTIFICATE-----
entire cert hash
-----END CERTIFICATE-----

DNS providers

response = token.get("#{api_url}/dns_providers.json")

puts JSON.parse(response.body)['response']
GET /stacks/dns_providers HTTP/1.1

{
    "response": [
        {
            "uuid": "dp-fbe3d478cdc610b187b38c1d2b6b016b",
            "type": "Cloudflare",
            "key": "My Cloudflare",
            "display_name": "Cloudflare (My Cloudflare)",
            "created_at": "2023-01-25T14:08:28Z",
            "updated_at": "2023-01-25T14:08:28Z"
        }
    ],
    "count": 1,
    "pagination": {
        "previous": null,
        "next": null,
        "current": 1,
        "per_page": 30,
        "count": 1,
        "pages": 1
    }
}

You can use this method to query, add, delete or update SSL certificates on a stack.

Processes

Processes list

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
response = token.get("#{api_url}/stacks/#{stack_id}/processes.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id}/processes HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":[
    {
      "md5":"5999b763474b0eafa5fafb64bff0ba80",
      "name":"worker",
      "command":"bundle exec rake jobs:work",
      "servers":{"server_name":1}
    },
    {
      "md5":"1230fd91f8c9e4e56c1b14dd0391702",
      "name":"scheduler",
      "command":"bundle exec rake jobs:schedule",
      "servers":{"server_name":1}
    }
  ],
  "count":2,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":2,
      "pages":1
    }
}

Get list of all processes of stack.

HTTP Request

GET /stacks/{id}/processes

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string stack UID 5999b763474b0eafa5fafb64bff0ba80
server_uid optional integer server UID e63e859d5ab72b0bcf14321f0ffb013d

Process Single one

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
id = 4153
response = token.get("#{api_url}/stacks/#{stack_id}/processes.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/processes/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":[
    {
      "md5":"5999b763474b0eafa5fafb64bff0ba80",
      "name":"worker",
      "command":"bundle exec rake jobs:work",
      "servers":{"server_name1":1}
    },
    {
      "md5":"1230fd91f8c9e4e56c1b14dd0391702",
      "name":"scheduler",
      "command":"bundle exec rake jobs:schedule",
      "servers":{"server_name1":3}
    }
  ],
  "count":2,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":2,
      "pages":1
    }
}

Get information about a single process.

HTTP Request

GET /stacks/{stack_id}/processes/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required string Process Name worker
server_uid optional integer Server ID e63e859d5ab72b0bcf14321f0ffb013d

Scale a Process

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
response = token.post("#{api_url}/stacks/#{stack_id}/processes.json")

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/processes HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Accept: application/json
Content-Type: application/json

{
  "response": [
    {
      "id":10,
      "user":"test@cloud66.com",
      "resource_type":"stack",
      "action":"Process_scale",
      "resource_id":"283",
      "started_via":"api",
      "started_at":"2016-01-01T19:08:05Z",
      "finished_at":null,
      "finished_success":null,
      "finished_message":null
    }
  ]
}

Scale up a process.

HTTP Request

POST /stacks/{stack_id}/processes

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
process_name required string process name scheduler
server_count required string hash of {server_uid:count} e63e859d5ab72b0bcf14321f0ffb013d:4

Deployments

Deployment list

id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.get("#{api_url}/stacks/#{id}/deployments.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id}/deployments HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":[
    {
      "id":107,
      "triggered_by":"test@cloud66.com",
      "triggered_via":
        {
          "code":0,
          "meaning":"web"
        },
      "started_at":"2014-08-29T17:46:16Z",
      "finished_at":"2014-08-29T17:58:23Z",
      "outcome":
        {
          "code":1,
          "meaning":"success"
        },
      "git_hash":"5675fcd8f9e6dc534ecf1410c0661c066097e310",
      "deploy_session":"OhBHNzkXSl",
      "deploy_type":
        {
          "code":0,
          "meaning":"build"
        },
      "is_head":true,
      "is_live":true,
      "reverted":null,
      "reverted_by":null,
      "reverted_at":null,
      "is_deploying":false,
      "commit_url":"https://github.com/cloud66-samples/rails-test/commit/5675fcd8f9e6dc534ecf1410c0661c066097e310"
    }
  ],
  "count":1,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":1,
      "pages":1
    }
}

Get list of all deployments of a stack

HTTP Request

GET /stacks/{id}/deployments

Query parameters

Parameter Presence Data type Description Sample value
id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80

Deployment

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
id = '3608'
response = token.get("#{api_url}/stacks/#{stack_id}/deployments/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/deployments/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":107,
      "triggered_by":"test@cloud66.com",
      "triggered_via":
        {
          "code":0,
          "meaning":"web"
        },
      "started_at":"2014-08-29T17:46:16Z",
      "finished_at":"2014-08-29T17:58:23Z",
      "outcome":
        {
          "code":1,
          "meaning":"success"
        },
      "git_hash":"5675fcd8f9e6dc534ecf1410c0661c066097e310",
      "deploy_session":"OhBHNzkXSl",
      "deploy_type":
        {
          "code":0,
          "meaning":"build"
        },
      "is_head":true,
      "is_live":true,
      "reverted":null,
      "reverted_by":null,
      "reverted_at":null,
      "is_deploying":false,
      "commit_url":"https://github.com/cloud66-samples/rails-test/commit/5675fcd8f9e6dc534ecf1410c0661c066097e310"
    }
}

Get information of a single deployment

HTTP Request

GET /stacks/{stack_id}/deployments/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required integer The deployment ID 107

Redeploy

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.post("#{api_url}/stacks/#{stack_id}/deployments.json")

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/deployments HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "ok":true,
      "message":"Stack queued for redeployment",
      "async_action_id":40,
      "queued": true
    }
}

Redeploy a stack

HTTP Request

POST /stacks/{stack_id}/deployments

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
git_ref optional string Git reference (branch, tag or hash). Non-docker only. a_git_tag_or_hash
services optional string Deploy only the service(s) & image(s) specified (Docker only). service1:image_tagA,service2:image_tagB
deployment_profile optional string Deploy using a deployment profile my-deploy-profile-name
user_reference optional string (up to 255 chars) Adds a value to the metadata field of the the Stack Action (to allow you to match actions against your own identifiers) useful-reference-123

Cancel deployment

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
id = '3649'
response = token.delete("#{api_url}/stacks/#{stack_id}/deployments/#{id}.json")

puts JSON.parse(response.body)['response']
DELETE /stacks/{stack_id}/deployments/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "ok":true,
      "message":"Cancelling deployment"
    }
}

Cancel a live stack deployment

HTTP Request

DELETE /stacks/{stack_id}/deployments/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required integer The deployment ID 112

Services

Services list

id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.get("#{api_url}/stacks/#{id}/services.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id}/services HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": [
    {
      "name": "web",
      "containers": [
        {
          "uid": "1339d2dfa5a86dfce497f8f2e1bb29492f246288c722d11c8e6fc9348bfeece6",
          "server_uid": "edfbd7a9b97e999ebf17984282d4b457",
          "server_name": "Cormorant",
          "service_name": "web",
          "image": "quay.io/cloud66/sample-rails",
          "port_list": "[\"5128:3000\"]",
          "command": "rackup -p 3000",
          "started_at": "2014-09-30T09:59:45Z",
          "web_ports": "80:443",
          "created_at": "2014-09-30T09:59:45Z",
          "updated_at": "2014-09-30T09:59:48Z"
        }
      ]
    }
  ],
  "count": 1,
  "pagination": {
    "previous": null,
    "next": null,
    "current": 1,
    "per_page": 30,
    "count": 1,
    "pages": 1
  }
}

Get a list of all services of the stack

HTTP Request

GET /stacks/{id}/services

Query parameters

Parameter Presence Data type Description Sample value
id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
server_uid optional string Server UID 1239b763474b0eafa5fafb64bff0ba80

Service show

stack_id = 'ec28beaa0e324c21ab2f9c5a153189a2'
id = 'web'
response = token.get("#{api_url}/stacks/#{stack_id}/services/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/services/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": {
    "name": "web",
    "containers": [
      {
        "uid": "1339d233a5a86dfce497f8f2e1bb29492f246288c722d11c8e6fc9348bfeece6",
        "server_uid": "1239b763474b0eafa5fafb64bff0ba80",
        "server_name": "Cormorant",
        "service_name": "web",
        "image": "quay.io/cloud66/sample-rails",
        "port_list": "[\"5128:3000\"]",
        "command": "rackup -p 3000",
        "started_at": "2014-09-30T09:59:45Z",
        "web_ports": "80:443",
        "created_at": "2014-09-30T09:59:45Z",
        "updated_at": "2014-09-30T09:59:48Z"
      }
    ]
  }
}

Get information of a service of the stack

HTTP Request

GET /stacks/{stack_id}/services/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required string The service name web
server_uid optional string Server UID 1239b763474b0eafa5fafb64bff0ba80

Service scale

stack_id = 'ec28beaa0e324c21ab2f9c5a153189a2'
id = 'web'
response = token.post("#{api_url}/stacks/#{stack_id}/services.json", {body: {:service_name => id}})

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/services HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": {
    "id": 1234,
    "user": "theuser@yourdomain.com",
    "resource_type": "stack",
    "action": "service_scale",
    "resource_id": "15633",
    "started_via": "api",
    "started_at": "2014-09-30T11:36:58Z",
    "finished_at": null,
    "finished_success": null,
    "finished_message": null
  }
}

Scale the given service over the stack

HTTP Request

POST /stacks/{stack_id}/services

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
service_name required string The service name web
server_count optional string A hash of server uid to count of containers desired on that server {"123123cfcb7d3d2b54614b19e2a6c673":2}
server_group_count optional string A hash of server_group to count of containers across the servers of that group {"web":4}

Service stop

stack_id = 'ec28beaa0e324c21ab2f9c5a153189a2'
id = 'web'
response = token.delete("#{api_url}/stacks/#{stack_id}/services/#{id}.json")

puts JSON.parse(response.body)['response']
DELETE /stacks/{stack_id}/services/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": {
    "id": 1234,
    "user": "theuser@yourdomain.com",
    "resource_type": "stack",
    "action": "service_stop",
    "resource_id": "15633",
    "started_via": "api",
    "started_at": "2014-09-30T11:36:58Z",
    "finished_at": null,
    "finished_success": null,
    "finished_message": null
  }
}

Stop all of the given service on the stack (across all servers, unless server_uid is supplied)

HTTP Request

DELETE /stacks/{stack_id}/services/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required string The service name web
server_uid optional string Server UID 1239b763474b0eafa5fafb64bff0ba80

Containers

Containers list

id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.get("#{api_url}/stacks/#{id}/containers.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id}/containers HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
   "response":[
      {
         "uid":"cba44fa6b6acf57fb0ef6c2ce385f6a129867df544dae7181d2410e9f9cc32bc",
         "server_uid":"c6014897b8c8e9f2fc204a3a9efdae05",
         "server_name":"Gazelle",
         "service_name":"web",
         "image":"quay.io/cloud66/sample-rails",
         "command":"bundle exec rackup -p 3000",
         "started_at":"2015-02-10T17:41:31Z",
         "ports":[
            {
               "container":3000,
               "http":80,
               "https":443
            }
         ],
         "private_ip":"25.0.0.2",
         "docker_ip":null,
         "health_state":1,
         "health_message":null,
         "health_source":"system",
         "capture_output":true,
         "restart_on_deploy":true,
         "created_at":"2015-02-10T17:41:37Z",
         "updated_at":"2015-02-17T14:40:17Z"
      }
   ],
   "count":1,
   "pagination":{
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":1,
      "pages":1
   }
}

Get a list of all the containers of the stack

HTTP Request

GET /stacks/{id}/containers

Query parameters

Parameter Presence Data type Description Sample value
id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
server_uid optional string Server UID c6014897b8c8e9f2fc204a3a9efdae05

Container show

stack_id = 'ec28beaa0e324c21ab2f9c5a153189a2'
id = 'cba44fa6b6acf57fb0ef6c2ce385f6a129867df544dae7181d2410e9f9cc32bc'
response = token.get("#{api_url}/stacks/#{stack_id}/containers/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/containers/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
   "response":{
      "uid":"cba44fa6b6acf57fb0ef6c2ce385f6a129867df544dae7181d2410e9f9cc32bc",
      "server_uid":"c6014897b8c8e9f2fc204a3a9efdae05",
      "server_name":"Gazelle",
      "service_name":"web",
      "image":"quay.io/cloud66/sample-rails",
      "command":"bundle exec rackup -p 3000",
      "started_at":"2015-02-10T17:41:31Z",
      "ports":[
         {
            "container":3000,
            "http":80,
            "https":443
         }
      ],
      "private_ip":"25.0.0.2",
      "docker_ip":"172.0.2.12",
      "health_state":1,
      "health_message":null,
      "health_source":"system",
      "capture_output":true,
      "restart_on_deploy":true,
      "created_at":"2015-02-10T17:41:37Z",
      "updated_at":"2015-02-17T14:40:17Z",
      "runtime":{
         "AppArmorProfile":"",
         "Args":[
            "bundle",
            "exec",
            "rackup",
            "-p",
            "3000"
         ],
         "Config":{
            "AttachStderr":true,
            "AttachStdin":false,
            "AttachStdout":true,
            "Cmd":[
               "bundle",
               "exec",
               "rackup",
               "-p",
               "3000"
            ],
            "CpuShares":0,
            "Cpuset":"",
            "Domainname":"",
            "Entrypoint":[
               "/etc/cloud66/tools/docker_network.sh"
            ],
            "Env":[
               "STACK_GIT_BRANCH=",
               "STACK_PATH=/var/deploy/lv_dev_service_download/web_head/current",
               "STACK_BASE=/var/deploy/lv_dev_service_download/web_head",
               "SECRET_KEY_BASE=f30c0e5da0cb4467e4cae0f315a664d023b1782f791e682dbe2dc100d3b010cd6b3d899c01138470c10892cf31732b7bb83a31b4907296ad985e8f55663629c1",
               "WEB_ADDRESS_INT=10.132.130.135",
               "WEB_ADDRESS_EXT=104.236.242.128",
               "WEB_ADDRESSES_INT=10.132.130.135",
               "WEB_ADDRESSES_EXT=104.236.242.128",
               "MYSQL_USERNAME=uacru9",
               "MYSQL_PASSWORD=FBfgULSTlfjruP3",
               "MYSQL_DATABASE=lv_dev_service_download_production",
               "MYSQL_ADDRESS_INT=10.132.130.135",
               "MYSQL_ADDRESS_EXT=104.236.242.128",
               "MYSQL_URL_INT=mysql://uacru9:FBfgULSTlfjruP3@10.132.130.135:3306/lv_dev_service_download_production",
               "MYSQL_URL_EXT=mysql://uacru9:FBfgULSTlfjruP3@104.236.242.128:3306/lv_dev_service_download_production",
               "MYSQL_SLAVE_ADDRESSES_INT=",
               "MYSQL_SLAVE_ADDRESSES_EXT=",
               "WEB_ADDRESS=10.132.130.135",
               "WEB_ADDRESSES=10.132.130.135",
               "MYSQL_ADDRESS=10.132.130.135",
               "MYSQL_URL=mysql://uacru9:FBfgULSTlfjruP3@10.132.130.135:3306/lv_dev_service_download_production",
               "MYSQL_SLAVE_ADDRESSES=",
               "SERVER_NAME=Gazelle",
               "PRIMARY=true",
               "CONTAINER_NOTIFY_URL=http://vic.local.cldblx.com/stacks/87bc318604208618a01817bf4442befb/servers/c6014897b8c8e9f2fc204a3a9efdae05/services/web/notification/4911055bcf0b5d7a31ebfbdff4043c31",
               "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
               "RUBY_MAJOR=2.1",
               "RUBY_VERSION=2.1.3"
            ],
            "ExposedPorts":{
               "3000/tcp":{

               }
            },
            "Hostname":"cba44fa6b6ac",
            "Image":"quay.io/cloud66/sample-rails",
            "MacAddress":"",
            "Memory":0,
            "MemorySwap":0,
            "NetworkDisabled":false,
            "OnBuild":null,
            "OpenStdin":false,
            "PortSpecs":null,
            "StdinOnce":false,
            "Tty":false,
            "User":"",
            "Volumes":null,
            "WorkingDir":"/usr/src/app"
         },
         "Created":"2015-02-10T17:41:36.988310784Z",
         "Driver":"aufs",
         "ExecDriver":"native-0.2",
         "HostConfig":{
            "Binds":[
               "/etc/cloud66/tools:/etc/cloud66/tools",
               "/var/log/containers:/usr/src/app/log",
               "/tmp:/tmp_host:rw"
            ],
            "CapAdd":null,
            "CapDrop":null,
            "ContainerIDFile":"",
            "Devices":[

            ],
            "Dns":[
               "172.17.42.1"
            ],
            "DnsSearch":null,
            "ExtraHosts":null,
            "IpcMode":"",
            "Links":null,
            "LxcConf":[

            ],
            "NetworkMode":"bridge",
            "PortBindings":{

            },
            "Privileged":false,
            "PublishAllPorts":false,
            "RestartPolicy":{
               "MaximumRetryCount":0,
               "Name":""
            },
            "SecurityOpt":null,
            "VolumesFrom":null
         },
         "HostnamePath":"/var/lib/docker/containers/cba44fa6b6acf57fb0ef6c2ce385f6a129867df544dae7181d2410e9f9cc32bc/hostname",
         "HostsPath":"/var/lib/docker/containers/cba44fa6b6acf57fb0ef6c2ce385f6a129867df544dae7181d2410e9f9cc32bc/hosts",
         "Id":"cba44fa6b6acf57fb0ef6c2ce385f6a129867df544dae7181d2410e9f9cc32bc",
         "Image":"f3443abc9c9e1595d1e039bf0c060f259d318e57910a80efee2e34895b10e749",
         "MountLabel":"",
         "Name":"/stoic_nobel",
         "NetworkSettings":{
            "Bridge":"docker0",
            "Gateway":"172.17.42.1",
            "IPAddress":"172.17.0.4",
            "IPPrefixLen":16,
            "MacAddress":"02:42:ac:11:00:04",
            "PortMapping":null,
            "Ports":{
               "3000/tcp":null
            }
         },
         "Path":"/etc/cloud66/tools/docker_network.sh",
         "ProcessLabel":"",
         "ResolvConfPath":"/var/lib/docker/containers/cba44fa6b6acf57fb0ef6c2ce385f6a129867df544dae7181d2410e9f9cc32bc/resolv.conf",
         "State":{
            "Error":"",
            "ExitCode":0,
            "FinishedAt":"0001-01-01T00:00:00Z",
            "OOMKilled":false,
            "Paused":false,
            "Pid":25739,
            "Restarting":false,
            "Running":true,
            "StartedAt":"2015-02-10T17:41:37.915288589Z"
         },
         "Volumes":{
            "/etc/cloud66/tools":"/etc/cloud66/tools",
            "/tmp_host":"/tmp",
            "/usr/src/app/log":"/var/log/containers"
         },
         "VolumesRW":{
            "/etc/cloud66/tools":true,
            "/tmp_host":true,
            "/usr/src/app/log":true
         }
      }
   }
}

Get information of a container of the stack (includes container runtime information)

HTTP Request

GET /stacks/{stack_id}/containers/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required string The container UID cba44fa6b6acf57fb0ef6c2ce385f6a129867df544dae7181d2410e9f9cc32bc

Container stop

stack_id = 'ec28beaa0e324c21ab2f9c5a153189a2'
id = 'cba44fa6b6acf57fb0ef6c2ce385f6a129867df544dae7181d2410e9f9cc32bc'
response = token.delete("#{api_url}/stacks/#{stack_id}/containers/#{id}.json")

puts JSON.parse(response.body)['response']
DELETE /stacks/{stack_id}/containers/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": {
    "id": 1234,
    "user": "theuser@yourdomain.com",
    "resource_type": "stack",
    "action": "container_stop",
    "resource_id": "15633",
    "started_via": "api",
    "started_at": "2014-09-30T11:36:58Z",
    "finished_at": null,
    "finished_success": null,
    "finished_message": null
  }
}

Stop the given container

HTTP Request

DELETE /stacks/{stack_id}/containers/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required string The container UID cba44fa6b6acf57fb0ef6c2ce385f6a129867df544dae7181d2410e9f9cc32bc

Docker Image Repositories

Docker Image Repository list

response = token.get("#{api_url}/image_repositories.json")

puts JSON.parse(response.body)['response']
GET /image_repositories HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": [
    {
      "id": 2,
      "url": "https://quay.io",
      "username": "cloud66",
      "email": "kickass@company.com",
      "created_at_iso": "2015-12-03T14:29:51Z",
      "updated_at_iso": "2015-12-03T14:29:51Z"
    },
    {
      "id": 3,
      "url": "https://index.dockerub.com",
      "username": "cloud66",
      "email": "eng@company.com",
      "created_at_iso": "2015-12-03T14:30:17Z",
      "updated_at_iso": "2015-12-03T14:30:17Z"
    }
  ],
  "count": 2,
  "pagination": {
    "previous": null,
    "next": null,
    "current": 1,
    "per_page": 30,
    "count": 2,
    "pages": 1
  }
}

Get list of all Docker image repositories for an account

HTTP Request

GET /image_repositories

Docker Image Repository

id = 3
response = token.get("#{api_url}/image_repositories/#{id}.json")

puts JSON.parse(response.body)['response']
GET /image_repositories/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": {
    "id": 3,
    "url": "https://index.dockerub.com",
    "username": "cloud66",
    "email": "eng@company.com",
    "created_at_iso": "2015-12-03T14:30:17Z",
    "updated_at_iso": "2015-12-03T14:30:17Z"
  }
}

Get information of a single Docker image repository

HTTP Request

GET /image_repositories/{id}

Query parameters

Parameter Presence Data type Description Sample value
id required integer The Docker image repository ID 3

Add Docker Image Repository

response = token.post("#{api_url}/image_repositories.json", {body: {:url => 'https://quay.io', :email => 'kickass@company.com', :username => 'Kickass', :password => 'supersecret'}})

puts JSON.parse(response.body)['response']
POST /image_repositories HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": {
    "id": 283,
    "url": "https://quay.io",
    "username": "Kickass",
    "email": "kickass@company.com",
    "created_at_iso": "2015-12-03T14:30:17Z",
    "updated_at_iso": "2015-12-03T14:30:17Z"
  }
}

HTTP Request

POST /image_repositories

Query parameters

Parameter Presence Data type Description Sample value
url required string Repository URL https://quay.io
email required string User email address kickass@company.com
username required string Username Kickass
password required string Password supersecret

Edit Docker Image Repository

id = 283
response = token.put("#{api_url}/image_repositories/#{id}.json", {body: {:url => 'https://quay.io', :email => 'kickass_squared@company.com', :username => 'KickassSquared', :password => 'supersecret'}})

puts JSON.parse(response.body)['response']
PUT /image_repositories/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": {
    "id": 283,
    "url": "https://quay.io",
    "username": "KickassSquared",
    "email": "kickass_squared@company.com",
    "created_at_iso": "2015-12-03T14:30:17Z",
    "updated_at_iso": "2015-12-03T14:30:17Z"
  }
}

HTTP Request

PUT /image_repositories/{id}

Query parameters

Parameter Presence Data type Description Sample value
id required integer The Docker image repository ID 283
url required string Repository URL https://quay.io
email required string User email address kickass_squared@company.com
username required string Username KickassSquared
password required string Password supersecret

Delete Docker Image Repository

id = 283
response = token.delete("#{api_url}/image_repositories/#{id}.json")

puts JSON.parse(response.body)['response']
DELETE /image_repositories/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": {
    "ok": true
  }
}

HTTP Request

DELETE /image_repositories/{id}

Query parameters

Parameter Presence Data type Description Sample value
id required integer The Docker image repository ID 283

Environment Variables

Environment Variable list

id = '5999b763474b0eafa5fafb64bff0ba80'
response = token.get("#{api_url}/#{id}/environments.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id}/environments HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": [
    {
      "id": 4152,
      "key": "STACK_GIT_BRANCH",
      "value": "master",
      "readonly": true,
      "created_at": "2014-08-29T17:21:25Z",
      "updated_at": "2014-08-29T17:21:25Z",
      "is_password":false,
      "is_generated": true,
              "history" : [{ "key" : 1, "value" : "develop", "created_at" : "2015-05-08T15:09:50Z", "updated_at" : "2015-05-08T15:09:50Z" }]
    },
    {
      "id": 4153,
      "key": "STACK_PATH",
      "value": "/var/deploy/test-elastic-1/web_head/current",
      "readonly": true,
      "created_at": "2014-08-29T17:21:25Z",
      "updated_at": "2014-08-29T17:21:25Z",
      "is_password": false,
      "is_generated": true,
              "history" : [{ "key" : 2, "value" : "/var/deploy/test-elastic-1/web_head/somethingold", "created_at" : "2015-05-08T14:01:50Z", "updated_at" : "2015-05-08T14:01:50Z" }]                    
    },
    {
      "id": 4167,
      "key": "POSTGRESQL_USERNAME",
      "value": "tja",
      "readonly": false,
      "created_at": "2014-08-29T17:21:26Z",
      "updated_at":"2014-08-29T17:21:26Z",
      "is_password":false,
      "is_generated":true,
              "history" : [{ "key" : 5, "value" : "xyz", "created_at" : "2015-05-08T14:01:50Z", "updated_at" : "2015-05-08T14:01:50Z" }, { "key" : 6, "value" : "123", "created_at" : "2015-05-08T14:02:50Z", "updated_at" : "2015-05-08T14:02:50Z" }]
    },
    {
      "id":4168,
      "key": "POSTGRESQL_PASSWORD",
      "value": "tjena",
      "readonly":false,
      "created_at":"2014-08-29T17:21:26Z",
      "updated_at":"2014-08-29T17:21:26Z",
      "is_password":true,
      "is_generated":true,
              "history" : []
    }
  ],
  "count":30,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":4,
      "pages":1
    }
}

Get list of all environment variables of stack

HTTP Request

GET /stacks/{id}/environments

Parameter Presence Data type Description Sample value
id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80

Environment Variable

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
id = 4153
response = token.get("#{api_url}/stacks/#{stack_id}/environments/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/environments/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id": 4153,
      "key":
      "STACK_PATH",
      "value":"/var/deploy/test-elastic-1/web_head/current",
      "readonly":true,
      "created_at":"2014-08-29T17:21:25Z",
      "updated_at":"2014-08-29T17:21:25Z",
      "is_password":false,
      "is_generated":true,
                "history" : [{ "key" : 5, "value" : "xyz", "created_at" : "2015-05-08T14:01:50Z", "updated_at" : "2015-05-08T14:01:50Z" }, { "key" : 6, "value" : "123", "created_at" : "2015-05-08T14:02:50Z", "updated_at" : "2015-05-08T14:02:50Z" }]
    }
}

Get information of a single environment variable

HTTP Request

GET /stacks/{stack_id}/environments/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required integer The environment variable ID 4153

Add Environment Variable

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.post("#{api_url}/stacks/#{stack_id}/environments.json", {body: {:key => 'MY_ENVIRONMENT_VALUE', :value => 'SOME_VALUE'}})

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/environments HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":5,
      "user":"test@cloud66.com",
      "resource_type": "stack",
      "action": "env-var-new",
      "resource_id": "280",
      "started_via":"api",
      "started_at": "2014-09-01T10:56:57Z",
      "finished_at": null,
      "finished_success":null,
      "finished_message":null
    }
}

Add a new environment variable

HTTP Request

POST /stacks/{stack_id}/environments

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
key required string The new environment variable key MY_ENVIRONMENT_VALUE
value required string The new environment variable new value SOME_VALUE

Update Environment Variable

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
key = 'POSTGRESQL_SLAVE_ADDRESSES'
response = token.put("#{api_url}/stacks/#{stack_id}/environments/#{key}.json", {body: {:value => '127.0.0.1'}})

puts JSON.parse(response.body)['response']
PUT /stacks/{stack_id}/environments/{key} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":3,
      "user": "test@cloud66.com",
      "resource_type": "stack",
      "action": "env-var-update",
      "resource_id":"280",
      "started_via":"api",
      "started_at": "2014-09-01T10:44:52Z",
      "finished_at": null,
      "finished_success":null,
      "finished_message":null
    }
}

Update value of an environment variable if it is not readonly

HTTP Request

PUT /stacks/{stack_id}/environments/{key}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
key required string The environment variable key POSTGRESQL_SLAVE_ADDRESSES
value required string The environment variable new value 127.0.0.1

Delete Environment Variable

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
key = 'MY_ENV_1'
response = token.delete("#{api_url}/stacks/#{stack_id}/environments/#{key}.json)

puts JSON.parse(response.body)['response']
DELETE /stacks/{stack_id}/environments/{key} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

Delete an environment variable if it is not readonly or generated by cloud66

HTTP Request

DELETE /stacks/{stack_id}/environments/{key}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
key required string The environment variable key MY_ENV_1

Firewall rules

Firewall rules list

id = '5999b763474b0eafa5fafb64bff0ba80'
response = token.get("#{api_url}/stacks/#{id}/firewalls.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id}/firewalls HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": [
    {
      "id": 5027,
      "from_ip": "0.0.0.0/0",
      "from_group_id": null,
      "from_server_id": null,
      "to_ip": null,
      "to_group_id": 128,
      "to_server_id": null,
      "protocol": "tcp",
      "port": 80,
      "rule_type": "dynamic",
      "comments":null,
      "created_at": "2014-08-29T17:58:23Z",
      "updated_at": "2014-08-29T17:58:23Z"
    },
    {
      "id":5028,
      "from_ip":"0.0.0.0/0",
      "from_group_id":null,
      "from_server_id":null,
      "to_ip":null,
      "to_group_id":128,
      "to_server_id":null,
      "protocol":"tcp",
      "port":443,"rule_type":
      "dynamic",
      "comments":null,
      "created_at":
      "2014-08-29T17:58:23Z",
      "updated_at":"2014-08-29T17:58:23Z"
    }
  ],
  "count":2,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":11,
      "pages":1
    }
}

Get list of all firewall rules of stack

HTTP Request

GET /stacks/{id}/firewalls

Query parameters

Parameter Presence Data type Description Sample value
id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80

Firewall rule

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
id = 4153
response = token.get("#{api_url}/stacks/#{stack_id}/firewalls/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/firewalls/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":5027,
      "from_ip":"0.0.0.0/0",
      "from_group_id":null,
      "from_server_id":null,
      "to_ip":null,
      "to_group_id":128,
      "to_server_id":null,
      "protocol":"tcp",
      "port":80,
      "rule_type":"dynamic",
      "comments":null,
      "created_at":"2014-08-29T17:58:23Z",
      "updated_at":"2014-08-29T17:58:23Z"
    }
}

Get information of a single firewall rule

HTTP Request

GET /stacks/{stack_id}/firewalls/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required integer The firewall rule ID 4153

Add Firewall rule

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.post("#{api_url}/stacks/#{stack_id}/firewalls.json", {body: {:from_ip => '123.123.123.123', :protocol => 1, :port => 80, :ttl => 20}})

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/firewalls HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":1851,
      "user":"test@cloud66.com",
      "resource_type":"stack",
      "action":"open_lease",
      "resource_id":"1268",
      "started_via":"api",
      "started_at":"2015-12-08T18:01:21Z",
      "finished_at":null,
      "finished_success":null,
      "finished_message":null
    }
}

One of the from/to params must be specified. If you specify ttl , from_ip can be set as AUTO, then caller IP will be set as from_ip

HTTP Request

POST /stacks/{stack_id}/firewalls

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
ttl optional integer Time that firewall rule will be expires in 20
from_ip optional string From IP value of rule 123.123.123.123
from_group_id optional integer You can specify a server group ID as From 19
from_server_id optional integer You can specify a server ID as From 193
to_ip optional string To IP value of rule 123.123.123.123
to_group_id optional integer You can specify a server group ID as To 19
to_server_id optional integer You can specify a server ID as To 1
protocol required integer Protocol of firewall rule . 1=TCP , 2=UDP , 3=ICMP 1
port required integer Port of firewall rule 80

Failover Groups

List Failover Groups

response = token.get("#{api_url}/clouds.json")

puts JSON.parse(response.body)['response']
GET /failover_groups HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": [
        {
            "uid": "fg-5be3dca6d3c4bf1eaddcb5b555d993bb",
            "address": "958-797-516.cloud66.net",
            "current_stack": 1,
            "primary_stack_uid": null,
            "primary_stack_name": null,
            "secondary_stack_uid": null,
            "secondary_stack_name": null,
            "busy_toggling": false,
            "readonly": false,
            "created_at": "2018-11-23T14:44:03Z",
            "updated_at": "2021-12-06T11:43:46Z"
        }
    ],
    "count": 1
}

Get a list of all the Failover Groups for the Cloud 66 account.

HTTP Request

GET / failover_groups

Create Failover Group

response = token.post("#{api_url}/failover_groups.json")

puts JSON.parse(response.body)['response']
POST /failover_groups HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "ok": true,
        "message": "Failover Group created"
    }
}

Create a new Failover Groups in a Cloud 66 account

HTTP Request

POST / failover_groups

Query parameters

Parameter Presence Data type Description Sample value
primary_stack_uid optional string The UID of the "primary" application in the Failover Group bf13586c5c8fbd6272f9ce78c74aea6c
secondary_stack_uid optional string The UID of the "secondary" application in the Failover Group bf13586c5c8fbd6272f9ce78c74aea6c
current_stack optional int Which application the Failover Group is currently pointed at. Valid options: 1 for the primary application or 2 for the secondary application. 1

Update Failover Group

response = token.put("#{api_url}/failover_groups.json")

puts JSON.parse(response.body)['response']
PUT /failover_groups HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "ok": true,
        "message": "Failover Group created"
    }
}

Update an existing Failover Groups in a Cloud 66 account. If primary_stack_uid and/or secondary_stack_uid are set to an empty string, the existing application(s) will be removed from the Failover Group. If either of these parameters are not specified the current values will not be changed.

HTTP Request

PUT / failover_groups

Query parameters

Parameter Presence Data type Description Sample value
primary_stack_uid optional string The UID of the application to set as the "primary" in the Failover Group. Will replace current value. bf13586c5c8fbd6272f9ce78c74aea6c
secondary_stack_uid optional string The UID of the application to set as the "secondary" in the Failover Group. Will replace current value. bf13586c5c8fbd6272f9ce78c74aea6c
current_stack optional int The application that the Failover Group should be pointed at. Valid options: 1 for the primary application or 2 for the secondary application. --

Delete Failover Group

{fg_id} = '5999b763474b0eafa5fafb64bff0ba80'
response = token.delete("#{api_url}/failover_groups/#{fg_id}.json")

puts JSON.parse(response.body)['response']
DELETE /failover_groups/fg-5be3dca6d3c4bf1eaddcb5b555d993bb HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "ok": true,
        "message": "Failover Group deleted"
    }
}

Delete an existing Failover Group from a Cloud 66 account.

HTTP Request

DELETE / failover_groups/{fg_id}

Query parameters

Parameter Presence Data type Description Sample value
fg_uid required string The UID of the Failover Group that will be deleted fg-5be3dca6d3c4bf1eaddcb5b555d993bb

Notifications

Notifications list

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
response = token.get("#{api_url}/stacks/#{stack_id}/notifications.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/notifications HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": [
        {
            "alert_name": "noticent_stack_provisioned_success",
            "subscriptions": [
                {
                    "channel": "email"
                }
            ]
        },
        {
            "alert_name": "noticent_stack_provisioned_failed",
            "subscriptions": [
                {
                    "channel": "email"
                }
            ]
        },
        {
            "alert_name": "noticent_stack_redeploy_success",
            "subscriptions": [
                {
                    "channel": "email"
                }
            ]
        },
        {
            "alert_name": "noticent_stack_redeploy_failed",
            "subscriptions": [
                {
                    "channel": "email"
                }
            ]
        },
        {
            "alert_name": "noticent_server_stopped",
            "subscriptions": [
                {
                    "channel": "email"
                }
            ]
        },
        {
            "alert_name": "noticent_server_back",
            "subscriptions": [
                {
                    "channel": "email"
                }
            ]
        }
   ],
    "count": 33
}

List the alerts configured on an application.

HTTP Request

GET /stacks/{stack_id}/notifications/

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string Unique identifier of the application 5999b763474b0eafa5fafb64bff0ba80

Notifications info

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
alert_name = `noticent_stack_update_failed`
response = token.get("#{api_url}/stacks/#{stack_id}/notifications/#{alert_name}.json")

puts JSON.parse(response.body)['response']
GET /stacks/5999b763474b0eafa5fafb64bff0ba80/notifications/noticent_stack_provisioned_success HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "alert_name": "noticent_stack_provisioned_success",
        "subscriptions": [
            {
                "channel": "email"
            }
        ]
    }
}

Get information of a single notification

HTTP Request

GET /stacks/{stack_id}/notifications/{alert_name}/

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The application's UID 5999b763474b0eafa5fafb64bff0ba80
alert_name required string The name of the alert to query noticent_stack_update_failed

Notifications update

stack_id = '5999b763474b0eafa5fafb64bff0ba80'

response = token.patch("#{api_url}/stacks/#{stack_id}/notifications.json", {body:{"alerts":[{"alert_name":"noticent_stack_health_check_failed","subscriptions":[{"channel":"email"}]}]}})

puts JSON.parse(response.body)['response']

PATCH /stacks/{stack_id}/notifications/ HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "successes": {
            "alerts": [
                "noticent_stack_health_check_failed"
            ],
            "count": 1
        },
        "not_applicable": {
            "alerts": [],
            "count": 0
        },
        "failures": {
            "alerts": [],
            "count": 0
        }
    }
}

Update the alerts for an application. You can use the JSON response from one application to effectively copy those settings to another application.

HTTP Request

PATCH /stacks/{stack_id}/notifications/

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string Unique identifier of the stack 5999b763474b0eafa5fafb64bff0ba80
alerts required json A JSON formatted description of alert settings {"alerts":[{"alert_name":"noticent_stack_health_check_failed","subscriptions":[{"channel":"email"}]}]}

Notifications update application group

application_group_name = 'production-apps'

response = token.patch("#{api_url}/application_groups/#{application_group_name}/notifications.json", {body:{"alerts":[{"alert_name":"noticent_stack_health_check_failed","subscriptions":[{"channel":"email"}]}]}})

puts JSON.parse(response.body)['response']
PATCH /application_groups/notifications/ HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "successes": {
            "alerts": [
                "noticent_stack_health_check_failed"
            ],
            "count": 1
        },
        "not_applicable": {
            "alerts": [],
            "count": 0
        },
        "failures": {
            "alerts": [],
            "count": 0
        }
    }
}

Update the alerts for an application group. You can use the JSON response from one application to effectively copy those settings to an entire application group.

HTTP Request

PATCH /application_groups/notifications

Query parameters

Parameter Presence Data type Description Sample value
application_group_name required string Name of the application group production-apps
alerts required json A JSON formatted description of alert settings {"alerts":[{"alert_name":"noticent_stack_health_check_failed","subscriptions":[{"channel":"email"}]}]}

Stack settings

Settings list

id = '5999b763474b0eafa5fafb64bff0ba80'
response = token.get("#{api_url}/stacks/#{id}/settings.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id}/settings HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":[
    {
      "id":"allowed-web-source",
      "key":"allowed.web.source",
      "value":null,
      "readonly":false,
      "warning_text":""
    },
    {
      "id":"asset-prefix",
      "key":"asset.prefix",
      "value":"assets",
      "readonly":false,
      "warning_text":""
    },
    {
      "id":"git-branch",
      "key":"git.branch",
      "value":"master",
      "readonly":false,
      "warning_text":""
    },
    {
      "id":"reconfigure-nginx",
      "key":"reconfigure.nginx",
      "value":false,
      "readonly":false,
      "warning_text":""
    },
    {
      "id":"stack-name",
      "key":"stack.name",
      "value":"test-elastic-1",
      "readonly":true,
      "warning_text":"Warning! Changing this value will also modify your Cloud 66 *.c66.me DNS values"
    },
    {
      "id":"maintenance-mode",
      "key":"maintenance.mode",
      "value":false,
      "readonly":false,
      "warning_text":""

    }
  ],
  "count":5,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":6,
      "pages":1
    }
}

Get list of all settings of stack

HTTP Request

GET /stacks/{id}/settings

Query parameters

Parameter Presence Data type Description Sample value
id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80

Setting

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
id = 'git-branch'
response = token.get("#{api_url}/stacks/#{stack_id}/settings/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/settings/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "key":"git.branch",
      "value":"master"
    }
}

Get information of a single setting item

HTTP Request

GET /stacks/{stack_id}/settings/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required string The setting item ID git-branch

Update Setting

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
id = 'git-branch'
response = token.put("#{api_url}/stacks/#{stack_id}/settings/#{id}.json", {body: {:value => 'staging'}})

puts JSON.parse(response.body)['response']
PUT /stacks/{stack_id}/settings/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":7,
      "user":"test@cloud66.com",
      "resource_type":"stack",
      "action":"stack-set: git.branch",
      "resource_id":"280",
      "started_via":"api",
      "started_at":"2014-09-01T12:47:24Z",
      "finished_at":null,
      "finished_success":null,
      "finished_message":null
    }
}

Update value of a setting item

HTTP Request

PUT /stacks/{stack_id}/settings/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required integer The setting item ID git-branch
value required string The setting item new value staging

Jobs

Jobs list

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
response = token.get("#{api_url}/stacks/#{stack_id}/jobs.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id}/jobs HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": [
        {
            "uid": "b375afb170b468c238be44cec1058d0f",
            "name": "pies",
            "type": "DockerHostTaskJob",
            "cron": "01 00 1 * *",
            "status": 3,
            "paused": false,
            "params": {
                "command": "ls -lta"
            },
            "created_at": "2023-10-24 15:38:29 UTC",
            "updated_at": "2023-10-24 15:39:14 UTC"
        }
    ],
    "count": 1,
    "pagination": {
        "previous": null,
        "next": null,
        "current": 1,
        "per_page": 30,
        "count": 1,
        "pages": 1
    }
}

Get list of all jobs of a stack.

HTTP Request

GET /stacks/{id}/jobs

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string stack UID 5999b763474b0eafa5fafb64bff0ba80

Run a job

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
id = 98ee5a9b93919d9b63bd5377636675bd
response = token.get("#{api_url}/stacks/#{stack_id}/jobs/{job_id}/run_now.json")

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/jobs/{job_id}/run_now HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":2593,
      "user":"test@example.com",
      "resource_type":"stack",
      "action":"job_run_now",
      "resource_id":"1602",
      "started_via":"api",
      "started_at":"2016-02-04T12:52:24Z",
      "finished_at":null,
      "finished_success":null,
      "finished_message":null
    }
}

Run the job.

HTTP Request

POST /stacks/{stack_id}/jobs/{job_id}/run_now

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
job_id required string Job ID 98ee5a9b93919d9b63bd5377636675bd
job_args optional string Arguments passed to the command Arg1

Pause job

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
id = 98ee5a9b93919d9b63bd5377636675bd
response = token.post("#{api_url}/stacks/#{stack_id}/jobs/{job_id}/pause.json")

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/jobs/{job_id}/pause HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "id": 6626835,
        "user": "peep@parp.com",
        "resource_type": "stack",
        "action": "job_pause_handler",
        "resource_id": "84195",
        "started_via": "api",
        "started_at": "2023-10-27T14:07:38Z",
        "finished_at": null,
        "finished_success": null,
        "finished_message": null,
        "finished_result": null,
        "metadata": {}
    }
}

Pause a specific job running on this stack.

HTTP Request

POST /stacks/{stack_id}/jobs/{job_id}/pause

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
job_id required string Job ID 98ee5a9b93919d9b63bd5377636675bd

Unpause job

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
id = 98ee5a9b93919d9b63bd5377636675bd
response = token.post("#{api_url}/stacks/#{stack_id}/jobs/{job_id}/unpause.json")

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/jobs/{job_id}/unpause HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "id": 6626835,
        "user": "peep@parp.com",
        "resource_type": "stack",
        "action": "job_pause_handler",
        "resource_id": "84195",
        "started_via": "api",
        "started_at": "2023-10-27T14:07:38Z",
        "finished_at": null,
        "finished_success": null,
        "finished_message": null,
        "finished_result": null,
        "metadata": {}
    }
}

Unpause a specific job.

HTTP Request

POST /stacks/{stack_id}/jobs/{job_id}/unpause

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
job_id required string Job ID 98ee5a9b93919d9b63bd5377636675bd

Pause all jobs

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
id = 98ee5a9b93919d9b63bd5377636675bd
response = token.post("#{api_url}/stacks/#{stack_id}/jobs/pause_all.json")

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/jobs/pause_all HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "id": 6626835,
        "user": "peep@parp.com",
        "resource_type": "stack",
        "action": "job_pause_handler",
        "resource_id": "84195",
        "started_via": "api",
        "started_at": "2023-10-27T14:07:38Z",
        "finished_at": null,
        "finished_success": null,
        "finished_message": null,
        "finished_result": null,
        "metadata": {}
    }
}

Pause all the jobs for this stack.

HTTP Request

POST /stacks/{stack_id}/jobs/pause_all

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80

Pause all jobs

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
id = 98ee5a9b93919d9b63bd5377636675bd
response = token.post("#{api_url}/stacks/#{stack_id}/jobs/unpause_all.json")

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/jobs/unpause_all HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "id": 6626835,
        "user": "peep@parp.com",
        "resource_type": "stack",
        "action": "job_pause_handler",
        "resource_id": "84195",
        "started_via": "api",
        "started_at": "2023-10-27T14:07:38Z",
        "finished_at": null,
        "finished_success": null,
        "finished_message": null,
        "finished_result": null,
        "metadata": {}
    }
}

Unpause all the jobs for this stack.

HTTP Request

POST /stacks/{stack_id}/jobs/unpause_all

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80

Server Groups

Server Groups list

id = '5999b763474b0eafa5fafb64bff0ba80'
response = token.get("#{api_url}/stacks/#{id}/server_groups.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id}/server_groups HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": [
    {
      "id": 128,
      "name": "Rails Server",
      "type": "rails",
      "created_at": "2014-08-29T17:21:47Z",
      "updated_at": "2014-08-29T17:21:47Z"
    },
    {
      "id":129,
      "name":
      "PostgreSQL Server",
      "type": "postgresql",
      "created_at": "2014-08-29T17:21:47Z",
      "updated_at":"2014-08-29T17:21:47Z"
    }
  ],
  "count": 2,
  "pagination":
    {
      "previous": null,
      "next": null,
      "current": 1,
      "per_page": 30,
      "count":2,
      "pages":1
    }
}

Get list of all server groups of stack

HTTP Request

GET /stacks/{id}/server_groups

Query parameters

Parameter Presence Data type Description Sample value
id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80

Server Group

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
id = 128
response = token.get("#{api_url}/stacks/#{stack_id}/server_groups/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/server_groups/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{

  "response":
    {
      "id": 128,
      "name": "Rails Server",
      "type": "rails",
      "created_at": "2014-08-29T17:21:47Z",
      "updated_at": "2014-08-29T17:21:47Z"
    }
}

Get information of a single server group

HTTP Request

GET /stacks/{stack_id}/server_groups/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required integer The setting group ID 128

Scale up

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
id = 53
response = token.post("#{api_url}/stacks/#{stack_id}/server_groups/#{id}.json",  {body: {:subtype => 'docker', :server_size => 't2.small'}})

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/server_groups/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
     {
       "id":8,
       "user":"shab@shab.com",
       "resource_type":"stack",
       "action":"scale_up",
       "resource_id":"28",
       "started_via":"api",
       "started_at":"2016-04-04T18:13:14Z",
       "finished_at":null,
       "finished_success":null,
       "finished_message":null
     }
}

Scale-up a new server in server group. subtype and server_size must be passed as params.

HTTP Request

POST /stacks/{stack_id}/server_groups/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required integer The server group id 12345
subtype required string The server group type ( valid options are web, process and docker ) docker
server_size required string The server size base on your cloud t2.small
server_count optional integer The number of server to scale-up 2
server_availability_zone optional string The availability zone which you want the servers fired into (AWS EC2 only) us-east-1d
server_subnet_id optional string The subnet_id which you want the servers fired into (AWS EC2 only) subnet-123456
root_disk_type optional string Disk type, accepted values are ssd and magnetic. (AWS EC2 and GCE only) ssd
root_disk_size optional integer Default size of root disk (in GB) for servers. (AWS EC2 and GCE only) 40
server_names optional string The name of the servers backend1,backend2

Scale down

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
id = 53
response = token.post("#{api_url}/stacks/#{stack_id}/server_groups/#{id}.json",  {body: {:subtype => 'web', :server_count => '1'}})

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/server_groups/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
     {
       "id":8,
       "user":"shab@shab.com",
       "resource_type":"stack",
       "action":"scale_down",
       "resource_id":"28",
       "started_via":"api",
       "started_at":"2016-04-04T18:13:14Z",
       "finished_at":null,
       "finished_success":null,
       "finished_message":null
     }
}

Scale-down by deleting servers from a server group. subtype and server_count must be passed as params.

HTTP Request

POST /stacks/{stack_id}/server_groups/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required integer The server group id 12345
subtype required string The server group type ( valid options are web, process and docker ) docker
server_count required integer The number of servers you want after scaling down 2

Servers

Servers list

id = '5999b763474b0eafa5fafb64bff0ba80'
response = token.get("#{api_url}/stacks/#{id}/servers.json")

puts JSON.parse(response.body)['response']
GET /stacks/{id}/servers HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": [
    {
      "uid": "f8468fc145ea49bac474b30a8fea888d",
      "vendor_uid": "2492780",
      "name": "Caribou",
      "address": "146.185.133.183",
      "distro": "ubuntu",
      "distro_version": "14.04",
      "dns_record": "caribou.sb-elastic-1.dev.c66.me",
      "user_name": "root",
      "server_type": "Cloud (DigitalOcean) ",
      "server_roles": [
        "rails",
        "postgresql",
        "elasticsearch",
        "web",
        "app",
        "db"
      ],
      "server_group_id": 128,
      "stack_uid": "5acd43412ea412e32897c40d46f91183",
      "has_agent": true,
      "params":
        {
          "availability_zone": "2",
          "size": "63",
          "region": "2",
          "ips":["146.185.133.183"],
          "was_baselined": true,
          "cached_cores":1,
          "cached_memory": 1042336972,
          "passenger_version": "4.0.48",
          "passenger_enterprise": false,
          "supports_nginx_realip": true,
          "passenger_pool_max": 4
        },
      "created_at": "2014-08-29T17:21:47Z",
      "updated_at": "2014-08-29T17:54:41Z",
      "region":"2",
      "availability_zone": "2",
      "ext_ipv4": "146.185.133.183",
      "health_state": 3,
      "int_ipv4": "146.185.133.183",
      "int_ipv6": null,
      "ext_ipv6": null
    }
  ],
  "count":1,
  "pagination":
    {
      "previous": null,
      "next": null,
      "current": 1,
      "per_page": 30,
      "count": 1,
      "pages": 1
    }
}

Get list of all servers of stack

HTTP Request

GET /stacks/{id}/servers

Query parameters

Parameter Presence Data type Description Sample value
id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80

Servers

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
id = 'f8468fc145ea49bac474b30a8fea888d'
response = token.get("#{api_url}/stacks/#{stack_id}/servers/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/servers/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "uid": "f8468fc145ea49bac474b30a8fea888d",
      "vendor_uid": "2492780",
      "name": "Caribou",
      "address": "146.185.133.183",
      "distro": "ubuntu",
      "distro_version": "14.04",
      "dns_record": "caribou.sb-elastic-1.dev.c66.me",
      "user_name": "root",
      "server_type": "Cloud (DigitalOcean) ",
      "server_roles":[
        "rails",
        "postgresql",
        "elasticsearch",
        "web",
        "app",
        "db"
      ],
      "server_group_id": 128,
      "stack_uid": "5acd43412ea412e32897c40d46f91183",
      "has_agent": true,
      "params":
        {
          "availability_zone": "2",
          "size": "63",
          "region": "2",
          "ips":["146.185.133.183"],
          "was_baselined": true,
          "cached_cores": 1,
          "cached_memory": 1042336972,
          "passenger_version": "4.0.48",
          "passenger_enterprise": false,
          "supports_nginx_realip": true,
          "passenger_pool_max":4
        },
       "created_at": "2014-08-29T17:21:47Z",
       "updated_at": "2014-08-29T17:54:41Z",
       "region": "2",
       "availability_zone": "2",
       "ext_ipv4": "146.185.133.183",
       "health_state":3,
       "int_ipv4": "146.185.133.183",
       "int_ipv6": null,
       "ext_ipv6": null
    }
}

Get information of a single server

HTTP Request

GET /stacks/{stack_id}/servers/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required string The server ID f8468fc145ea49bac474b30a8fea888d
include_private_key optional integer if set to 1 then private_key will included in response 1

Reboot server

stack_id = 'a6b583684833a2cf4845079c9d9350a8'
response = token.post("#{api_url}/stacks/#{stack_id}/servers/#{server_id}/reboot_server"

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/servers/#{server_id}/reboot_server HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":10,
      "user":"test@cloud66.com",
      "resource_type":"stack",
      "action":"server_reboot",
      "resource_id":"283",
      "started_via":"api",
      "started_at":"2016-01-01T19:08:05Z",
      "finished_at":null,
      "finished_success":null,
      "finished_message":null
    }
}

You can use this method to reboot a speific server of a stack.

HTTP Request

POST /stacks/{stack_id}/servers/#{server_id}/reboot_server

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string Unique identifier of the stack 5999b763474b0eafa5fafb64bff0ba80
server_id required string Unique identifier of the server f8468fc145ea49bac474b30a8fea888d

Server Settings

Server Settings list

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
server_id = 'f8468fc145ea49bac474b30a8fea888d'
response = token.get("#{api_url}/stacks/#{stack_id}/servers/#{server_id}/settings.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/servers/{server_id}/settings HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":[
    {
      "key":"server.name",
      "value":"Caribou",
      "readonly":true,
      "warning_text":"Warning! Changing this value will also modify your Cloud 66 *.c66.me DNS values"}
  ],
  "count":1,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":1,
      "pages":1
    }
}

Get list of all settings of a server

HTTP Request

GET /stacks/{stack_id}/servers/{server_id}/settings

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
server_id required string The server UID f8468fc145ea49bac474b30a8fea888d

Server Setting

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
server_id = 'f8468fc145ea49bac474b30a8fea888d'
id = 'server-name'
response = token.get("#{api_url}/stacks/#{stack_id}/servers/#{server_id}/settings/#{id}.json")

puts JSON.parse(response.body)['response']
GET stacks/{stack_id}/servers/{server_id}/settings/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "key":"server.name",
      "value":"Caribou"
    }
}

Get information of a single server setting item

HTTP Request

GET stacks/{stack_id}/servers/{server_id}/settings/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
server_id required string The server uid f8468fc145ea49bac474b30a8fea888d
id required string The server setting item ID server-name

Update Server Setting

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
server_id = 'f8468fc145ea49bac474b30a8fea888d'
id = 'server-name'
response = token.put("#{api_url}/stacks/#{stack_id}/servers/#{server_id}/settings/#{id}.json", {body: {:value => 'newname'}})

puts JSON.parse(response.body)['response']
PUT /stacks/{stack_id}/servers/{server_id}/settings/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":9,
      "user":"test@cloud66.com",
      "resource_type":"server",
      "action":"server-set: server.name",
      "resource_id":"445",
      "started_via":"api",
      "started_at":"2014-09-01T13:07:35Z",
      "finished_at":null,
      "finished_success":null,
      "finished_message":null
    }
}

Update value of a server setting item

HTTP Request

PUT /stacks/{stack_id}/servers/{server_id}/settings/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
server_id required string The server UID f8468fc145ea49bac474b30a8fea888d
id required string The server setting item ID server-name
value required string The server setting item new value newname

Tagging Components

List tags

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
server_id = 'f8468fc145ea49bac474b30a8fea888d'
response = token.get("#{api_url}/tags/{entity_type}/{entity_id}/tags.json")
puts JSON.parse(response.body)['response']
GET /tags/{entity_type}/{entity_id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":[
    {
    "entity_type":"loadbalancer",                    
    "entity_id":"17823",                      
    "tags": ["foo","bar"],
    "created_at_iso":"2021-01-04T21:32:33+0000"
    "updated_at_iso":"2021-01-05T11:12:23+0000"}
  ],
  "count":1,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":1,
      "pages":1
    }
}

Get a list of tags for entities (servers & loadbalancers) by entity type and entity ID.

HTTP Request

GET /tags/{entity_type}/{entity_id}

Query parameters

Parameter Presence Data type Description Sample value
entity_type optional string Type of the entity server
server_id optional string ID of the entity 57648

Add tags

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
server_id = 'f8468fc145ea49bac474b30a8fea888d'
response = token.post("#{api_url}/tags/{entity_type}/{entity_id}/tags.json")
puts JSON.parse(response.body)['response']
POST /tags/{entity_type}/{entity_id}/{tags} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":[
    {
    "entity_type":"loadbalancer",                    
    "entity_id":"17823",                      
    "tags": ["foo","bar"],
    "created_at_iso":"2021-01-04T21:32:33+0000"
    "updated_at_iso":"2021-01-05T11:12:23+0000"}
  ],
  "count":1,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":1,
      "pages":1
    }
}

Add tags to an entity (server or loadbalancer). Completely replaces tags of the object with tags provided.

HTTP Request

POST /tags/{entity_type}/{entity_id}

Query parameters

Parameter Presence Data type Description Sample value
entity_type required string Type of the entity server
entity_id required string ID of the entity 57648
tags required array Array of tag values to be POSTed ["foo","bar"]

Update (patch) tags

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
server_id = 'f8468fc145ea49bac474b30a8fea888d'
response = token.patch("#{api_url}/tags/{entity_type}/{entity_id}/{operations}/tags.json")
puts JSON.parse(response.body)['response']
PATCH /tags/{entity_type}/{entity_id}/{operations} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":[
    {
    "entity_type":"loadbalancer",                    
    "entity_id":"17823",                      
    "tags": ["foo","bar"],
    "created_at_iso":"2021-01-04T21:32:33+0000"
    "updated_at_iso":"2021-01-05T11:12:23+0000"}
  ],
  "count":1,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":1,
      "pages":1
    }
}

Update tags on an entity (server or loadbalancer). Adds or deletes tags based on the operations parameter. Deleting non-existent tags is not an error, will simply be ignored. Performs deletions first, then additions.

HTTP Request

PATCH /tags/{entity_type}/{entity_id}/{operations}

Operation API objects

Parameter Presence Data type Description Sample value
op required string "add" or "delete" - specifies what to do with the below tag values add
tags required array Array of tag values for above operation ["foo","bar"]

Query parameters

Parameter Presence Data type Description Sample value
entity_type required string Type of the entity server
entity_id required string ID of the entity 57648
operations required array An array of Operation API objects [{"op":"delete","tags":["tag1","tag2"]}]

Delete tags

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
server_id = 'f8468fc145ea49bac474b30a8fea888d'
response = token.delete("#{api_url}/tags/{entity_type}/{entity_id}/tags.json")
puts JSON.parse(response.body)['response']
DELETE /tags/{entity_type}/{entity_id}/{operations} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":[
    {
    "entity_type":"loadbalancer",                    
    "entity_id":"17823",                      
    "tags": ["foo","bar"],
    "created_at_iso":"2021-01-04T21:32:33+0000"
    "updated_at_iso":"2021-01-05T11:12:23+0000"}
  ],
  "count":1,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":1,
      "pages":1
    }
}

Delete all tags on an entity (server or loadbalancer).

HTTP Request

DELETE /tags/{entity_type}/{entity_id}

Query parameters

Parameter Presence Data type Description Sample value
entity_type required string Type of the entity server
entity_id required string ID of the entity 57648

Clouds

Cloud list

response = token.get("#{api_url}/clouds.json")

puts JSON.parse(response.body)['response']
GET /clouds HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response":[
       {
          "name":"aws",
          "display_name":"AWS",
          "regions":[
             {
                "id":"us-east-1",
                "name":"US East (Northern Virginia)"
             },
             {
                "id":"us-east-2",
                "name":"US East (Ohio)"
             },
             {
                "id":"us-west-1",
                "name":"US West (Northern California)"
             },
             {
                "id":"us-west-2",
                "name":"US West (Oregon)"
             },
             {
                "id":"ca-central-1",
                "name":"Canada (Central)"
             },
             {
                "id":"sa-east-1",
                "name":"South America (Sao Paulo, Brazil)"
             },
             {
                "id":"eu-central-1",
                "name":"Europe (Frankfurt, Germany)"
             },
             {
                "id":"eu-west-1",
                "name":"Europe (Dublin, Ireland)"
             },
             {
                "id":"eu-west-2",
                "name":"Europe (London)"
             },
             {
                "id":"ap-southeast-1",
                "name":"Asia Pacific (Singapore)"
             },
             {
                "id":"ap-northeast-1",
                "name":"Asia Pacific (Tokyo)"
             },
             {
                "id":"ap-southeast-2",
                "name":"Asia Pacific (Sydney)"
             },
             {
                "id":"ap-south-1",
                "name":"Asia Pacific (Mumbai)"
             }
          ],
          "server_sizes":[
             {
                "id":"t1.micro",
                "name":"Micro instance (t1.micro)"
             },
             {
                "id":"t2.micro",
                "name":"General purpose (t2.micro)"
             },
             {
                "id":"t2.small",
                "name":"General purpose (t2.small)"
             },
             {
                "id":"t2.medium",
                "name":"General purpose (t2.medium)"
             },
             {
                "id":"m1.small",
                "name":"General purpose (m1.small)"
             },
             {
                "id":"m1.medium",
                "name":"General purpose (m1.medium)"
             },
             {
                "id":"m1.large",
                "name":"General purpose (m1.large)"
             },
             {
                "id":"m1.xlarge",
                "name":"General purpose (m1.xlarge)"
             },
             {
                "id":"m3.medium",
                "name":"General purpose (m3.medium)"
             },
             {
                "id":"m3.large",
                "name":"General purpose (m3.large)"
             },
             {
                "id":"m3.xlarge",
                "name":"General purpose (m3.xlarge)"
             },
             {
                "id":"m3.2xlarge ",
                "name":"General purpose (m3.2xlarge )"
             },
             {
                "id":"c1.medium",
                "name":"Compute optimized (c1.medium)"
             },
             {
                "id":"c1.xlarge",
                "name":"Compute optimized (c1.xlarge)"
             },
             {
                "id":"c3.large",
                "name":"Compute optimized (c3.large)"
             },
             {
                "id":"c3.xlarge",
                "name":"Compute optimized (c3.xlarge)"
             },
             {
                "id":"c3.2xlarge",
                "name":"Compute optimized (c3.2xlarge)"
             },
             {
                "id":"c3.4xlarge",
                "name":"Compute optimized (c3.4xlarge)"
             },
             {
                "id":"c3.8xlarge",
                "name":"Compute optimized (c3.8xlarge)"
             },
             {
                "id":"cc2.8xlarge",
                "name":"Compute optimized (cc2.8xlarge)"
             },
             {
                "id":"m2.xlarge",
                "name":"Memory optimized (m2.xlarge)"
             },
             {
                "id":"m2.2xlarge",
                "name":"Memory optimized (m2.2xlarge)"
             },
             {
                "id":"m2.4xlarge",
                "name":"Memory optimized (m2.4xlarge)"
             },
             {
                "id":"cr1.8xlarge",
                "name":"Memory optimized (cr1.8xlarge)"
             },
             {
                "id":"hi1.4xlarge",
                "name":"Storage optimized (hi1.4xlarge)"
             },
             {
                "id":"hs1.8xlarge",
                "name":"Storage optimized (hs1.8xlarge)"
             },
             {
                "id":"cg1.4xlarge",
                "name":"GPU instances (cg1.4xlarge)"
             },
             {
                "id":"g2.2xlarge",
                "name":"GPU instances (g2.2xlarge)"
             },
             {
                "id":"i2.xlarge",
                "name":"Storage optimized (i2.xlarge)"
             },
             {
                "id":"i2.2xlarge",
                "name":"Storage optimized (i2.2xlarge)"
             },
             {
                "id":"i2.4xlarge",
                "name":"Storage optimized (i2.4xlarge)"
             },
             {
                "id":"i2.8xlarge",
                "name":"Storage optimized (i2.8xlarge)"
             },
             {
                "id":"r3.large",
                "name":"Memory optimized (r3.large)"
             },
             {
                "id":"r3.xlarge",
                "name":"Memory optimized (r3.xlarge)"
             },
             {
                "id":"r3.2xlarge",
                "name":"Memory optimized (r3.2xlarge)"
             },
             {
                "id":"r3.4xlarge",
                "name":"Memory optimized (r3.4xlarge)"
             },
             {
                "id":"r3.8xlarge",
                "name":"Memory optimized (r3.8xlarge)"
             }
          ]
       },
       {
          "name":"digitalocean",
          "display_name":"DigitalOcean",
          "regions":[
             {
                "id":"ams1",
                "name":"Amsterdam, Netherlands",
                "old_id":"2"
             },
             {
                "id":"ams2",
                "name":"Amsterdam 2, Netherlands",
                "old_id":"5"
             },
             {
                "id":"ams3",
                "name":"Amsterdam 3, Netherlands",
                "old_id":"9"
             },
             {
                "id":"nyc1",
                "name":"New York, US",
                "old_id":"1"
             },
             {
                "id":"nyc2",
                "name":"New York 2, US",
                "old_id":"4"
             },
             {
                "id":"nyc3",
                "name":"New York 3, US",
                "old_id":"8"
             },
             {
                "id":"sfo1",
                "name":"San Francisco, US",
                "old_id":"3"
             },
             {
                "id":"sgp1",
                "name":"Singapore",
                "old_id":"6"
             },
             {
                "id":"lon1",
                "name":"London, UK",
                "old_id":"7"
             }
          ],
          "server_sizes":[
             {
                "id":"512mb",
                "name":"512MB - 1 CPU"
             },
             {
                "id":"1gb",
                "name":"1GB - 1 CPU"
             },
             {
                "id":"2gb",
                "name":"2GB - 2 CPU"
             },
             {
                "id":"4gb",
                "name":"4GB - 2 CPU"
             },
             {
                "id":"8gb",
                "name":"8GB - 4 CPU"
             },
             {
                "id":"16gb",
                "name":"16GB - 8 CPU"
             },
             {
                "id":"32gb",
                "name":"32GB - 12 CPU"
             },
             {
                "id":"48gb",
                "name":"48GB - 16 CPU"
             },
             {
                "id":"64gb",
                "name":"64GB - 20 CPU"
             }
          ]
       }
    ],
    "count":2,
    "pagination":{
       "previous":null,
       "next":null,
       "current":1,
       "per_page":30,
       "count":2,
       "pages":1
    }
}

Get list of all clouds of account

HTTP Request

GET /clouds

Cloud

cloud_id = 'digitalocean'
response = token.get("#{api_url}/clouds/#{cloud_id}.json")

puts JSON.parse(response.body)['response']
GET /clouds/{cloud_id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
     {
        "name":"digitalocean",
        "display_name":"DigitalOcean",
        "regions":[
           {
              "id":"ams1",
              "name":"Amsterdam, Netherlands",
              "old_id":"2"
           },
           {
              "id":"ams2",
              "name":"Amsterdam 2, Netherlands",
              "old_id":"5"
           },
           {
              "id":"ams3",
              "name":"Amsterdam 3, Netherlands",
              "old_id":"9"
           },
           {
              "id":"nyc1",
              "name":"New York, US",
              "old_id":"1"
           },
           {
              "id":"nyc2",
              "name":"New York 2, US",
              "old_id":"4"
           },
           {
              "id":"nyc3",
              "name":"New York 3, US",
              "old_id":"8"
           },
           {
              "id":"sfo1",
              "name":"San Francisco, US",
              "old_id":"3"
           },
           {
              "id":"sgp1",
              "name":"Singapore",
              "old_id":"6"
           },
           {
              "id":"lon1",
              "name":"London, UK",
              "old_id":"7"
           }
        ],
        "server_sizes":[
           {
              "id":"512mb",
              "name":"512MB - 1 CPU"
           },
           {
              "id":"1gb",
              "name":"1GB - 1 CPU"
           },
           {
              "id":"2gb",
              "name":"2GB - 2 CPU"
           },
           {
              "id":"4gb",
              "name":"4GB - 2 CPU"
           },
           {
              "id":"8gb",
              "name":"8GB - 4 CPU"
           },
           {
              "id":"16gb",
              "name":"16GB - 8 CPU"
           },
           {
              "id":"32gb",
              "name":"32GB - 12 CPU"
           },
           {
              "id":"48gb",
              "name":"48GB - 16 CPU"
           },
           {
              "id":"64gb",
              "name":"64GB - 20 CPU"
           }
        ]
     }
}

Get information about a single cloud of an account

HTTP Request

GET /clouds/{cloud_id}

Query parameters

Parameter Presence Data type Description Sample value
cloud_id required string The cloud ID (name) digitalocean

Backups

Backups list

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
response = token.get("#{api_url}/stacks/#{stack_id}/backups.json", {body: {:db_type => 'mysql'}})

puts JSON.parse(response.body)['response']
GET /stacks/{id}/backups HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":[
    {
      "id":4,
      "server_uid":"e63e859d5ab72b0bcf14321f0ffb013d",
      "db_type":"mysql",
      "database_name":"test-db",
      "file_base":"",
      "backup_date_iso":"2014-09-01T19:00:33Z",
      "backup_status":0,
      "backup_result":"",
      "restore_status":0,
      "restore_result":null,
      "created_at_iso":"2014-09-01T19:00:33Z",
      "updated_at_iso":"2014-09-01T19:00:33Z",
      "verify_status":0,
      "verify_result":null,
      "storage_path":"2aad2bb5a70e621ecf251fbd85af6927/backups/3c656a1bcc160769762763c6276c18b9/mysql/test_db_11/2014.09.01.19.00.31",
      "skip_tables":"","backup_size":0
    },
    {
      "id":1,
      "server_uid":"e63e859d5ab72b0bcf14321f0ffb013d",
      "db_type":"mysql",
      "database_name":"test-db",
      "file_base":"",
      "backup_date_iso":"2014-09-01T18:16:16Z",
      "backup_status":0,
      "backup_result":"",
      "restore_status":0,
      "restore_result":null,
      "created_at_iso":"2014-09-01T18:16:16Z",
      "updated_at_iso":"2014-09-01T18:16:16Z",
      "verify_status":0,
      "verify_result":null,
      "storage_path":"2aad2bb5a70e621ecf251fbd85af6927/backups/3c656a1bcc160769762763c6276c18b9/mysql/test_db_11/2014.09.01.18.16.14",
      "skip_tables":"","backup_size":0
    }
  ],
  "count":2,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":2,
      "pages":1
    }
}

Get list of all backups of stack.

HTTP Request

GET /stacks/{id}/backups

Query parameters

Parameter Presence Data type Description Sample value
id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
group optional integer Backup group ID 15
db_type optional string Backup database type (valid options are: mysql, postgresql, redis, mongodb) mysql

Backup

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
id = 4153
response = token.get("#{api_url}/stacks/#{stack_id}/backups/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/backups/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "id":1,
      "server_uid":"e63e859d5ab72b0bcf14321f0ffb013d",
      "db_type":"mysql",
      "database_name":"shab-test-db",
      "file_base":"",
      "backup_date_iso":"2014-09-01T18:16:16Z",
      "backup_status":0,
      "backup_result":"",
      "restore_status":0,
      "restore_result":null,
      "created_at_iso":"2014-09-01T18:16:16Z",
      "updated_at_iso":"2014-09-01T18:16:16Z",
      "verify_status":0,
      "verify_result":null,
      "storage_path":"2aad2bb5a70e621ecf251fbd85af6927/backups/3c656a1bcc160769762763c6276c18b9/mysql/test_db_11/2014.09.01.18.16.14",
      "skip_tables":"",
      "backup_size":0
    }
}

Get information about a single backup.

HTTP Request

GET /stacks/{stack_id}/backups/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
id required integer Backup ID 4153

New Backup

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
response = token.post("#{api_url}/stacks/#{stack_id}/backups.json", {body: {:db_type => 'mysql', :keep_count => 10}})

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/backups HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "ok":true,
      "message":"queued for creation"
    }
}

Create a new backup task.

HTTP Request

POST /stacks/{stack_id}/backups

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
db_type optional string Comma separated list of Database types which need backup tasks (valid options: all, mysql, postgresql, redis, mongodb) mysql,redis
frequency optional string Frequency of backup task in cron schedule format 0 */1 * * *
keep_count optional integer Number of previous backups to keep 10
gzip optional boolean Compress your backups with gzip. false
excluded_tables optional string Tables that must be excluded from the backup my_log_table
run_on_replica_server optional boolean Run backup task on replica server if available false

Import Backup

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
remote_url = 'https://s3.amazonaws.com/c66-managed-backup-non-prod/2aad2bb5a70e621ecf251fbd85af6927/backups/09a7dec0efdaa19b44148fccbf6128ec/redis/redis_23/2014.07.01.07.00.46/redis_23.tar'
response = token.post("#{api_url}/stacks/#{stack_id}/backups.json", {body: {:db_type => 'mysql', :group => 5, :remote_url => remote_url}})

puts JSON.parse(response.body)['response']
POST /stacks/{stack_id}/backups HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "ok":true,
      "message":"Your external backup queued for upload"
    }
}

Import an external backup.

HTTP Request

POST /stacks/{stack_id}/backups

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
group required integer The group ID of backups that imported backup must restored in 5
db_type required string Comma separated list of Database types which need backup tasks (valid options: mysql, postgresql, redis, mongodb) mysql
remote_url required string A URL to backup file to be imported https://s3.amazonaws.com/c66-managed-backup-non-prod/2aad2bb5a70e621ecf251fbd85af6927/backups/09a7dec0efdaa19b44148fccbf6128ec/redis/redis_23/2014.07.01.07.00.46/redis_23.tar

Backups files list

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
backup_id = 4153
response = token.get("#{api_url}/stacks/#{stack_id}/backups/#{backup_id}/files.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/backups/{backup_id}/files HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":[
    {
      "id":"tar",
      "name":"test_db_11.tar"
    }
  ],
  "count":1,
  "pagination":
    {
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":1,
      "pages":1
    }

Get list of all backup files of a stack.

HTTP Request

GET /stacks/{stack_id}/backups/{backup_id}/files

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
backup_id required integer Backup ID 4153

Backup file

stack_id = '5999b763474b0eafa5fafb64bff0ba80'
backup_id = 4153
id = 'tar-aa'
response = token.get("#{api_url}/stacks/#{stack_id}/backups/#{backup_id}/files/#{id}.json")

puts JSON.parse(response.body)['response']
GET /stacks/{stack_id}/backups/{backup_id}/files/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "ok":true,
      "public_url":"https://c66-managed-backup-non-prod.s3.amazonaws.com/2aad2bb5a70e621ecf251fbd85af6927/backups/3c656a1bcc160769762763c6276c18b9/mysql/test_db_11/2014.09.01.18.16.14/test_db_11.tar?AWSAccessKeyId=AKIAIKCYITLQBEJDIETQ\u0026Expires=1409603570\u0026Signature=C2au7Jq%252F1m6uHGHRfGJPn%252F2GSS8%253D"
    }
}

Get the public URL to a backup file.

HTTP Request

GET /stacks/{stack_id}/backups/{backup_id}/files/{id}

Query parameters

Parameter Presence Data type Description Sample value
stack_id required string The stack UID 5999b763474b0eafa5fafb64bff0ba80
backup_id required integer Backup ID 4153
id required string The file ID tar-aa

Accounts

Accounts list

response = token.get("#{api_url}/accounts.json")

puts JSON.parse(response.body)['response']
GET /accounts HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": [
    {
      "id": 139,
      "owner": "test@cloud66.com",
      "created_at_iso": "2013-06-19T11:08:03Z",
      "updated_at_iso": "2014-02-20T12:55:58Z",
      "stack_count": 2,
      "used_clouds": ["digitalocean","rackspace"]
    }
  ],
  "count":1,
  "pagination":{
    "previous": null,
    "next": null,
    "current": 1,
    "per_page": 30,
    "count": 1,
    "pages": 1
  }
}

Get a list of accounts that caller belongs to.

HTTP Request

GET /accounts

Account

id = 1
response = token.get("#{api_url}/accounts/#{id}.json")

puts JSON.parse(response.body)['response']
GET /accounts/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
          "id": 139,
          "owner": "test@cloud66.com",
          "created_at_iso": "2013-06-19T11:08:03Z",
          "updated_at_iso": "2014-02-20T12:55:58Z",
          "stack_count": 2,
          "used_clouds": ["digitalocean","rackspace"]
    }
}

Get information about an account.

HTTP Request

GET /accounts/{id}

Query parameters

Parameter Presence Data type Description Sample value
id required integer The account ID 1

Users

Users list

response = token.get("#{api_url}/users.json")

puts JSON.parse(response.body)['response']
GET /users HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": [
    {
      "id": 1,
      "email": "jack@gmail.com",
      "primary_account_id": 1,
      "locked": false,
      "access_profile": {
        "account_profile": {
          "can_create_stack": true,
          "can_admin_users": true,
          "can_payment": true,
          "can_add_cloud_key": true,
          "can_del_cloud_key": true,
          "can_view_acc_notifications": true,
          "can_edit_acc_notifications": true,
          "can_view_audit": true,
          "can_view_docker_img_key": true,
          "can_del_ssh_key": true,
          "can_edit_personal_token": true,
          "can_del_authorized_app": true,
          "can_view_custom_env": true,
          "can_edit_custom_env": true,
          "can_add_developers_app": true,
          "can_del_developers_app": true,
          "can_edit_git_key": true,
          "can_edit_gateway": true,
          "default_roles": [
            "Administrator"
          ]
        },
        "stack_profiles": [
          {
            "stack_uid": "d1f1d43bb86ff3e97c9f6ff2841e42cb",
            "role": "Administrator"
          },
          {
            "stack_uid": "740f81b98eb847fab0df538ea8780d9d",
            "role": "Administrator"
          },
          {
            "stack_uid": "b5f4eaaf56b5768f272ab875d2ba48b1",
            "role": "Administrator"
          }
        ]
      },
      "uses_tfa": false,
      "timezone": "UTC",
      "has_valid_phone": false,
      "developer_program": false,
      "github_login": false,
      "last_login": "2016-01-29T15:25:20Z",
      "devices": [
        {
          "device_type": 1,
          "sub_type": 2,
          "token": "wertqy",
          "enabled": true,
          "created_at": "2014-08-04 11:57:36 UTC",
          "updated_at": "2014-08-04 12:03:22 UTC",
          "created_at_iso": "2014-08-04T11:57:36Z",
          "updated_at_iso": "2014-08-04T12:03:22Z"
        }
      ],
      "created_at": "2015-08-14T19:45:28Z",
      "updated_at": "2016-02-01T11:23:38Z",
      "cloud_status": "healthy"
    },
    {
      "id": 2,
      "email": "jim@gmail.com",
      "primary_account_id": 2,
      "locked": false,
      "access_profile": {
        "account_profile": {
          "can_create_stack": true,
          "can_admin_users": false,
          "can_payment": false,
          "can_add_cloud_key": false,
          "can_del_cloud_key": true,
          "can_view_acc_notifications": false,
          "can_edit_acc_notifications": true,
          "can_view_audit": false,
          "can_view_docker_img_key": false,
          "can_del_ssh_key": false,
          "can_edit_personal_token": false,
          "can_del_authorized_app": false,
          "can_view_custom_env": false,
          "can_edit_custom_env": false,
          "can_add_developers_app": false,
          "can_del_developers_app": false,
          "can_edit_git_key": false,
          "can_edit_gateway": false,
          "default_roles": [
            "Viewer"
          ]
        },
        "stack_profiles": [
          {
            "stack_uid": "740f81b98eb847fab0df538ea8780d9d",
            "role": "Deployer"
          },
          {
            "stack_uid": "b5f4eaaf56b5768f272ab875d2ba48b1",
            "role": "Viewer"
          },
          {
            "stack_uid": "740f81b98eb847fab0df538ea8780d9d",
            "role": "Administrator"
          },
          {
            "stack_uid": "b5f4eaaf56b5768f272ab875d2ba48b1",
            "role": "Administrator"
          }
        ]
      },
      "uses_tfa": false,
      "timezone": "UTC",
      "has_valid_phone": false,
      "developer_program": false,
      "github_login": false,
      "last_login": "2016-01-28T13:12:16Z",
      "devices": [],
      "created_at": "2016-01-28T13:12:13Z",
      "updated_at": "2016-01-28T13:12:16Z",
      "cloud_status": "healthy"
    }
  ],
  "count": 2,
  "pagination": {
    "previous": null,
    "next": null,
    "current": 1,
    "per_page": 30,
    "count": 2,
    "pages": 1
  }
}

Get list of users that caller has access to.

HTTP Request

GET /users

User

id = 1
response = token.get("#{api_url}/users/#{id}.json")

puts JSON.parse(response.body)['response']
GET /users/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response": {
    "id": 2,
    "email": "jim@gmail.com",
    "primary_account_id": 2,
    "locked": false,
    "access_profile": {
      "account_profile": {
        "can_create_stack": true,
        "can_admin_users": false,
        "can_payment": false,
        "can_add_cloud_key": false,
        "can_del_cloud_key": true,
        "can_view_acc_notifications": false,
        "can_edit_acc_notifications": true,
        "can_view_audit": false,
        "can_view_docker_img_key": false,
        "can_del_ssh_key": false,
        "can_edit_personal_token": false,
        "can_del_authorized_app": false,
        "can_view_custom_env": false,
        "can_edit_custom_env": false,
        "can_add_developers_app": false,
        "can_del_developers_app": false,
        "can_edit_git_key": false,
        "can_edit_gateway": false,
        "default_roles": [
          "Viewer"
        ]
      },
      "stack_profiles": [
        {
          "stack_uid": "740f81b98eb847fab0df538ea8780d9d",
          "role": "Deployer"
        },
        {
          "stack_uid": "b5f4eaaf56b5768f272ab875d2ba48b1",
          "role": "Viewer"
        },
        {
          "stack_uid": "740f81b98eb847fab0df538ea8780d9d",
          "role": "Administrator"
        },
        {
          "stack_uid": "b5f4eaaf56b5768f272ab875d2ba48b1",
          "role": "Administrator"
        }
      ]
    },
    "uses_tfa": false,
    "timezone": "UTC",
    "has_valid_phone": false,
    "developer_program": false,
    "github_login": false,
    "last_login": "2016-01-28T13:12:16Z",
    "devices": [],
    "created_at": "2016-01-28T13:12:13Z",
    "updated_at": "2016-01-28T13:12:16Z",
    "cloud_status": "healthy"
  }
}

Get detailed information about a user.

HTTP Request

GET /users/{id}

Query parameters

Parameter Presence Data type Description Sample value
id required integer The user UID 1

Update User

id = 1
response = token.put("#{api_url}/users/#{id}.json", {body: { payload }})
# payload is a the same as the result of GET /user/{id}.json
PUT /users/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
    "id": 2,
    "email": "jim@gmail.com",
    "primary_account_id": 2,
    "locked": false,
    "access_profile": {
      "account_profile": {
        "can_create_stack": true,
        "can_admin_users": false,
        "can_payment": false,
        "can_add_cloud_key": false,
        "can_del_cloud_key": true,
        "can_view_acc_notifications": false,
        "can_edit_acc_notifications": true,
        "can_view_audit": false,
        "can_view_docker_img_key": false,
        "can_del_ssh_key": false,
        "can_edit_personal_token": false,
        "can_del_authorized_app": false,
        "can_view_custom_env": false,
        "can_edit_custom_env": false,
        "can_add_developers_app": false,
        "can_del_developers_app": false,
        "can_edit_git_key": false,
        "can_edit_gateway": false,
        "default_roles": [
          "Viewer"
        ]
      },
      "stack_profiles": [
        {
          "stack_uid": "740f81b98eb847fab0df538ea8780d9d",
          "role": "Deployer"
        },
        {
          "stack_uid": "b5f4eaaf56b5768f272ab875d2ba48b1",
          "role": "Viewer"
        },
        {
          "stack_uid": "740f81b98eb847fab0df538ea8780d9d",
          "role": "Administrator"
        },
        {
          "stack_uid": "b5f4eaaf56b5768f272ab875d2ba48b1",
          "role": "Administrator"
        }
      ]
    },
    "uses_tfa": false,
    "timezone": "UTC",
    "has_valid_phone": false,
    "developer_program": false,
    "github_login": false,
    "last_login": "2016-01-28T13:12:16Z",
    "devices": [],
    "created_at": "2016-01-28T13:12:13Z",
    "updated_at": "2016-01-28T13:12:16Z",
    "cloud_status": "healthy"
}

Update user information. Currently only access profile section changes are applied.

HTTP Request

GET /users/{id}

Query parameters

Parameter Presence Data type Description Sample value
id required integer The user UID 1

Add Device

id = 1
token = 'htyukjbnnmshthkr'
response = token.post("#{api_url}/users/#{id}/devices.json", {body: {:device_type => 1, :sub_type => 1, :token => token}})

puts JSON.parse(response.body)['response']
POST /users/{id}/devices HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
  "response":
    {
      "device_type": 1,
      "sub_type": 1,
      "token": "mmccdd",
      "enabled": true,
      "created_at": "2014-09-01 09:15:50 UTC",
      "updated_at": "2014-09-01 09:15:50 UTC",
      "created_at_iso": "2014-09-01T09:15:50Z",
      "updated_at_iso": "2014-09-01T09:15:50Z"
    }
}

Add a new device for the user.

HTTP Request

POST /users/{id}/devices

Query parameters

Parameter Presence Data type Description Sample value
id required integer The user UID 1
device_type required integer Device type (1 = iOS, 2 = Android) 1
sub_type required integer Device subtype (1 = iPhone, 2 = iPad, 3 = iPod) 1
token required string The token of the device htyukjbnnmshthkr

Update Device

id = 1
token = 'htyukjbnnmshthkr'
response = token.put("#{api_url}/users/#{id}/devices.json", {body: {:device_type => 1, :sub_type => 1, :token => token}})

puts JSON.parse(response.body)['response']
PUT /users/{id}/devices HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

Update device_type or sub_type of a device

HTTP Request

PUT /users/{id}/devices

Query parameters

Parameter Presence Data type Description Sample value
id required integer The user UID 1
device_type required integer Device type (1 = iOS, 2 = Android) 1
sub_type required integer Device subtype (1 = iPhone, 2 = iPad, 3 = iPod) 1
token required string The token of the device htyukjbnnmshthkr

Delete Device

id = 1
token = 'htyukjbnnmshthkr'
response = token.delete("#{api_url}/users/#{id}/devices/#{token}.json")

puts JSON.parse(response.body)['response']
DELETE /users/{id}/devices/{token} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

Delete a device

HTTP Request

DELETE /users/{id}/devices/{token}

Query parameters

Parameter Presence Data type Description Sample value
id required integer The user UID 1
token required string The token of the device htyukjbnnmshthkr

Gateways

Gateways list

account_id = '1234'
response = token.get("#{api_url}/accounts/#{account_id}/gateways.json")

puts JSON.parse(response.body)['response']
GET /accounts/{account_id}/gateways HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{
   "response":[
      {
        "id"=>1,
        "name"=>"aws_bastion",
        "username"=>"ec2-usr",
        "address"=>"1.1.1.1",
        "private_ip"=>"2.2.2.2",
        "ttl"=>"2016-02-01T14:46:38Z",
        "content"=>"N/A",
        "created_at_iso"=>"2016-02-01T14:37:05Z",
        "updated_at_iso"=>"2016-02-01T14:47:01Z",
        "created_by"=>"user1@cloud66.com",
        "updated_by"=>"user1@cloud66.com"
      }
   ],
   "count":1,
   "pagination":{
      "previous":null,
      "next":null,
      "current":1,
      "per_page":30,
      "count":1,
      "pages":1
   }
}

Get a list of all the gateways of the account

HTTP Request

GET /accounts/{account_id}/gateways

Query parameters

Parameter Presence Data type Description Sample value
account_id required string The account id 12345

Gateway Create

account_id = '1234'
response = token.post("#{api_url}/accounts/#{account_id}/gateways.json", {body: {:name => 'aws_test', :username => 'ec2-usr', :address => '1.1.1.1', :ttl => 3600, :private_ip => '2.2.2.2', :content => 'xxxxxxxxxxxxx'}})

puts JSON.parse(response.body)['response']
POST /accounts/{account_id}/gateways HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

{ "response":
    {
        "ok": true
    }
}

Create a new gateway under the account. name must be passed as params. You can also specify username , address, ttl, private_ip and content as params.

HTTP Request

POST /accounts/{account_id}/gateways

Query parameters

Parameter Presence Data type Description Sample value
account_id required string The account id 12345
name required string New gateway name new_gateway_name
username optional string Username of bastion server ec2-usr
address optional string Public IP or DNS address of bastion server 1.1.1.1
ttl optional integer The number of seconds you want the gateway available 3600
private_ip optional string Private IP or DNS address of bastion server 2.2.2.2
content optional string The content of private key of bastion server xxxxxxxx

Update Gateway

account_id = '1234'
id = 1

response = token.put("#{api_url}/accounts/#{account_id}/gateways/#{id}.json", {body: { :name => 'new_name', :username => 'ubuntu' , :address => '1.2.3.4' }})

puts JSON.parse(response.body)['response']

PUT /accounts/{account_id}/gateways/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
{ "response":
    {
        "ok": true
    }
}

Update gateway information.

HTTP Request

PUT /accounts/{account_id}/gateways/{id}

Query parameters

Parameter Presence Data type Description Sample value
id required integer The gateway id 1
account_id required string The account id 12345
name optional string Gateway name new_gateway_name
username optional string Username of bastion server ec2-usr
address optional string Public IP or DNS address of bastion server 1.1.1.1
ttl optional integer The number of seconds you want the gateway available 3600
private_ip optional string Private IP or DNS address of bastion server 2.2.2.2
content optional string The content of private key of bastion server xxxxxxxx

Delete Gateway

account_id = '1234'
id = 1
response = token.delete("#{api_url}/accounts/#{account_id}/gateways/#{id}.json")
puts JSON.parse(response.body)['response']
DELETE /accounts/{account_id}/gateways/{id} HTTP/1.1
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3597
HTTP/1.1 200 OK
Content-Type: application/json

Delete a gateway

HTTP Request

DELETE /accounts/{account_id}/gateways/{id}

Query parameters

Parameter Presence Data type Description Sample value
id required integer The gateway id 1
account_id required string The account id 12345