godo 0,0,1,0 travis-ci

DigitalOcean Go API client

3 years after

Build Status


Godo is a Go client library for accessing the DigitalOcean V2 API.

You can view the client API docs here: http://godoc.org/github.com/digitalocean/godo

You can view DigitalOcean API docs here: https://developers.digitalocean.com/documentation/v2/


import "github.com/digitalocean/godo"

Create a new DigitalOcean client, then use the exposed services to access different parts of the DigitalOcean API.


Currently, Personal Access Token (PAT) is the only method of authenticating with the API. You can manage your tokens at the DigitalOcean Control Panel Applications Page.

You can then use your token to create a new client:

import "golang.org/x/oauth2"

pat := "mytoken"
type TokenSource struct {
    AccessToken string

func (t *TokenSource) Token() (*oauth2.Token, error) {
    token := &oauth2.Token{
        AccessToken: t.AccessToken,
    return token, nil

tokenSource := &TokenSource{
    AccessToken: pat,
oauthClient := oauth2.NewClient(oauth2.NoContext, tokenSource)
client := godo.NewClient(oauthClient)


To create a new Droplet:

dropletName := "super-cool-droplet"

createRequest := &godo.DropletCreateRequest{
    Name:   dropletName,
    Region: "nyc3",
    Size:   "512mb",
    Image: godo.DropletCreateImage{
        Slug: "ubuntu-14-04-x64",

newDroplet, _, err := client.Droplets.Create(createRequest)

if err != nil {
    fmt.Printf("Something bad happened: %s\n\n", err)
    return err


If a list of items is paginated by the API, you must request pages individually. For example, to fetch all Droplets:

func DropletList(client *godo.Client) ([]godo.Droplet, error) {
    // create a list to hold our droplets
    list := []godo.Droplet{}

    // create options. initially, these will be blank
    opt := &godo.ListOptions{}
    for {
        droplets, resp, err := client.Droplets.List(opt)
        if err != nil {
            return nil, err

        // append the current page's droplets to our list
        for _, d := range droplets {
            list = append(list, d)

        // if we are at the last page, break out the for loop
        if resp.Links == nil || resp.Links.IsLastPage() {

        page, err := resp.Links.CurrentPage()
        if err != nil {
            return nil, err

        // set the page we want for the next request
        opt.Page = page + 1

    return list, nil


Each version of the client is tagged and the version is updated accordingly.

Since Go does not have a built-in versioning, a package management tool is recommended - a good one that works with git tags is gopkg.in.

To see the list of past versions, run git tag.


For a comprehensive list of examples, check out the API documentation.

For details on all the functionality in this library, see the GoDoc documentation.


We love pull requests! Please see the contribution guidelines.

Related Repositories



Full-featured BitTorrent client package and utilities ...



A 12-factor app logger built for performance and happy development ...



List of non-trivial golang applications / libraries ...



Let's Upload That Image ! ...



A curated list of awesome Go frameworks, libraries and software. ...

Top Contributors

bryanl phillbaker aybabtme andrewsomething nanzhong raphael macb awmichel chuyeow mikejholly shawnps tbalthazar bfirsh Atul9 bencevans adamvduke bjorand brycereitano carlosdp chaseadamsio dqminh franciscod gianarb mattva01 nathanleclaire nesv oliver006 zyegfryed timfall icosahedral


-   v0.9.0 zip tar
-   v0.7.0 zip tar
-   v0.6.0 zip tar
-   v0.5.0 zip tar
-   v0.4.1 zip tar
-   v0.4.0 zip tar
-   v0.3.1 zip tar
-   v0.3.0 zip tar
-   v0.2.0 zip tar
-   v0.1.0 zip tar
-   0.8.0 zip tar