> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# DigitalOcean Integration for AI Agents & Workflows

> Cloud infrastructure platform for deploying and managing Droplets, domains, and SSH keys via the DigitalOcean API

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/digital-ocean.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=9767162bd11e4d6f34f5b5d4ee233c50" alt="DigitalOcean logo" width="72" height="72" data-path="logos/digital-ocean.svg" />

## Overview

Add **DigitalOcean** to any ModuleX agent or workflow. Cloud infrastructure management via the DigitalOcean REST API (`api.digitalocean.com/v2`). Create and manage Droplets, domains, SSH keys, and snapshots.

<Info>
  **Categories**: Developer Tools & Infrastructure · Cloud Infrastructure · Devops · **Auth**: OAuth2 · **Actions**: 6
</Info>

## Authentication

### OAuth2 Authentication

Connect using DigitalOcean OAuth (recommended)

#### Required Credentials

| Field         | Description                          | Required | Format |
| ------------- | ------------------------------------ | -------- | ------ |
| Client ID     | DigitalOcean OAuth App Client ID     | Yes      | `-`    |
| Client Secret | DigitalOcean OAuth App Client Secret | Yes      | `-`    |

#### OAuth Configuration

* **Authorization URL**: `https://cloud.digitalocean.com/v1/oauth/authorize`
* **Token URL**: `https://cloud.digitalocean.com/v1/oauth/token`
* **Scopes**: `read`, `write`

## Available Actions

