Back to top

Containership Cloud API

The Containership Cloud API https://api.containership.io/.

All requests must be accompanied by an Authorization header. Generate a Personal Access Token in the Acccount settings section of the Cloud Dashboard to use as your bearer token.

Authorization: Bearer <personal access token>

Account

Containership Cloud account resources.

Account Information

Get user account
GET/v2/account

Example URI

GET /v2/account
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
    "id": "12345678-1234-1234-1234-0000",
    "email": "user@domain.com",
    "organizations": [{
        "name": "My Organization",
        "id": "12345678-1234-1234-1234-0000"
    }],
    "{scm_provider}": {
        ...
    },
    "signup_method": "github",
    "name": "Example User",
    "phone": "9999999999",
    "enabled": true,
    "ssh_keys": [{
        "fingerprint": "a1:b2:c3:d4:e5:f6:g7:h8:i9:j0:k1:l2:m3:n4:o5:p6"
        "id": "12345678-1234-1234-1234-00001231234"
        "name": "My SSH Key"
    }],
    "created_at": "2016-06-21T14:25:05.034Z",
    "updated_at": "2017-05-26T14:47:54.923Z"
}

Modify user account
PUT/v2/account

This action is used to update a user’s basic information, only information to update needs to be sent.

  • phone (string) - User’s phone number

  • name (string) - User’s full name

  • email (string) - User’s contact email address

Example URI

PUT /v2/account
Request
HideShow
Headers
Content-Type: application/json
Body
{
  "phone": "5551231234",
  "name": "John Doe",
  "email": "example@containership.io"
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
    "id": "12345678-1234-1234-1234-0000",
    "email": "user@domain.com",
    "organizations": [{
        "name": "My Organization",
        "id": "12345678-1234-1234-1234-0000"
    }],
    "{scm_provider}": {
        ...
    },
    "signup_method": "github",
    "name": "Example User",
    "phone": "9999999999",
    "enabled": true,
    "ssh_keys": [{
        "fingerprint": "a1:b2:c3:d4:e5:f6:g7:h8:i9:j0:k1:l2:m3:n4:o5:p6"
        "id": "12345678-1234-1234-1234-00001231234"
        "name": "My SSH Key"
    }],
    "created_at": "2016-06-21T14:25:05.034Z",
    "updated_at": "2017-05-26T14:47:54.923Z"
}

Account Event Listener

Open listener for user events
GET/v2/account/listen

This opens up an event listener for changes to resources the account has access to.

Example URI

GET /v2/account/listen
Response  200
HideShow
Headers
Content-Type: text/event-stream

Account List Events

List events for this account
GET/v2/account/events

This returns a refined list of events sent to this account.

  • organization (string) - Optional organization filter

  • cluster_id (string) - Optional cluster filter

  • page (string) - Optional page to request

  • count (string) - Optional count per page

Example URI

GET /v2/account/events
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
    "page": 1,
    "count": 25,
    "data": [{
        ...
    }]
}

Clusters

Create, delete, scale, and manage Containership Cloud clusters.

Organization Clusters

List all clusters
GET/v2/organizations/{organization}/clusters

This lists all clusters belonging to the specified organization.

  • since (timestamp) - Optional start time to look for clusters (epochtime)

Example URI

GET /v2/organizations/organization/clusters
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

Response  200
HideShow
Headers
Content-Type: application/json
Body
[
    {
        "api_version": "v1",
        "applications": {...},
        "cluster_state": {...},
        "configuration": {...},
        "created_at": "2017-06-01T10:40:58.790Z"
        "environment": "staging",
        "hosts": {...},
        "id": "12345678-176f-4a81-1234-146f123456",
        "ipaddress": "123.123.123.123",
        "locked": true,
        "name": "My Staging Cluster",
        "organization": "12345678-6789-3456-8b1f-1234566789",
        "owner": "qw678cad5-h579-43ed-1234-7ru9985s4523",
        "permissions": {read: [], admin: [], write: []},
        "port": 80,
        "provider": "digital_ocean",
        "provider_name": "Digital Ocean",
        "schedule": null,
        "snapshotting_configuration": {},
        "updated_at": "2017-06-07T03:53:36.368Z"
    }
]

Create cluster
POST/v2/organizations/{organization}/clusters

This creates a containership cloud cluster in the specified cloud provider.

  • provider (string) - Provider to create cluster on

  • configuration (object) - Configuration for the cluster

  • configuration.leaders (object) - Configuration for the cluster leaders

  • configuration.leaders.instances (object[]) - Configuration for the cluster leader instances

  • configuration.followers (object) - Configuration for the cluster followers

  • configuration.followers.instances (object[]) - Configuration for the cluster follower instances

  • configuration.general (object) - General configuration for the cluster

Example URI

POST /v2/organizations/organization/clusters
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

Request
HideShow
Headers
Content-Type: application/json
Body
{
    "provider": "amazon_web_services",
    "configuration": {
        "general": {...}
        "leaders": {
            "instances": [...],
            ...
        },
        "followers": {
            "instances": [...],
            ...
        }
    }
}
Response  201

Cluster Actions

Get cluster details
GET/v2/organizations/{organization}/clusters/{cluster_id}

This gets the details of the specified containership cloud cluster.

Example URI

GET /v2/organizations/organization/clusters/cluster_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

cluster_id
string (required) 

