API Introduction
CloudAPI exposes a REST API over HTTPS. You can work with the REST API by either calling it directly via tooling you already know about (such as curl, et al), or by using the CloudAPI CLIs and SDKs from Joyent. The node-triton CloudAPI SDK & CLI is available as an npm module, which you can install with:
Alternatively, there is the more stable and feature-complete node-smartdc:
Although node-triton has fewer features -- for now -- it will continue to receive the most development effort and future support. node-smartdc is in maintenance.
The rest of this document will show all APIs in terms of both the raw HTTP specification, the CLI commands, and sometimes the node-smartdc SDK.
Issuing Requests
All HTTP calls to CloudAPI must be made over TLS, and requests must carry at least two headers (in addition to standard HTTP headers): Authorization
and Api-Version
. The details are explained below. In addition to these headers, any requests requiring content must be sent in an acceptable scheme to CloudAPI. Details are also below.
Content-Type
For requests requiring content, you can send parameters encoded with application/json
, application/x-www-form-urlencoded
or multipart/form-data
. Joyent recommends application/json
. The value of the Accept
header determines the encoding of content returned in responses. CloudAPI supports application/json
response encodings only.
For example, all of the following are valid calls:
Query String (on the uri):
Form encoded in the body:
JSON in the body:
Authorization
All API calls to CloudAPI require an Authorization header, which supports multiple "schemes". Currently CloudAPI supports only one Authentication mechanism due to PCI compliance restrictions:
HTTP Signature Authentication Scheme. This Scheme is outlined in Appendix B.
In order to leverage HTTP Signature Authentication, only RSA signing mechanisms are supported, and your keyId must be equal to the path returned from a ListKeys API call. For example, if your Triton login is demo
, and you've uploaded an RSA SSH key with the name foo
, an Authorization header would look like:
The default value to sign for CloudAPI requests is simply the value of the HTTP Date
header. For more information on the Date header value, see RFC 2616. All requests to CloudAPI using the Signature authentication scheme must send a Date header. Note that clock skew will be enforced to within 300 seconds (positive or negative) from the value sent.
Full support for the HTTP Signature Authentication scheme is provided in both CloudAPI SDKs; an additional reference implementation for Node.js is available in the npm http-signature
module, which you can install with:
Using cURL with CloudAPI
Since cURL is commonly used to script requests to web services, here's a simple Bash function you can use to wrap cURL when communicating with CloudAPI:
You may need to alter the path to your SSH key in the above function, as well as the path its public-key is saved under in Triton.
With that function, you could just do:
CloudAPI HTTP Responses
CloudAPI returns all response objects as application/json
encoded HTTP bodies. In addition to the JSON body, all responses have the following headers:
If there is content, you can expect:
HTTP Status Codes
Your client should check for each of the following status codes from any API request:
Error Responses
In the event of an error, CloudAPI will return a standard JSON error response object in the body with the scheme:
Where the code element is one of:
Clients are expected to check HTTP status code first, and if it's in the 4xx range, they can leverage the codes above.
Last updated