Droplet Actions
Validated on 19 Jun 2018 • Last edited on 23 Mar 2026
Droplet actions are tasks that can be executed on a Droplet. These can be things like rebooting, resizing, snapshotting, etc.
Droplet action requests are generally targeted at one of the "actions" endpoints for a specific Droplet. The specific actions are usually initiated by sending a POST request with the action and arguments as parameters.
Droplet action requests create a Droplet actions object, which can be used to get information about the status of an action. Creating a Droplet action is asynchronous: the HTTP call will return the action object before the action has finished processing on the Droplet. The current status of an action can be retrieved from either the Droplet actions endpoint or the global actions endpoint. If a Droplet action is uncompleted it may block the creation of a subsequent action for that Droplet, the locked attribute of the Droplet will be true and attempts to create a Droplet action will fail with a status of 422.
https://api.digitalocean.com
Endpoints
POST Acting on Tagged Droplets
/v2/droplets/actions
Authorizations:
bearer_auth
(1 scope)
OAuth Authentication
In order to interact with the DigitalOcean API, you or your application must authenticate.
The DigitalOcean API handles this through OAuth, an open standard for authorization. OAuth allows you to delegate access to your account. Scopes can be used to grant full access, read-only access, or access to a specific set of endpoints.
You can generate an OAuth token by visiting the Apps & API section of the DigitalOcean control panel for your account.
An OAuth token functions as a complete authentication request. In effect, it acts as a substitute for a username and password pair.
Because of this, it is absolutely essential that you keep your OAuth tokens secure. In fact, upon generation, the web interface will only display each token a single time in order to prevent the token from being compromised.
DigitalOcean access tokens begin with an identifiable prefix in order to distinguish them from other similar tokens.
dop_v1_for personal access tokens generated in the control paneldoo_v1_for tokens generated by applications using the OAuth flowdor_v1_for OAuth refresh tokens
Scopes
Scopes act like permissions assigned to an API token. These permissions determine what actions the token can perform. You can create API tokens that grant read-only access, full access, or limited access to specific endpoints by using custom scopes.
Generally, scopes are designed to match HTTP verbs and common CRUD operations (Create, Read, Update, Delete).
| HTTP Verb | CRUD Operation | Scope |
|---|---|---|
| GET | Read | <resource>:read |
| POST | Create | <resource>:create |
| PUT/PATCH | Update | <resource>:update |
| DELETE | Delete | <resource>:delete |
For example, creating a new Droplet by making a POST request to the
/v2/droplets endpoint requires the droplet:create scope while
listing Droplets by making a GET request to the /v2/droplets
endpoint requires the droplet:read scope.
Each endpoint below specifies which scope is required to access it when using custom scopes.
How to Authenticate with OAuth
In order to make an authenticated request, include a bearer-type
Authorization header containing your OAuth token. All requests must be
made over HTTPS.
Authenticate with a Bearer Authorization Header
curl -X $HTTP_METHOD -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" "https://api.digitalocean.com/v2/$OBJECT"
Some actions can be performed in bulk on tagged Droplets. The actions can be
initiated by sending a POST to /v2/droplets/actions?tag_name=$TAG_NAME with
the action arguments.
Only a sub-set of action types are supported:
power_cyclepower_onpower_offshutdownenable_ipv6enable_backupsdisable_backupssnapshot(also requiresimage:createpermission)
Query Parameters
tag_name
optional
env:prodUsed to filter Droplets by a specific tag. Can not be combined with name or type.
Requires tag:read scope.
Request Body: application/json
The type attribute set in the request body will specify the action that
will be taken on the Droplet. Some actions will require additional
attributes to be set as well.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
name
optional
Nifty New SnapshotThe name to give the new snapshot of the Droplet.
Request: /v2/droplets/actions
{
"type": "reboot"
}curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"enable_backups"}' \
"https://api.digitalocean.com/v2/droplets/actions?tag_name=awesome"import (
"context"
"os"
"github.com/digitalocean/godo"
)
func main() {
token := os.Getenv("DIGITALOCEAN_TOKEN")
client := godo.NewFromToken(token)
ctx := context.TODO()
action, _, err := client.DropletActions.PowerOffByTag(ctx, "awesome")
}require 'droplet_kit'
token = ENV['DIGITALOCEAN_TOKEN']
client = DropletKit::Client.new(access_token: token)
client.droplet_actions.power_off_for_tag(tag: 'awesome')import os
from pydo import Client
client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))
req = {
"type": "enable_backups"
}
resp = client.droplet_actions.post_by_tag(tag_name="production",body=req)Responses
201
The response will be a JSON object with a key called actions.
actions.ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
actions
optional
Show child properties
completed_at
optional Nullable
2020-11-14T16:30:06ZA time value given in ISO8601 combined date and time format that represents when the action was completed.
id
optional
36804636A unique numeric ID that can be used to identify and reference an action.
region
optional
Show child properties
available
required
trueThis is a boolean value that represents whether new Droplets can be created in this region.
features
required
["private_networking","backups","ipv6","metadata","install_agent","storage","image_transfer"]This attribute is set to an array which contains features available in this region
name
required
New York 3The display name of the region. This will be a full name that is used in the control panel and other interfaces.
sizes
required
This attribute is set to an array which contains the identifying slugs for the sizes available in this region. sizes:read is required to view.
slug
required
nyc3A human-readable string that is used as a unique identifier for each region.
region_slug
optional Nullable
nyc3A human-readable string that is used as a unique identifier for each region.
resource_id
optional Nullable
3164444A unique identifier for the resource that the action is associated with.
resource_type
optional
dropletThe type of resource that the action is associated with.
started_at
optional
2020-11-14T16:29:21ZA time value given in ISO8601 combined date and time format that represents when the action was initiated.
status
optional
completedThe current status of the action. This can be "in-progress", "completed", or "errored".
type
optional
createThis is the type of action that the object represents. For example, this could be "transfer" to represent the state of an image transfer action.
401
Authentication failed due to invalid credentials.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
429
The API rate limit has been exceeded.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
500
There was a server error.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
default
There was an unexpected error.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
Response
{
"actions": [
{
"completed_at": "2020-11-14T16:30:06Z",
"id": 36804636,
"region_slug": "nyc3",
"resource_id": 3164444,
"resource_type": "droplet",
"started_at": "2020-11-14T16:29:21Z",
"status": "completed",
"type": "create"
}
]
}{
"id": "unauthorized",
"message": "Unable to authenticate you."
}{
"id": "too_many_requests",
"message": "API rate limit exceeded."
}{
"id": "server_error",
"message": "Unexpected server-side error"
}{
"id": "example_error",
"message": "some error message"
}GET List Actions for a Droplet
/v2/droplets/{droplet_id}/actions
Authorizations:
bearer_auth
(1 scope)
OAuth Authentication
In order to interact with the DigitalOcean API, you or your application must authenticate.
The DigitalOcean API handles this through OAuth, an open standard for authorization. OAuth allows you to delegate access to your account. Scopes can be used to grant full access, read-only access, or access to a specific set of endpoints.
You can generate an OAuth token by visiting the Apps & API section of the DigitalOcean control panel for your account.
An OAuth token functions as a complete authentication request. In effect, it acts as a substitute for a username and password pair.
Because of this, it is absolutely essential that you keep your OAuth tokens secure. In fact, upon generation, the web interface will only display each token a single time in order to prevent the token from being compromised.
DigitalOcean access tokens begin with an identifiable prefix in order to distinguish them from other similar tokens.
dop_v1_for personal access tokens generated in the control paneldoo_v1_for tokens generated by applications using the OAuth flowdor_v1_for OAuth refresh tokens
Scopes
Scopes act like permissions assigned to an API token. These permissions determine what actions the token can perform. You can create API tokens that grant read-only access, full access, or limited access to specific endpoints by using custom scopes.
Generally, scopes are designed to match HTTP verbs and common CRUD operations (Create, Read, Update, Delete).
| HTTP Verb | CRUD Operation | Scope |
|---|---|---|
| GET | Read | <resource>:read |
| POST | Create | <resource>:create |
| PUT/PATCH | Update | <resource>:update |
| DELETE | Delete | <resource>:delete |
For example, creating a new Droplet by making a POST request to the
/v2/droplets endpoint requires the droplet:create scope while
listing Droplets by making a GET request to the /v2/droplets
endpoint requires the droplet:read scope.
Each endpoint below specifies which scope is required to access it when using custom scopes.
How to Authenticate with OAuth
In order to make an authenticated request, include a bearer-type
Authorization header containing your OAuth token. All requests must be
made over HTTPS.
Authenticate with a Bearer Authorization Header
curl -X $HTTP_METHOD -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" "https://api.digitalocean.com/v2/$OBJECT"
To retrieve a list of all actions that have been executed for a Droplet, send
a GET request to /v2/droplets/$DROPLET_ID/actions.
The results will be returned as a JSON object with an actions key. This will
be set to an array filled with action objects containing the standard
action attributes.
Path Parameters
droplet_id
>= 1 required
3164444A unique identifier for a Droplet instance.
Query Parameters
per_page
1 – 200 optional
2Number of items returned per page
Default:20page
>= 1 optional
1Which 'page' of paginated results to return.
Default:1Request: /v2/droplets/{droplet_id}/actions
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
"https://api.digitalocean.com/v2/droplets/3164494/actions?page=1&per_page=1"import (
"context"
"os"
"github.com/digitalocean/godo"
)
func main() {
token := os.Getenv("DIGITALOCEAN_TOKEN")
client := godo.NewFromToken(token)
ctx := context.TODO()
opt := &godo.ListOptions{
Page: 1,
PerPage: 200,
}
actions, _, err := client.Droplets.Actions(ctx, 3164494, opt)
}require 'droplet_kit'
token = ENV['DIGITALOCEAN_TOKEN']
client = DropletKit::Client.new(access_token: token)
actions = client.droplets.actions(id: 3164494)
actions.eachimport os
from pydo import Client
client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))
req = {
"name": "blog",
"type": "CNAME"
}
resp = client.droplet_actions.list(droplet_id=3164494)Responses
200
A JSON object with an actions key.
actions key.ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
actions
optional
Show child properties
completed_at
optional Nullable
2020-11-14T16:30:06ZA time value given in ISO8601 combined date and time format that represents when the action was completed.
id
optional
36804636A unique numeric ID that can be used to identify and reference an action.
region
optional
Show child properties
available
required
trueThis is a boolean value that represents whether new Droplets can be created in this region.
features
required
["private_networking","backups","ipv6","metadata","install_agent","storage","image_transfer"]This attribute is set to an array which contains features available in this region
name
required
New York 3The display name of the region. This will be a full name that is used in the control panel and other interfaces.
sizes
required
This attribute is set to an array which contains the identifying slugs for the sizes available in this region. sizes:read is required to view.
slug
required
nyc3A human-readable string that is used as a unique identifier for each region.
region_slug
optional Nullable
nyc3A human-readable string that is used as a unique identifier for each region.
resource_id
optional Nullable
3164444A unique identifier for the resource that the action is associated with.
resource_type
optional
dropletThe type of resource that the action is associated with.
started_at
optional
2020-11-14T16:29:21ZA time value given in ISO8601 combined date and time format that represents when the action was initiated.
status
optional
completedThe current status of the action. This can be "in-progress", "completed", or "errored".
type
optional
createThis is the type of action that the object represents. For example, this could be "transfer" to represent the state of an image transfer action.
links
optional
Show child properties
pages
optional
Forward Links
last
optional
https://api.digitalocean.com/v2/images?page=2URI of the last page of the results.
next
optional
https://api.digitalocean.com/v2/images?page=2URI of the next page of the results.
Backward Links
first
optional
https://api.digitalocean.com/v2/images?page=1URI of the first page of the results.
prev
optional
https://api.digitalocean.com/v2/images?page=1URI of the previous page of the results.
meta
required
401
Authentication failed due to invalid credentials.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
404
The resource was not found.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
429
The API rate limit has been exceeded.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
500
There was a server error.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
default
There was an unexpected error.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
Response
{
"actions": [
{
"completed_at": "2020-07-20T19:37:45Z",
"id": 982864273,
"region": {
"available": true,
"features": [
"private_networking",
"backups",
"ipv6",
"metadata",
"install_agent",
"image_transfer"
],
"name": "New York 3",
"sizes": [
"s-1vcpu-1gb",
"s-1vcpu-2gb",
"s-3vcpu-1gb",
"s-2vcpu-2gb",
"s-1vcpu-3gb",
"s-2vcpu-4gb",
"s-4vcpu-8gb",
"m-1vcpu-8gb",
"s-6vcpu-16gb",
"s-8vcpu-32gb",
"s-12vcpu-48gb"
],
"slug": "nyc3"
},
"region_slug": "nyc3",
"resource_id": 3164444,
"resource_type": "droplet",
"started_at": "2020-07-20T19:37:30Z",
"status": "completed",
"type": "create"
}
],
"links": {},
"meta": {
"total": 1
}
}{
"id": "unauthorized",
"message": "Unable to authenticate you."
}{
"id": "not_found",
"message": "The resource you requested could not be found."
}{
"id": "too_many_requests",
"message": "API rate limit exceeded."
}{
"id": "server_error",
"message": "Unexpected server-side error"
}{
"id": "example_error",
"message": "some error message"
}POST Initiate a Droplet Action
/v2/droplets/{droplet_id}/actions
Authorizations:
bearer_auth
(1 scope)
OAuth Authentication
In order to interact with the DigitalOcean API, you or your application must authenticate.
The DigitalOcean API handles this through OAuth, an open standard for authorization. OAuth allows you to delegate access to your account. Scopes can be used to grant full access, read-only access, or access to a specific set of endpoints.
You can generate an OAuth token by visiting the Apps & API section of the DigitalOcean control panel for your account.
An OAuth token functions as a complete authentication request. In effect, it acts as a substitute for a username and password pair.
Because of this, it is absolutely essential that you keep your OAuth tokens secure. In fact, upon generation, the web interface will only display each token a single time in order to prevent the token from being compromised.
DigitalOcean access tokens begin with an identifiable prefix in order to distinguish them from other similar tokens.
dop_v1_for personal access tokens generated in the control paneldoo_v1_for tokens generated by applications using the OAuth flowdor_v1_for OAuth refresh tokens
Scopes
Scopes act like permissions assigned to an API token. These permissions determine what actions the token can perform. You can create API tokens that grant read-only access, full access, or limited access to specific endpoints by using custom scopes.
Generally, scopes are designed to match HTTP verbs and common CRUD operations (Create, Read, Update, Delete).
| HTTP Verb | CRUD Operation | Scope |
|---|---|---|
| GET | Read | <resource>:read |
| POST | Create | <resource>:create |
| PUT/PATCH | Update | <resource>:update |
| DELETE | Delete | <resource>:delete |
For example, creating a new Droplet by making a POST request to the
/v2/droplets endpoint requires the droplet:create scope while
listing Droplets by making a GET request to the /v2/droplets
endpoint requires the droplet:read scope.
Each endpoint below specifies which scope is required to access it when using custom scopes.
How to Authenticate with OAuth
In order to make an authenticated request, include a bearer-type
Authorization header containing your OAuth token. All requests must be
made over HTTPS.
Authenticate with a Bearer Authorization Header
curl -X $HTTP_METHOD -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" "https://api.digitalocean.com/v2/$OBJECT"
To initiate an action on a Droplet send a POST request to
/v2/droplets/$DROPLET_ID/actions. In the JSON body to the request,
set the type attribute to on of the supported action types:
| Action | Details | Additionally Required Permission |
|---|---|---|
enable_backups |
Enables backups for a Droplet | |
disable_backups |
Disables backups for a Droplet | |
change_backup_policy |
Update the backup policy for a Droplet | |
reboot |
Reboots a Droplet. A reboot action is an attempt to reboot the Droplet in a graceful way, similar to using the reboot command from the console. |
|
power_cycle |
Power cycles a Droplet. A powercycle action is similar to pushing the reset button on a physical machine, it's similar to booting from scratch. |
|
shutdown |
Shutsdown a Droplet. A shutdown action is an attempt to shutdown the Droplet in a graceful way, similar to using the shutdown command from the console. Since a shutdown command can fail, this action guarantees that the command is issued, not that it succeeds. The preferred way to turn off a Droplet is to attempt a shutdown, with a reasonable timeout, followed by a power_off action to ensure the Droplet is off. |
|
power_off |
Powers off a Droplet. A power_off event is a hard shutdown and should only be used if the shutdown action is not successful. It is similar to cutting the power on a server and could lead to complications. |
|
power_on |
Powers on a Droplet. | |
restore |
Restore a Droplet using a backup image. The image ID that is passed in must be a backup of the current Droplet instance. The operation will leave any embedded SSH keys intact. | droplet:admin |
password_reset |
Resets the root password for a Droplet. A new password will be provided via email. It must be changed after first use. | droplet:admin |
resize |
Resizes a Droplet. Set the size attribute to a size slug. If a permanent resize with disk changes included is desired, set the disk attribute to true. |
droplet:create |
rebuild |
Rebuilds a Droplet from a new base image. Set the image attribute to an image ID or slug. |
droplet:admin |
rename |
Renames a Droplet. | |
change_kernel |
Changes a Droplet's kernel. Only applies to Droplets with externally managed kernels. All Droplets created after March 2017 use internal kernels by default. | |
enable_ipv6 |
Enables IPv6 for a Droplet. Once enabled for a Droplet, IPv6 can not be disabled. When enabling IPv6 on an existing Droplet, additional OS-level configuration is required. | |
snapshot |
Takes a snapshot of a Droplet. | image:create |
Path Parameters
droplet_id
>= 1 required
3164444A unique identifier for a Droplet instance.
Request Body: application/json
The type attribute set in the request body will specify the action that
will be taken on the Droplet. Some actions will require additional
attributes to be set as well.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
backup_policy
optional
type
required
rebootThe type of action to initiate for the Droplet.
backup_policy
optional
type
required
rebootThe type of action to initiate for the Droplet.
image
optional
12389723The ID of a backup of the current Droplet instance to restore from.
type
required
rebootThe type of action to initiate for the Droplet.
disk
optional
trueWhen true, the Droplet's disk will be resized in addition to its RAM and CPU. This is a permanent change and cannot be reversed as a Droplet's disk size cannot be decreased.
size
optional
s-2vcpu-2gbThe slug identifier for the size to which you wish to resize the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
image
optional
ubuntu-20-04-x64The image ID of a public or private image or the slug identifier for a public image. The Droplet will be rebuilt using this image as its base.
type
required
rebootThe type of action to initiate for the Droplet.
name
optional
nifty-new-nameThe new name for the Droplet.
type
required
rebootThe type of action to initiate for the Droplet.
kernel
optional
12389723A unique number used to identify and reference a specific kernel.
type
required
rebootThe type of action to initiate for the Droplet.
name
optional
Nifty New SnapshotThe name to give the new snapshot of the Droplet.
Request: /v2/droplets/{droplet_id}/actions
{
"type": "reboot"
}# Enable Backups
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"enable_backups"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Disable Backups
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"disable_backups"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Reboot a Droplet
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"reboot"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Power cycle a Droplet
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"power_cycle"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Shutdown and Droplet
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"shutdown"}' \
"https://api.digitalocean.com/v2/droplets/3067649/actions"
# Power off a Droplet
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"power_off"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Power on a Droplet
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"power_on"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Restore a Droplet
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"restore", "image": 12389723 }' \
"https://api.digitalocean.com/v2/droplets/3067649/actions"
# Password Reset a Droplet
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"password_reset"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Resize a Droplet
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"resize","size":"1gb"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Rebuild a Droplet
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"rebuild","image":"ubuntu-16-04-x64"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Rename a Droplet
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"rename","name":"nifty-new-name"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Change the Kernel
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"change_kernel","kernel":991}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Enable IPv6
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"enable_ipv6"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Enable Private Networking
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"enable_private_networking"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Snapshot a Droplet
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"snapshot","name":"Nifty New Snapshot"}' \
"https://api.digitalocean.com/v2/droplets/3164450/actions"
# Acting on Tagged Droplets
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"enable_backups"}' \
"https://api.digitalocean.com/v2/droplets/actions?tag_name=awesome"
# Retrieve a Droplet Action
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
"https://api.digitalocean.com/v2/droplets/3164444/actions/36804807"import (
"context"
"os"
"github.com/digitalocean/godo"
)
func main() {
token := os.Getenv("DIGITALOCEAN_TOKEN")
client := godo.NewFromToken(token)
ctx := context.TODO()
// Enable Backups
action, _, err := client.DropletActions.EnableBackups(ctx, 3164450)
// Disable Backups
// action, _, err := client.DropletActions.DisableBackups(ctx, 3164450)
// Reboot a Droplet
// action, _, err := client.DropletActions.Reboot(ctx, 3164450)
// Power Cycle a Droplet
// action, _, err := client.DropletActions.PowerCycle(ctx, 3164450)
// Shutdown a Droplet
// action, _, err := client.DropletActions.Shutdown(ctx, 3067649)
// Power Off a Droplet
// action, _, err := client.DropletActions.PowerOff(ctx, 3164450)
// Power On a Droplet
// action, _, err := client.DropletActions.PowerOn(ctx, 3164450)
// Restore a Droplet
// action, _, err := client.DropletActions.Restore(ctx, 3164449, 12389723)
// Password Reset a Droplet
// action, _, err := client.DropletActions.PasswordReset(ctx, 3164450)
// Resize a Droplet
// action, _, err := client.DropletActions.Resize(ctx, 3164450, "1gb", true)
// Rebuild a Droplet
// action, _, err := client.DropletActions.RebuildByImageSlug(ctx, 3164450, "ubuntu-16-04-x64")
// Rename a Droplet
// action, _, err := client.DropletActions.Rename(ctx, 3164450, "nifty-new-name")
// Change the Kernel
// action, _, err := client.DropletActions.ChangeKernel(ctx, 3164450, 991)
// Enable IPv6
// action, _, err := client.DropletActions.EnableIPv6(ctx, 3164450)
// Enable Private Networking
// action, _, err := client.DropletActions.EnablePrivateNetworking(ctx, 3164450)
// Snapshot a Droplet
// action, _, err := client.DropletActions.Snapshot(ctx, 3164450, "Nifty New Snapshot")
// Retrieve a Droplet Action
// action, _, err := client.DropletActions.Get(ctx, 3164450, 36804807)
}require 'droplet_kit'
token = ENV['DIGITALOCEAN_TOKEN']
client = DropletKit::Client.new(access_token: token)
# Enable Backups
client.droplet_actions.enable_backups(droplet_id: 3164450)
# Disable Backups
# client.droplet_actions.disable_backups(droplet_id: 3164450)
# Reboot a Droplet
# client.droplet_actions.reboot(droplet_id: 3164450)
# Power Cycle a Droplet
# client.droplet_actions.power_cycle(droplet_id: 3164450)
# Shutdown a Droplet
# client.droplet_actions.shutdown(droplet_id: 3067649)
# Power Off a Droplet
# client.droplet_actions.power_off(droplet_id: 3164450)
# Power On a Droplet
# client.droplet_actions.power_on(droplet_id: 3164450)
# Restore a Droplet
# client.droplet_actions.restore(droplet_id: 3067649, image: 12389723)
# Password Reset a Droplet
# client.droplet_actions.password_reset(droplet_id: 3164450)
# Resize a Droplet
# client.droplet_actions.resize(droplet_id: 3164450, size: '1gb')
# Rebuild a Droplet
# client.droplet_actions.rebuild(droplet_id: 3164450, image: 'ubuntu-16-04-x64')
# Rename a Droplet
# client.droplet_actions.rename(droplet_id: 3164450, name: 'nifty-new-name')
# Change the Kernel
# client.droplet_actions.change_kernel(droplet_id: 3164450, kernel: 991)
# Enable IPv6
# client.droplet_actions.enable_ipv6(droplet_id: 3164450)
# Enable Private Networking
# client.droplet_actions.enable_private_networking(droplet_id: 3164450)
# Snapshot a Droplet
# client.droplet_actions.snapshot(droplet_id: 3164450, name: 'Nifty New Snapshot')import os
from pydo import Client
client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))
# enable back ups example
req = {
"type": "enable_backups"
}
resp = client.droplet_actions.post(droplet_id=346652, body=req)Responses
201
The response will be a JSON object with a key called action.
action.ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
action
optional
Show child properties
completed_at
optional Nullable
2020-11-14T16:30:06ZA time value given in ISO8601 combined date and time format that represents when the action was completed.
id
optional
36804636A unique numeric ID that can be used to identify and reference an action.
region
optional
Show child properties
available
required
trueThis is a boolean value that represents whether new Droplets can be created in this region.
features
required
["private_networking","backups","ipv6","metadata","install_agent","storage","image_transfer"]This attribute is set to an array which contains features available in this region
name
required
New York 3The display name of the region. This will be a full name that is used in the control panel and other interfaces.
sizes
required
This attribute is set to an array which contains the identifying slugs for the sizes available in this region. sizes:read is required to view.
slug
required
nyc3A human-readable string that is used as a unique identifier for each region.
region_slug
optional Nullable
nyc3A human-readable string that is used as a unique identifier for each region.
resource_id
optional Nullable
3164444A unique identifier for the resource that the action is associated with.
resource_type
optional
dropletThe type of resource that the action is associated with.
started_at
optional
2020-11-14T16:29:21ZA time value given in ISO8601 combined date and time format that represents when the action was initiated.
status
optional
completedThe current status of the action. This can be "in-progress", "completed", or "errored".
type
optional
createThis is the type of action that the object represents. For example, this could be "transfer" to represent the state of an image transfer action.
401
Authentication failed due to invalid credentials.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
404
The resource was not found.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
429
The API rate limit has been exceeded.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
500
There was a server error.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
default
There was an unexpected error.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
Response
{
"action": {
"completed_at": "2020-11-14T16:30:06Z",
"id": 36804636,
"region": {
"available": true,
"features": [
"private_networking",
"backups",
"ipv6",
"metadata",
"install_agent",
"storage",
"image_transfer"
],
"name": "New York 3",
"sizes": [
"s-1vcpu-1gb",
"s-1vcpu-2gb",
"s-1vcpu-3gb",
"s-2vcpu-2gb",
"s-3vcpu-1gb",
"s-2vcpu-4gb",
"s-4vcpu-8gb",
"s-6vcpu-16gb",
"s-8vcpu-32gb",
"s-12vcpu-48gb",
"s-16vcpu-64gb",
"s-20vcpu-96gb",
"s-24vcpu-128gb",
"s-32vcpu-192g"
],
"slug": "nyc3"
},
"region_slug": "nyc3",
"resource_id": 3164444,
"resource_type": "droplet",
"started_at": "2020-11-14T16:29:21Z",
"status": "completed",
"type": "create"
}
}{
"id": "unauthorized",
"message": "Unable to authenticate you."
}{
"id": "not_found",
"message": "The resource you requested could not be found."
}{
"id": "too_many_requests",
"message": "API rate limit exceeded."
}{
"id": "server_error",
"message": "Unexpected server-side error"
}{
"id": "example_error",
"message": "some error message"
}GET Retrieve a Droplet Action
/v2/droplets/{droplet_id}/actions/{action_id}
Authorizations:
bearer_auth
(1 scope)
OAuth Authentication
In order to interact with the DigitalOcean API, you or your application must authenticate.
The DigitalOcean API handles this through OAuth, an open standard for authorization. OAuth allows you to delegate access to your account. Scopes can be used to grant full access, read-only access, or access to a specific set of endpoints.
You can generate an OAuth token by visiting the Apps & API section of the DigitalOcean control panel for your account.
An OAuth token functions as a complete authentication request. In effect, it acts as a substitute for a username and password pair.
Because of this, it is absolutely essential that you keep your OAuth tokens secure. In fact, upon generation, the web interface will only display each token a single time in order to prevent the token from being compromised.
DigitalOcean access tokens begin with an identifiable prefix in order to distinguish them from other similar tokens.
dop_v1_for personal access tokens generated in the control paneldoo_v1_for tokens generated by applications using the OAuth flowdor_v1_for OAuth refresh tokens
Scopes
Scopes act like permissions assigned to an API token. These permissions determine what actions the token can perform. You can create API tokens that grant read-only access, full access, or limited access to specific endpoints by using custom scopes.
Generally, scopes are designed to match HTTP verbs and common CRUD operations (Create, Read, Update, Delete).
| HTTP Verb | CRUD Operation | Scope |
|---|---|---|
| GET | Read | <resource>:read |
| POST | Create | <resource>:create |
| PUT/PATCH | Update | <resource>:update |
| DELETE | Delete | <resource>:delete |
For example, creating a new Droplet by making a POST request to the
/v2/droplets endpoint requires the droplet:create scope while
listing Droplets by making a GET request to the /v2/droplets
endpoint requires the droplet:read scope.
Each endpoint below specifies which scope is required to access it when using custom scopes.
How to Authenticate with OAuth
In order to make an authenticated request, include a bearer-type
Authorization header containing your OAuth token. All requests must be
made over HTTPS.
Authenticate with a Bearer Authorization Header
curl -X $HTTP_METHOD -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" "https://api.digitalocean.com/v2/$OBJECT"
To retrieve a Droplet action, send a GET request to
/v2/droplets/$DROPLET_ID/actions/$ACTION_ID.
The response will be a JSON object with a key called action. The value will
be a Droplet action object.
Path Parameters
droplet_id
>= 1 required
3164444A unique identifier for a Droplet instance.
action_id
>= 1 required
36804636A unique numeric ID that can be used to identify and reference an action.
Request: /v2/droplets/{droplet_id}/actions/{action_id}
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
"https://api.digitalocean.com/v2/droplets/3164444/actions/36804807"import (
"context"
"os"
"github.com/digitalocean/godo"
)
func main() {
token := os.Getenv("DIGITALOCEAN_TOKEN")
client := godo.NewFromToken(token)
ctx := context.TODO()
action, _, err := client.DropletActions.Get(ctx, 3164450, 36804807)
}require 'droplet_kit'
token = ENV['DIGITALOCEAN_TOKEN']
client = DropletKit::Client.new(access_token: token)
client.droplet_actions.find(droplet_id: 3164444, id: 36804807)import os
from pydo import Client
client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))
resp = client.droplet_actions.get(droplet_id=3934132, action_id=2432342)Responses
200
The result will be a JSON object with an action key. This will be set to an action object containing the standard action attributes.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
action
optional
Show child properties
completed_at
optional Nullable
2020-11-14T16:30:06ZA time value given in ISO8601 combined date and time format that represents when the action was completed.
id
optional
36804636A unique numeric ID that can be used to identify and reference an action.
region
optional
Show child properties
available
required
trueThis is a boolean value that represents whether new Droplets can be created in this region.
features
required
["private_networking","backups","ipv6","metadata","install_agent","storage","image_transfer"]This attribute is set to an array which contains features available in this region
name
required
New York 3The display name of the region. This will be a full name that is used in the control panel and other interfaces.
sizes
required
This attribute is set to an array which contains the identifying slugs for the sizes available in this region. sizes:read is required to view.
slug
required
nyc3A human-readable string that is used as a unique identifier for each region.
region_slug
optional Nullable
nyc3A human-readable string that is used as a unique identifier for each region.
resource_id
optional Nullable
3164444A unique identifier for the resource that the action is associated with.
resource_type
optional
dropletThe type of resource that the action is associated with.
started_at
optional
2020-11-14T16:29:21ZA time value given in ISO8601 combined date and time format that represents when the action was initiated.
status
optional
completedThe current status of the action. This can be "in-progress", "completed", or "errored".
type
optional
createThis is the type of action that the object represents. For example, this could be "transfer" to represent the state of an image transfer action.
401
Authentication failed due to invalid credentials.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
404
The resource was not found.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
429
The API rate limit has been exceeded.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
500
There was a server error.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
default
There was an unexpected error.
ratelimit-limit
The default limit on number of requests that can be made per hour and per minute. Current rate limits are 5000 requests per hour and 250 requests per minute.
ratelimit-remaining
The number of requests in your hourly quota that remain before you hit your request limit. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
ratelimit-reset
The time when the oldest request will expire. The value is given in Unix epoch time. See https://docs.digitalocean.com/reference/api/reference/#rate-limit for information about how requests expire.
application/json
id
required
not_foundA short identifier corresponding to the HTTP status code returned. For example, the ID for a response returning a 404 status code would be "not_found."
message
required
The resource you were accessing could not be found.A message providing additional information about the error, including details to help resolve it when possible.
request_id
optional
4d9d8375-3c56-4925-a3e7-eb137fed17e9Optionally, some endpoints may include a request ID that should be provided when reporting bugs or opening support tickets to help identify the issue.
Response
{
"action": {
"completed_at": "2020-11-14T16:30:06Z",
"id": 36804636,
"region": {
"available": true,
"features": [
"private_networking",
"backups",
"ipv6",
"metadata",
"install_agent",
"storage",
"image_transfer"
],
"name": "New York 3",
"sizes": [
"s-1vcpu-1gb",
"s-1vcpu-2gb",
"s-1vcpu-3gb",
"s-2vcpu-2gb",
"s-3vcpu-1gb",
"s-2vcpu-4gb",
"s-4vcpu-8gb",
"s-6vcpu-16gb",
"s-8vcpu-32gb",
"s-12vcpu-48gb",
"s-16vcpu-64gb",
"s-20vcpu-96gb",
"s-24vcpu-128gb",
"s-32vcpu-192g"
],
"slug": "nyc3"
},
"region_slug": "nyc3",
"resource_id": 3164444,
"resource_type": "droplet",
"started_at": "2020-11-14T16:29:21Z",
"status": "completed",
"type": "create"
}
}{
"id": "unauthorized",
"message": "Unable to authenticate you."
}{
"id": "not_found",
"message": "The resource you requested could not be found."
}{
"id": "too_many_requests",
"message": "API rate limit exceeded."
}{
"id": "server_error",
"message": "Unexpected server-side error"
}{
"id": "example_error",
"message": "some error message"
}