ID of cluster

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
    "api_version": "v1",
    "applications": {...},
    "cluster_state": {...},
    "configuration": {...},
    "created_at": "2017-06-01T10:40:58.790Z"
    "environment": "staging",
    "hosts": {...},
    "id": "12345678-176f-4a81-1234-146f123456",
    "ipaddress": "123.123.123.123",
    "locked": true,
    "name": "My Staging Cluster",
    "organization": "12345678-6789-3456-8b1f-1234566789",
    "owner": "qw678cad5-h579-43ed-1234-7ru9985s4523",
    "permissions": {read: [], admin: [], write: []},
    "port": 80,
    "provider": "digital_ocean",
    "provider_name": "Digital Ocean",
    "schedule": null,
    "snapshotting_configuration": {},
    "updated_at": "2017-06-07T03:53:36.368Z"
}

Update cluster details
PUT/v2/organizations/{organization}/clusters/{cluster_id}

This updates the name, environment, lock status, schedule, or permissions of the specified containership cloud cluster. Only the values being updated need to be specified in the request body.

  • name (string) - Cluster name

  • environment (string) - Cluster environment

  • locked (boolean) - Lock changes to the cluster

  • schedule (object) - Cluster update schedule

  • schedule.day (number) - Day schedule for updates

  • schedule.hour (number) - Hour schedule for updates

  • schedule.minute (number) - Minute schedule for updates

  • permissions (object) - Permissions for the cluster

  • permissions.read (string[]) - Array of team ids for read permission for the cluster

  • permissions.write (string[]) - Array of team ids for write permission for the cluster

  • permissions.admin (string[]) - Array of team ids for admin permission for the cluster

Example URI

PUT /v2/organizations/organization/clusters/cluster_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

cluster_id
string (required) 

ID of cluster

Request
HideShow
Headers
Content-Type: application/json
Body
{
    "name": "My Cool Cluster",
    "environment": "testing",
    "locked": false,
    schedule: {
        day: 15,
        hour: 2,
        minute: 0
    },
    permissions: {
        read: ["12345678-1234..."],
        write: [],
        admin: []
    }
}
Response  200

Register cluster
POST/v2/organizations/{organization}/clusters/{cluster_id}

This registers the cluster with containership cloud and updates the checked in timestamps.

  • port (number) - Port containership is running on in the cluster

  • ipaddress (string) - IP Address of the cluster

  • api_version (string) - API version the cluster is running

  • provider (string) - Provider the cluster is running on

Example URI

POST /v2/organizations/organization/clusters/cluster_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

cluster_id
string (required) 

ID of cluster

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "port": 80,
  "ipaddress": "123.123.123.123",
  "api_version": "v1",
  "provider": "rackspace"
}
Response  201

Delete cluster
DELETE/v2/organizations/{organization}/clusters/{cluster_id}

This deletes the cluster in containership cloud and its associated VMs within the cloud provider.

Example URI

DELETE /v2/organizations/organization/clusters/cluster_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

cluster_id
string (required) 

ID of cluster

Response  204

Get Instances

Get VM instances in cluster
GET/v2/organizations/{organization}/clusters/{cluster_id}/instances

Example URI

GET /v2/organizations/organization/clusters/cluster_id/instances
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

cluster_id
string (required) 

ID of cluster

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
    "leaders": {
       "instances": [...]
    },
    "followers": {
       "instances": [...]
    },
   "general": {
       "provider": "Digital Ocean"
    }
}

Get Instance IPs

Get IP addresses of instances in cluster
GET/v2/organizations/{organization}/clusters/{cluster_id}/instances/ips

Example URI

GET /v2/organizations/organization/clusters/cluster_id/instances/ips
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

cluster_id
string (required) 

ID of cluster

Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  "123.123.123.123/32",
  "123.123.123.124/32"
]

Scale Hosts

Add additional hosts
PUT/v2/organizations/{organization}/clusters/{cluster_id}/hosts

This adds additional VM hosts to the specified cluster.

  • leaders (object[]) - Leader instance configurations to add

  • followers (object[]) - Follower instance configurations to add

Example URI

PUT /v2/organizations/organization/clusters/cluster_id/hosts
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

cluster_id
string (required) 

ID of cluster

Request
HideShow
Headers
Content-Type: application/json
Body
{
    "leaders": [{...}],
    "followers": []
}
Response  204

Delete Host

Delete host by id
DELETE/v2/organizations/{organization}/clusters/{cluster_id}/host/{host_id}

This removes a specified host from the cluster and deletes the virtual machine within the cloud provider.

Example URI

DELETE /v2/organizations/organization/clusters/cluster_id/host/host_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

cluster_id
string (required) 

ID of cluster

host_id
string (required) 

ID of host

Response  204

Cluster Proxy

Cluster Proxy
GET/v2/organizations/{organization}/clusters/{cluster_id}/proxy

This will use the request data to proxy a request to the Core API on the cluster. See the Core API documentation for possible requests.

  • method (string) - Method for proxy request

  • url (string) - Path for proxy request

  • qs (object) - Query string for proxy request

  • data (object) - Data for proxy request

Example URI

GET /v2/organizations/organization/clusters/cluster_id/proxy
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

cluster_id
string (required) 

ID of cluster

Response  200

Cluster Proxy
POST/v2/organizations/{organization}/clusters/{cluster_id}/proxy

This will use the request data to proxy a request to the Core API on the cluster. See the Core API documentation for possible requests.

  • method (string) - Method for proxy request

  • url (string) - Path for proxy request

  • qs (object) - Query string for proxy request

  • data (object) - Data for proxy request

Example URI

POST /v2/organizations/organization/clusters/cluster_id/proxy
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

cluster_id
string (required) 

ID of cluster