<AccordionGroup>
  <Accordion title="add_ssh_key — Add a new SSH key to your DigitalOcean account">
    ### Parameters

    <ResponseField name="name" type="string" required>
      A human-readable display name for this key, used to easily identify the SSH keys when they are displayed
    </ResponseField>

    <ResponseField name="public_key" type="string" required>
      The entire public key string that will be embedded into the root user's authorized\_keys file
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "SshKeyResource": {
          "additionalProperties": false,
          "description": "An SSH key on the DigitalOcean account.",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Id"
            },
            "fingerprint": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Fingerprint"
            },
            "public_key": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Public Key"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Name"
            }
          },
          "title": "SshKeyResource",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "ssh_key": {
          "anyOf": [
            {
              "$ref": "#/$defs/SshKeyResource"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "AddSshKeyOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_domain — Create a new domain in DigitalOcean DNS">
    ### Parameters

    <ResponseField name="name" type="string" required>
      The domain name in standard domain.TLD format (e.g. example.com)
    </ResponseField>

    <ResponseField name="ip_address" type="string" required>
      An IP address to automatically create an A record pointing to the apex domain
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "DomainResource": {
          "additionalProperties": false,
          "description": "A domain registered in DigitalOcean DNS.",
          "properties": {
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Name"
            },
            "ttl": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Ttl"
            },
            "zone_file": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Zone File"
            }
          },
          "title": "DomainResource",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "domain": {
          "anyOf": [
            {
              "$ref": "#/$defs/DomainResource"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateDomainOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_droplet — Create a new DigitalOcean Droplet (virtual machine)">
    ### Parameters

    <ResponseField name="name" type="string" required>
      Human-readable string used as the Droplet display name
    </ResponseField>

    <ResponseField name="region" type="string" required>
      Region slug where the Droplet will be deployed (e.g. nyc1, sfo1, ams3)
    </ResponseField>

    <ResponseField name="image" type="string" required>
      Image ID or slug for the base image (e.g. ubuntu-22-04-x64)
    </ResponseField>

    <ResponseField name="size" type="string" required>
      Size slug for the Droplet (e.g. s-1vcpu-1gb)
    </ResponseField>

    <ResponseField name="volumes" type="array">
      List of Block Storage volume IDs to attach to the Droplet
    </ResponseField>

    <ResponseField name="ssh_keys" type="array">
      List of SSH key IDs or fingerprints to embed in the Droplet's root account
    </ResponseField>

    <ResponseField name="backups" type="boolean">
      Whether automated backups should be enabled
    </ResponseField>

    <ResponseField name="ipv6" type="boolean">
      Whether IPv6 is enabled on the Droplet
    </ResponseField>

    <ResponseField name="user_data" type="string">
      Cloud-init user data or Bash script for first-boot configuration (max 64 KiB)
    </ResponseField>

    <ResponseField name="private_networking" type="boolean">
      Whether private networking is enabled for the Droplet
    </ResponseField>

    <ResponseField name="monitoring" type="boolean">
      Whether to install the DigitalOcean monitoring agent
    </ResponseField>

    <ResponseField name="tags" type="array">
      List of tag names to apply to the Droplet after creation
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "DropletResource": {
          "additionalProperties": false,
          "description": "A DigitalOcean Droplet summary.",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Id"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Name"
            },
            "memory": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Memory"
            },
            "vcpus": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Vcpus"
            },
            "disk": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Disk"
            },
            "status": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Status"
            },
            "region": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Region"
            },
            "image": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Image"
            },
            "size_slug": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Size Slug"
            }
          },
          "title": "DropletResource",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "droplet": {
          "anyOf": [
            {
              "$ref": "#/$defs/DropletResource"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateDropletOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_snapshot — Create a snapshot from an existing DigitalOcean Droplet">
    ### Parameters

    <ResponseField name="droplet_id" type="string" required>
      The unique identifier of the Droplet to snapshot
    </ResponseField>

    <ResponseField name="snapshot_name" type="string">
      The name to give the new snapshot
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "DropletActionResource": {
          "additionalProperties": false,
          "description": "A DigitalOcean Droplet action.",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Id"
            },
            "status": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Status"
            },
            "type": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Type"
            },
            "started_at": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Started At"
            },
            "completed_at": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Completed At"
            },
            "resource_id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Resource Id"
            },
            "resource_type": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Resource Type"
            },
            "region_slug": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Region Slug"
            }
          },
          "title": "DropletActionResource",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "action": {
          "anyOf": [
            {
              "$ref": "#/$defs/DropletActionResource"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateSnapshotOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_all_droplets — List all Droplets in your DigitalOcean account">
    ### Parameters

    <ResponseField name="tag_name" type="string">
      Filter Droplets by a specific tag name
    </ResponseField>

    <ResponseField name="page" type="integer">
      Which page of paginated results to return (Default: `1`)
    </ResponseField>

    <ResponseField name="per_page" type="integer">
      Number of items returned per page (Default: `50`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "DropletResource": {
          "additionalProperties": false,
          "description": "A DigitalOcean Droplet summary.",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Id"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Name"
            },
            "memory": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Memory"
            },
            "vcpus": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Vcpus"
            },
            "disk": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Disk"
            },
            "status": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Status"
            },
            "region": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Region"
            },
            "image": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Image"
            },
            "size_slug": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Size Slug"
            }
          },
          "title": "DropletResource",
          "type": "object"
        },
        "MetaResource": {
          "additionalProperties": false,
          "description": "Pagination meta from DigitalOcean list responses.",
          "properties": {
            "total": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Total"
            }
          },
          "title": "MetaResource",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "droplets": {
          "items": {
            "$ref": "#/$defs/DropletResource"
          },
          "title": "Droplets",
          "type": "array"
        },
        "meta": {
          "anyOf": [
            {
              "$ref": "#/$defs/MetaResource"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "ListAllDropletsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="turnonoff_droplet — Turn a Droplet's power on or off">
    ### Parameters

    <ResponseField name="turn_on_off" type="string" required>
      Power action to perform: power\_on or power\_off
    </ResponseField>

    <ResponseField name="droplet_id" type="string" required>
      The unique identifier of the Droplet to power on/off
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "DropletActionResource": {
          "additionalProperties": false,
          "description": "A DigitalOcean Droplet action.",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Id"
            },
            "status": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Status"
            },
            "type": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Type"
            },
            "started_at": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Started At"
            },
            "completed_at": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Completed At"
            },
            "resource_id": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Resource Id"
            },
            "resource_type": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Resource Type"
            },
            "region_slug": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Region Slug"
            }
          },
          "title": "DropletActionResource",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "action": {
          "anyOf": [
            {
              "$ref": "#/$defs/DropletActionResource"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "TurnonoffDropletOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* **Rate limit**: 5,000 requests per hour per OAuth token (returns HTTP 429 when exceeded).
* **Droplet creation**: subject to account-level Droplet limits (default 25; request increase via support).
* **Error model**: non-2xx responses and timeouts are caught and returned as `success=False` + `error` rather than raising.

## Related integrations

<CardGroup cols={3}>
  <Card title="Heroku" href="/integrations/tools/heroku" />

  <Card title="Algolia" href="/integrations/tools/algolia" />

  <Card title="Amazon Web Services" href="/integrations/tools/aws" />
</CardGroup>

## Links

* [DigitalOcean](https://www.digitalocean.com)