Response  200

Snapshots

Containership Cloud cluster snapshots. We are switching terminology from “backup” to “snapshot”, you will see them used interchangably in this section.

Organization Snapshots

Get all snapshots for organization
GET/v2/organizations/{organization}/backups

This will return an array of all of the snapshots made of clusters within the organization.

Example URI

GET /v2/organizations/organization/backups
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

Response  200
HideShow
Headers
Content-Type: application/json
Body
[
    {
        "applications": {...},
        "cluster_id": "12345678-62bd-4d2c-a9f8-12345678923",
        "cluster_name": "My Cluster",
        "created_at": "2017-06-07T02:07:52.865Z",
        "firewalls": [...],
        "id": "12345678-1234-464d-1234-c96e9755c856",
        "isRestorable": true,
        "loadbalancers": [...],
        "notes": "Backup of My Cluster",
        "organization": "12345678-6c2f-1234-8b1f-123456203cbd",
        "persist_data": false,
        "provider": "digital_ocean",
        "updated_at": "2017-06-07T02:07:52.865Z"
    }
]

Create a snapshot
POST/v2/organizations/{organization}/backups

This creates a snapshot of the specified cluster.

  • cluster_id (string) - ID of cluster to take snapshot of

  • persist_data (boolean) - Persist containership managed volumes on cluster applications

  • notes (string) - Notes to associate with the snapshot

Example URI

POST /v2/organizations/organization/backups
URI Parameters
HideShow
organization
string (required) 

Currently selected organization id

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "cluster_id": "12345678-62bd-4d2c-a9f8-12345678923",
  "persist_data": true,
  "notes": "This is my snapshot"
}
Response  201

Cluster Snapshots

Get all snapshots of a given cluster
GET/v2/organizations/{organization}/clusters/{cluster_id}/snapshots

This will return an array of all of the snapshots made of a given cluster within an organization.

Example URI

GET /v2/organizations/organization/clusters/cluster_id/snapshots
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

Cluster to get snapshots of

Response  200
HideShow
Headers
Content-Type: application/json
Body
[
    {
        "applications": {...},
        "cluster_id": "12345678-62bd-4d2c-a9f8-12345678923",
        "cluster_name": "My Cluster",
        "created_at": "2017-06-07T02:07:52.865Z",
        "firewalls": [...],
        "id": "12345678-1234-464d-1234-c96e9755c856",
        "isRestorable": true,
        "loadbalancers": [...],
        "notes": "Backup of My Cluster",
        "organization": "12345678-6c2f-1234-8b1f-123456203cbd",
        "persist_data": false,
        "provider": "digital_ocean",
        "updated_at": "2017-06-07T02:07:52.865Z"
    }
]

Snapshot Actions

Get an individual snapshot
GET/v2/organizations/{organization}/backups/{backup_id}

This gets the details of a specific snapshot.

Example URI

GET /v2/organizations/organization/backups/backup_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

backup_id
string (required) 

Snapshot id

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
    "applications": {...},
    "cluster_id": "12345678-62bd-4d2c-a9f8-12345678923",
    "cluster_name": "My Cluster",
    "created_at": "2017-06-07T02:07:52.865Z",
    "firewalls": [...],
    "id": "12345678-1234-464d-1234-c96e9755c856",
    "isRestorable": true,
    "loadbalancers": [...],
    "notes": "Backup of My Cluster",
    "organization": "12345678-6c2f-1234-8b1f-123456203cbd",
    "persist_data": false,
    "provider": "digital_ocean",
    "updated_at": "2017-06-07T02:07:52.865Z"
}

Edit an individual snapshot
PUT/v2/organizations/{organization}/backups/{backup_id}

This edits the notes of a specified snapshot.

  • notes (string) - Updated notes to associate with the snapshot

Example URI

PUT /v2/organizations/organization/backups/backup_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

backup_id
string (required) 

Snapshot id

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "notes": "Snapshot of That Cluster"
}
Response  200

Delete a snapshot
DELETE/v2/organizations/{organization}/backups/{backup_id}

This deletes the specified snapshot.

Example URI

DELETE /v2/organizations/organization/backups/backup_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

backup_id
string (required) 

Snapshot id

Response  204

Snapshot Restore

Restore a snapshot to a cluster
POST/v2/organizations/{organization}/backups/{backup_id}/restore

This restores a snapshot to the specified cluster.

  • cluster_id (string) - ID of cluster to restore the snapshot to

  • destroy (boolean) - Should Containership clear the cluster of its current applications before adding those in the snapshot

Example URI

POST /v2/organizations/organization/backups/backup_id/restore
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

backup_id
string (required) 

Snapshot id

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "cluster_id": "Snapshot of That Cluster",
  "destroy": true
}
Response  201

Events

These actions get, create, and mark cluster events as seen by users.

Cluster Events

Get all cluster events
GET/v2/organizations/{organization}/clusters/{cluster_id}/events

This gets all events for a given cluster.

  • page (number) - Optional page to request

  • count (number) - Optional count per page

Example URI

GET /v2/organizations/organization/clusters/cluster_id/events
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

Cluster id

Response  200
HideShow
Headers
Content-Type: application/json
Body
[{
    "count": 25
    "data": [...]
    "page": 0
    "total_unread": 3
}]

Create a cluster event
POST/v2/organizations/{organization}/clusters/{cluster_id}/events

This creates a cluster event.

  • event (string) - Event to add to the cluster

Example URI

POST /v2/organizations/organization/clusters/cluster_id/events
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

Cluster id

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "event": "Cluster name changed to 'My Cool Cluster'"
}
Response  201

Cluster Event Seen

Event Seen
PUT/v2/organizations/{organization}/events/{event_id}/seen

This adds the current user to the event seen by

Example URI

PUT /v2/organizations/organization/events/event_id/seen
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

event_id
string (required) 

Event id

Response  200

Cluster Events Seen

Events Seen
PUT/v2/organizations/{organization}/events/seen

This adds the current user to the seen by for all specified events

  • event_ids (string[]) - Event ids to add user to seen by of

Example URI

PUT /v2/organizations/organization/events/seen
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "event_ids": [
    "123123-123..."
  ]
}
Response  200

Firewalls

Actions to list, edit, create, or remove firewall rules for the givne cluster.

Cluster Firewalls

Get all firewalls
GET/v2/organizations/{organization}/clusters/{cluster_id}/firewalls

This returns a list of all the firewall rules for the current cluster.

Example URI

GET /v2/organizations/organization/clusters/cluster_id/firewalls
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

ID of cluster

Response  200
HideShow
Headers
Content-Type: application/json
Body
[{
    "application": null,
    "cluster_id": "12345678-176f-1234-1234-1234567a0e70"
    "created_at": "2017-06-01T10:49:52.847Z"
    "description": "open ssh"
    "host": {
        "mode": "all",
        "type": "mode"
    },
    "id": "1112223-1234-1234-1234-12345678923"
    "interface": null,
    "loadbalancer": null,
    "organization": "33344456-1234-1234-1234-123456203cbd",
    "port": "22",
    "protocol": "tcp",
    "source": {
        "cidr": "0.0.0.0/32",
        "type": "cidr"
    },
    "type": "host",
    "updated_at": "2017-06-01T10:49:52.847Z"
}]

Create firewall rule
POST/v2/organizations/{organization}/clusters/{cluster_id}/firewalls

This creates a firewall rule for the given cluster.

  • description (string) - Description of firewall rule

  • protocol (string) - tcp or udp

  • type (string) - Type of rule to create, host, application, or loadbalancer.

  • application, host, or loadbalacer (string or object) - value to apply rule to given the type

  • source (object) - Source for the firewall to allow

Example URI

POST /v2/organizations/organization/clusters/cluster_id/firewalls
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

ID of cluster

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "description": "new rule",
  "protocol": "tcp",
  "type": "application",
  "application": "containership-logs",
  "source": {
    "cidr": "0.0.0.0/0",
    "type": "cidr"
  }
}
Response  201

Cluster Firewall

Get firewall rule
GET/v2/organizations/{organization}/clusters/{cluster_id}/firewalls/{firewall_id}

This gets a specific cluster firewall rule by id.

Example URI

GET /v2/organizations/organization/clusters/cluster_id/firewalls/firewall_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

ID of cluster

firewall_id
string (required) 

ID of firewall rule

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
    "application": null,
    "cluster_id": "12345678-176f-1234-1234-1234567a0e70"
    "created_at": "2017-06-01T10:49:52.847Z"
    "description": "open ssh"
    "host": {
        "mode": "all",
        "type": "mode"
    },
    "id": "1112223-1234-1234-1234-12345678923"
    "interface": null,
    "loadbalancer": null,
    "organization": "33344456-1234-1234-1234-123456203cbd",
    "port": "22",
    "protocol": "tcp",
    "source": {
        "cidr": "0.0.0.0/32",
        "type": "cidr"
    },
    "type": "host",
    "updated_at": "2017-06-01T10:49:52.847Z"
}

Edit firewall rule
PUT/v2/organizations/{organization}/clusters/{cluster_id}/firewalls/{firewall_id}

This edits the firewall rule, all parts of the rule must be sent, even the items not being updated.

  • description (string) - Description of firewall rule

  • protocol (string) - tcp or udp

  • type (string) - Type of rule to create, host, application, or loadbalancer.

  • application, host, or loadbalacer (string or object) - value to apply rule to given the type

  • source (object) - Source for the firewall to allow

Example URI

PUT /v2/organizations/organization/clusters/cluster_id/firewalls/firewall_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

ID of cluster

firewall_id
string (required) 

ID of firewall rule

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "description": "new rule description",
  "protocol": "tcp",
  "type": "application",
  "application": "containership-logs",
  "source": {
    "cidr": "0.0.0.0/0",
    "type": "cidr"
  }
}
Response  200

Delete Firewall Rule
DELETE/v2/organizations/{organization}/clusters/{cluster_id}/firewalls/{firewall_id}

This deletes the firewall associated with the id.

Example URI

DELETE /v2/organizations/organization/clusters/cluster_id/firewalls/firewall_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

ID of cluster

firewall_id
string (required) 

ID of firewall rule

Response  204

Loadbalancers

Actions to get, create, update, and delete loadbalancers.

Cluster Application Loadbalancers

Get All Loadbalancers
GET/v2/organizations/{organization}/clusters/{cluster_id}/loadbalancers

This gets all loadbalancers for the specified cluster.

Example URI

GET /v2/organizations/organization/clusters/cluster_id/loadbalancers
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

ID of cluster

Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  {
    "application": "redis",
    "basic_auth": {},
    "cluster_id": "1234567-1234-124-1243-123456789",
    "created_at": "2017-06-01T16:39:26.785Z",
    "domains": null,
    "force_https": null,
    "id": "12345678-3333-5555-2222-123456789",
    "listen_port": 6379,
    "organization": "222333444-1234-5555-3333-123412342123",
    "type": "tcp",
    "updated_at": "2017-06-01T16:39:26.785Z"
  }
]

Create new loadbalancer
POST/v2/organizations/{organization}/clusters/{cluster_id}/loadbalancers

This creates a new loadbalancer for an application on the current cluster.

  • application (string) - Application to add loadbalancer to

  • listen_port (number) - Port the loadbalancer will balance requests on, not necessarily the port the application is actually listening on.

  • ssl (object) - Optional SSL configuration for https loadbalancers

  • ssl.cert (string) - SSL certificate

  • ssl.key (string) - SSL key

  • domains (string[]) - List of domains for loadbalancer to route to application. Containership automatically adds the actual domain of the application.

  • type (string) - tcp | http | https loadbalancer type

  • force_https (boolean) - force https requests, only if ssl is on

Example URI

POST /v2/organizations/organization/clusters/cluster_id/loadbalancers
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

ID of cluster

Request
HideShow
Headers
Content-Type: application/json
Body
{
    "application":"my-app",
    "listen_port": 80,
    "ssl": {
        cert: "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----",
        key: "-----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----"
    },
    "domains": ["http://mycooldomain.com"],
    "type": "http",
    "force_https": false
}
Response  201

Cluster Application Loadbalancer

Get Loadbalancer by ID
GET/v2/organizations/{organization}/clusters/{cluster_id}/loadbalancers/{loadbalancer_id}

This gets a loadbalancer on the current cluster by its ID.

Example URI

GET /v2/organizations/organization/clusters/cluster_id/loadbalancers/loadbalancer_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

ID of cluster

loadbalancer_id
string (required) 

ID of loadbalancer

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "application": "redis",
  "basic_auth": {},
  "cluster_id": "1234567-1234-124-1243-123456789",
  "created_at": "2017-06-01T16:39:26.785Z",
  "domains": null,
  "force_https": null,
  "id": "12345678-3333-5555-2222-123456789",
  "listen_port": 6379,
  "organization": "222333444-1234-5555-3333-123412342123",
  "type": "tcp",
  "updated_at": "2017-06-01T16:39:26.785Z"
}

Update loadbalancer
PUT/v2/organizations/{organization}/clusters/{cluster_id}/loadbalancers/{loadbalancer_id}

This updates the specified fields of the loadbalancer. All fields must be resent.

  • application (string) - Application to add loadbalancer to

  • listen_port (number) - Port the loadbalancer will balance requests on, not necessarily the port the application is actually listening on.

  • ssl (object) - Optional SSL configuration for https loadbalancers

  • ssl.cert (string) - SSL certificate

  • ssl.key (string) - SSL key

  • domains (string[]) - List of domains for loadbalancer to route to application. Containership automatically adds the actual domain of the application.

  • type (string) - tcp | http | https loadbalancer type

  • force_https (boolean) - force https requests, only if ssl is on

Example URI

PUT /v2/organizations/organization/clusters/cluster_id/loadbalancers/loadbalancer_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

ID of cluster

loadbalancer_id
string (required) 

ID of loadbalancer

Request
HideShow
Headers
Content-Type: application/json
Body
{
    "application":"my-app",
    "listen_port": 80,
    "ssl": {
        cert: "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----",
        key: "-----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----"
    },
    "domains": ["http://mycooldomain.com"],
    "type": "http",
    "force_https": false
}
Response  200

Delete loadbalancer
DELETE/v2/organizations/{organization}/clusters/{cluster_id}/loadbalancers/{loadbalancer_id}

This deletes the specified loadbalancer.

Example URI

DELETE /v2/organizations/organization/clusters/cluster_id/loadbalancers/loadbalancer_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

cluster_id
string (required) 

ID of cluster

loadbalancer_id
string (required) 

ID of loadbalancer

Response  204

Client Metadata

Client Metadata

Get Client Metadata
GET/v2/metadata

Example URI

GET /v2/metadata
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "ip_address": "123.123.123.123"
}

Organizations

Actions to manage organizations, teams, and user membership.

Create Organization

Create Organization
POST/v2/organizations

Creates organization in the given tier.

  • organization (string) - Organization name

  • tier (string) - Organization tier, ie “tier:🆓:monthly”

  • billing_token (string) - Stripe card token, only if tier is not free

Example URI

POST /v2/organizations
Request
HideShow
Headers
Content-Type: application/json
Body
{
    "organization":"My Cool Company",
    "tier": tier::developer::monthly,
    "billing_token": "asdf124...."
}
Response  201

User Organization

Get Organization
GET/v2/organizations/{organization}

Gets organization details.

Example URI

GET /v2/organizations/organization
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
    "created_at": "2016-08-01T15:23:50.807Z",
    "updated_at": "2017-05-26T20:10:10.309Z",
    "id": "12345-1234-1234-1234-123454678",
    "legacy_id": null,
    "name": "My Cool Organization",
    "owner": "22222-7533320-11234-6666-12341234098",
    "api_key": "9876544-2345-6543-3456-0987223999",
    "billing":{
        "tier":"developer",
        "stripe_plan":"tier::developer::monthly",
        "id": "asdfasdf"
    },
    "balance": 0,
    "coupon": null,
    "sources":[{
        "id":"card_asdfoiu1234...",
        "brand": "Visa",
        "expiration": {
            "month":10,
            "year":2012
        },
        "last_4":"1111"
    }],
    "transactions": [...],
    "subscriptions": {...},
    "metadata": {...},
    "locked":false,
    "users":[{
        "method":"github",
        "id": "999999-1234-1234-1234-12343456dfg",
        "display_name": "Jane Doe",
        "email": "test@containership.io"
    }],
    "teams":[{
        "created_at":"2016-12-13T02:10:00.337Z",
        "updated_at":null,
        "id":"asdfasdf-asdf-asdf-asdf-asdfasdfas",
        "organization":"12345-1234-1234-1234-123454678",
        "name":"admin",
        "description":"Admin team",
        "admin_team": true,
        "users":[{
            "method":"github",
            "id": "999999-1234-1234-1234-12343456dfg",
            "display_name": "Jane Doe",
            "email": "test@containership.io"
        }]
    }]
}

Update Organization
PUT/v2/organizations/{organization}

Update organization name.

  • organization_name (string) - New organization name

Example URI

PUT /v2/organizations/organization
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "organization_name": "My New Cool Company"
}
Response  200

Delete Organization
DELETE/v2/organizations/{organization}

Deletes selected organization.

Example URI

DELETE /v2/organizations/organization
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Response  204

Organization billing

Update Organization Billing
PUT/v2/organizations/{organization}/billing

Updates organization’s billing, source, coupon, and subscriptions. All are optional.

  • billing_token (string) - New stripe card token

  • tier (string) - Tier to update to

  • subscriptions (object[]) - List of subscriptions for the org

  • subscriptions[].id (string) - ID of the subscription object

  • subscriptions[].plan_number (string) - Plan number of the subscription

Example URI

PUT /v2/organizations/organization/billing
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Request
HideShow
Headers
Content-Type: application/json
Body
{
    "billing_token": "card_asdfsdf",
    "tier": "tier::startup::monthly",
    subscriptions: [...]
}
Response  200

Invite Organization User

Invite Organization User
POST/v2/organizations/{organization}/users

If the user already has a containership account it will add them to the organization, if they do not it will send them an invite and add them to the organization.

  • username (string) - SCM username of the user to invite

  • method (string) - SCM provider to invite the user through

Example URI

POST /v2/organizations/organization/users
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "username": "testname",
  "method": "github"
}
Response  201

Remove Organization User

Remove Organization User
DELETE/v2/organizations/{organization}/users/{user_id}

Removes user from organization.

Example URI

DELETE /v2/organizations/organization/users/user_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

user_id
string (required) 

ID of user to remove

Response  204

Organization Teams

Get all organization teams
GET/v2/organizations/{organization}/teams

This gets a list of all teams and members within this organization.

Example URI

GET /v2/organizations/organization/teams
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  {
    "created_at": "2016-12-13T02:10:00.337Z",
    "updated_at": null,
    "id": "asdfasdf-asdf-asdf-asdf-asdfasdfas",
    "organization": "12345-1234-1234-1234-123454678",
    "name": "admin",
    "description": "Admin team",
    "admin_team": true,
    "users": [
      {
        "method": "github",
        "id": "999999-1234-1234-1234-12343456dfg",
        "display_name": "Jane Doe",
        "email": "test@containership.io"
      }
    ]
  }
]

Create new organization team
POST/v2/organizations/{organization}/teams

This creates a new team within the organization.

  • name (string) - Team name

  • description (string) - Team description

  • users (string[]) - List of member user ids

Example URI

POST /v2/organizations/organization/teams
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "name": "Team Name",
  "description": "Team of important people",
  "users": [
    "12341234-1234-1234-123454326"
  ]
}
Response  201

Organization Team

Get Organization Team
GET/v2/organizations/{organization}/teams/{team}

This gets the details of the specified organization team.

Example URI

GET /v2/organizations/organization/teams/team
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

team
string (required) 

ID of team

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "created_at": "2016-12-13T02:10:00.337Z",
  "updated_at": null,
  "id": "asdfasdf-asdf-asdf-asdf-asdfasdfas",
  "organization": "12345-1234-1234-1234-123454678",
  "name": "admin",
  "description": "Admin team",
  "admin_team": true,
  "users": [
    {
      "method": "github",
      "id": "999999-1234-1234-1234-12343456dfg",
      "display_name": "Jane Doe",
      "email": "test@containership.io"
    }
  ]
}

Update Organization Team
PUT/v2/organizations/{organization}/teams/{team}

This updates the details of the specified organization team. All are optional.

  • name (string) - Team name

  • description (string) - Team description

  • users (string[]) - List of member user ids

Example URI

PUT /v2/organizations/organization/teams/team
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

team
string (required) 

ID of team

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "name": "Team Name",
  "description": "Team of important people",
  "users": [
    "12341234-1234-1234-123454326"
  ]
}
Response  200

Delete Organization Team
DELETE/v2/organizations/{organization}/teams/{team}

This deletes the specified organization team. You cannot delete the admin team.

Example URI

DELETE /v2/organizations/organization/teams/team
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

team
string (required) 

ID of team

Response  204

Providers

Actions for configuring and verifying possible cloud providers.

Get All Provider Configs

Get All Provider Configs
GET/v2/providers

Get all possible provider configurations.

Example URI

GET /v2/providers
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  {
    "abv": "do",
    "affiliate_link": "https://m.do.co/c/bdfa177d563e",
    "beta": {
      "private": false,
      "public": false
    },
    "connected": true,
    "credentials": {
      "token": {
        "type": "string"
      }
    },
    "docs_link": "https://docs.containership.io/cluster-provisioning/cloud-integrations/digital-ocean",
    "enabled": true,
    "full_name": "Digital Ocean",
    "legiond_interface": {
      "private": "eth1",
      "public": "eth0"
    },
    "link": "https://cloud.digitalocean.com/login",
    "logo": "https://cdn.containership.io/logos/digital_ocean.svg",
    "name": "digital_ocean"
  }
]

Get Provider Config

Get Provider Config
GET/v2/providers/{provider}

Get configuration for provider.

Example URI

GET /v2/providers/provider
URI Parameters
HideShow
provider
string (required) 

Provider name

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "abv": "do",
  "affiliate_link": "https://m.do.co/c/bdfa177d563e",
  "beta": {
    "private": false,
    "public": false
  },
  "connected": true,
  "credentials": {
    "token": {
      "type": "string"
    }
  },
  "docs_link": "https://docs.containership.io/cluster-provisioning/cloud-integrations/digital-ocean",
  "enabled": true,
  "full_name": "Digital Ocean",
  "legiond_interface": {
    "private": "eth1",
    "public": "eth0"
  },
  "link": "https://cloud.digitalocean.com/login",
  "logo": "https://cdn.containership.io/logos/digital_ocean.svg",
  "name": "digital_ocean"
}

Get Configured Cloud Providers

Get Configured Cloud Providers
GET/v2/organizations/{organization}/providers

This gets a list of all currently configured cloud providers for this organization.

Example URI

GET /v2/organizations/organization/providers
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  {
    "abv": "do",
    "affiliate_link": "https://m.do.co/c/bdfa177d563e",
    "beta": {
      "private": false,
      "public": false
    },
    "connected": true,
    "credentials": {
      "token": {
        "type": "string"
      }
    },
    "docs_link": "https://docs.containership.io/cluster-provisioning/cloud-integrations/digital-ocean",
    "enabled": true,
    "full_name": "Digital Ocean",
    "legiond_interface": {
      "private": "eth1",
      "public": "eth0"
    },
    "link": "https://cloud.digitalocean.com/login",
    "logo": "https://cdn.containership.io/logos/digital_ocean.svg",
    "name": "digital_ocean"
  }
]

Configured Cloud Provider

Get Configured Cloud Provider
GET/v2/organizations/{organization}/providers/{provider}

This gets a currently configured cloud provider for this organization.

Example URI

GET /v2/organizations/organization/providers/provider
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

provider
string (required) 

Provider name

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "abv": "do",
  "affiliate_link": "https://m.do.co/c/bdfa177d563e",
  "beta": {
    "private": false,
    "public": false
  },
  "connected": true,
  "credentials": {
    "token": {
      "type": "string"
    }
  },
  "docs_link": "https://docs.containership.io/cluster-provisioning/cloud-integrations/digital-ocean",
  "enabled": true,
  "full_name": "Digital Ocean",
  "legiond_interface": {
    "private": "eth1",
    "public": "eth0"
  },
  "link": "https://cloud.digitalocean.com/login",
  "logo": "https://cdn.containership.io/logos/digital_ocean.svg",
  "name": "digital_ocean"
}

Configure a cloud provider
POST/v2/organizations/{organization}/providers/{provider}

This configures a possible cloud provider for the organization.

  • credentials (object) - Provider credentials

Example URI

POST /v2/organizations/organization/providers/provider
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

provider
string (required) 

Provider name

Request
HideShow
Headers
Content-Type: application/json
Body
{
    "credentials": {...},
}
Response  200

Remove a cloud provider
DELETE/v2/organizations/{organization}/providers/{provider}

This removes a possible cloud provider configuration for the organization.

Example URI

DELETE /v2/organizations/organization/providers/provider
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

provider
string (required) 

Provider name

Response  204

Get Configuration For Launching a Cluster

Get Configuration For Launching a Cluster
GET/v2/organizations/{organization}/providers/{provider}/cluster

This gets the necessary configuration for launching a cluster on this cloud provider. Many selections rely on previous ones, this call needs to be done multiple times with selections in the query string to see new options

Example URI

GET /v2/organizations/organization/providers/provider/cluster
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

provider
string (required) 

Provider name

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
    ...
}

Verify Cluster Order

Verify Cluster Order
GET/v2/organizations/{organization}/providers/{provider}/cluster/verify

Certain providers do not have strict size amounts and pricing, these must be ordered and verified, currently only Bluemix.

Example URI

GET /v2/organizations/organization/providers/provider/cluster/verify
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

provider
string (required) 

Provider name

Response  200

Registries

Actions to manage and link docker registries to Continership cloud.

Get All Registry Configs

Get All Registry Configs
GET/v2/registries

This gets all possible configurations for supported docker registry providers

Example URI

GET /v2/registries
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
    "dockerhub": {
        "credentials": {
            "username": {
                "type": "string"
            },
            "password": {
                "type": "string"
            },
            "email": {
                "type": "string"
            }
        },
        "id": "dockerhub",
        "logo": "https://cdn.containership.io/images/docker.svg",
        "name":"Dockerhub"
    }
    ...
}

Get Registry Config

Get Registry Config
GET/v2/registries/{registry}

This returns the configuration for the specified supported docker registry.

Example URI

GET /v2/registries/registry
URI Parameters
HideShow
registry
string (required) 

Registry name

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "credentials": {
    "username": {
      "type": "string"
    },
    "password": {
      "type": "string"
    },
    "email": {
      "type": "string"
    }
  },
  "id": "dockerhub",
  "logo": "https://cdn.containership.io/images/docker.svg",
  "name": "Dockerhub"
}

Get all linked registries

Get All Linked Registries
GET/v2/organizations/{organization}/registries

This gets all docker registries linked to this organization.

Example URI

GET /v2/organizations/organization/registries
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  {
    "created_at": "2016-12-14T15:47:01.953Z",
    "email": "test@test.com",
    "id": "12341234-1234-1234-1234-1234sdfg123",
    "organization": "22222222-1234-1234-1234-1234sdgf",
    "owner": "33333333-1234-1234-1234-1234asdf",
    "provider": "quay",
    "serveraddress": "quay.io",
    "updated_at": null,
    "username": "myusername"
  }
]

Organization Registries

Get Linked Registry
GET/v2/organizations/{organization}/registries/{registry_id}

This gets the details for a specified linked registry.

Example URI

GET /v2/organizations/organization/registries/registry_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

registry_id
string (required) 

Registry ID

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "created_at": "2016-12-14T15:47:01.953Z",
  "email": "test@test.com",
  "id": "12341234-1234-1234-1234-1234sdfg123",
  "organization": "22222222-1234-1234-1234-1234sdgf",
  "owner": "33333333-1234-1234-1234-1234asdf",
  "provider": "quay",
  "serveraddress": "quay.io",
  "updated_at": null,
  "username": "myusername"
}

Delete Linked Registry
DELETE/v2/organizations/{organization}/registries/{registry_id}

This deleted the configuration of the linked registry.

Example URI

DELETE /v2/organizations/organization/registries/registry_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

registry_id
string (required) 

Registry ID

Response  204

SSH Management

Actions for managing account ssh keys.

Add an SSH Key

Add an SSH Key

Add a new SSH Key to your containership cloud account.

  • name (string) - Name for key

  • key (string) - Public key

  • Request (application/json)

    {
          "name": "My CS Key",
          "key": "asdfasdfojk...."
      }
  • Response 201

Get Cluster SSH Keys

Get Cluster SSH Keys

Returns all public keys for user’s with admin access to the given cluster.

  • Response 200 (application/json)

    [{
          "created_at": "2016-12-14T15:47:01.953Z",
          "updated_at": "2016-12-14T15:47:01.953Z",
          "key": "asdfasf123...",
          "name": "My CS Key"
          "user_id": "123412345-1234-1234-1234-1234567"
      }]

Delete SSH Key

Delete SSH Key
DELETE/v2/ssh_keys/{key_id}

Deletes an SSH Key by id.

Example URI

DELETE /v2/ssh_keys/key_id
URI Parameters
HideShow
key_id
string (required) 

Key id

Response  200

Stacks

Actions for getting stacks

Get All Stacks

Get All Stacks
GET/v2/stacks

This returns all of the marketplce application stacks.

Example URI

GET /v2/stacks
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
    "private": [...],
    "public": [...]
}

Get Stack

Get Stack
GET/v2/stacks/{stack_id}

This will get the stack for the given id.

Example URI

GET /v2/stacks/stack_id
URI Parameters
HideShow
stack_id
string (required) 

Stack id

Response  200
HideShow
Headers
Content-Type: application/json
Body
{...}

Tickets

Support Tickets

Create a Ticket
POST/v2/organizations/{organization}/tickets

This creates a support ticket.

  • subject (string) - Subject of support ticket

  • body (string) - Body of support ticket

Example URI

POST /v2/organizations/organization/tickets
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "subject": "My support ticket",
  "body": "This thing isnt working right."
}
Response  201

Get All Support Tickets
GET/v2/organizations/{organization}/tickets

This gets all support tickets for the given organization.

Example URI

GET /v2/organizations/organization/tickets
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

Response  200
HideShow
Headers
Content-Type: application/json
Body
[
  {
    "created_at": "2017-05-30T20:40:22Z",
    "id": 12345,
    "num_comments": 1,
    "priority": "normal",
    "status": "open",
    "subject": "test",
    "updated_at": "2017-05-30T20:40:22Z"
  }
]

Support Ticket

Get Support Ticket
GET/v2/organizations/{organization}/tickets/{ticket_id}

This get the details for a support ticket by id.

Example URI

GET /v2/organizations/organization/tickets/ticket_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

ticket_id
string (required) 

Ticket ID

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "comments": [
    {
      "body": "My issue details",
      "created_at": "2017-05-30T20:40:22Z",
      "id": 123412341234
    }
  ],
  "created_at": "2017-05-30T20:40:22Z",
  "id": 12345,
  "priority": "normal",
  "status": "open",
  "subject": "Test Subject",
  "updated_at": "2017-05-30T20:40:22Z"
}

Edit Support Ticket
PUT/v2/organizations/{organization}/tickets/{ticket_id}

This edits the support ticket and adds comments. All current data must also be sent.

  • comments (object[]) - Array of ticket comments

  • created_at (string) - Created At

  • id (string) - Ticket ID

  • status (string) - Ticket status

  • subject (string) - Ticket subject

  • priority (string) - Ticket priority

  • updated_at (string) - Updated At

Example URI

PUT /v2/organizations/organization/tickets/ticket_id
URI Parameters
HideShow
organization
string (required) 

Currently selected organization

ticket_id
string (required) 

Ticket ID

Request
HideShow
Headers
Content-Type: application/json
Body
{
  "comments": [
    {
      "body": "My issue details",
      "created_at": "2017-05-30T20:40:22Z",
      "id": 123412341234
    }
  ],
  "created_at": "2017-05-30T20:40:22Z",
  "id": 12345,
  "priority": "normal",
  "status": "open",
  "subject": "Test Subject",
  "updated_at": "2017-05-30T20:40:22Z"
}
Response  200

Generated by aglio on 11 Sep 2017