> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to DigitalOcean

The DigitalOcean connector lets your AI agent act in each user's DigitalOcean account. Each user signs in to DigitalOcean once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 120 tools.

**Authentication:** OAuth 2.0
**Categories:** Developer Tools
**Tools:** 120: 63 read, 36 write, 21 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own DigitalOcean app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=DIGITALOCEAN)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the DigitalOcean connection

   In **AgentKit > Connections**, create a DigitalOcean connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   DigitalOcean connections use your own OAuth app. Register one with DigitalOcean and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the DigitalOcean connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'digitalocean'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize DigitalOcean:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'digitalocean_account_get',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "digitalocean"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize DigitalOcean:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="digitalocean_account_get",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'digitalocean_account_get',
  toolInput: {},
  connector: 'digitalocean',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="digitalocean_account_get",
    tool_input={},
    connection_name="digitalocean",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `digitalocean_account_get`

Get Account · Read-only

Get the DigitalOcean account that the connection is authorized for.
Returns the account's email, UUID, status, email verification flag, team, and limits such as droplet_limit, floating_ip_limit and volume_limit.
Use digitalocean_account_get to check who is connected and what limits apply. Use digitalocean_billing_balance_get for the account balance.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `digitalocean_action_get`

Get Action · Read-only

Get one action by its ID, such as a Droplet power-off or a volume attach.
Returns the action's type, status (in-progress, completed, errored), resource_id, resource_type, started_at and completed_at.
Use digitalocean_action_get to poll an action returned by another tool until it completes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `action_id` (`integer`, required): Numeric ID of the action, as returned by an action or create tool. Example: 36804636.

Example input: `{"action_id":36804636}`

### `digitalocean_actions_list`

List Actions · Read-only

List every action taken on the account (power events, resizes, attaches and more), newest first.
Returns a page of actions with id, type, status, resource_id, resource_type, started_at and completed_at.
Use digitalocean_actions_list for an account-wide audit. Use digitalocean_droplet_actions_list for a single Droplet.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_app_deployment_get`

Get App Deployment · Read-only

Get one deployment of an App Platform app.
Returns the deployment's phase, progress (steps with status and errors), cause, spec, services and timestamps.
Use digitalocean_app_deployment_get to see why a deployment failed or how far it has got. Use digitalocean_app_deployment_logs_get for its logs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_id` (`string`, required): UUID of the App Platform app. Get it from digitalocean_apps_list. Example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf.
- `deployment_id` (`string`, required): UUID of the app deployment. Get it from digitalocean_app_deployments_list or the app's active_deployment.id. Example: 3aa4d20e-5527-4c00-b496-601fbd22520a.

Example input: `{"app_id":"<app_id>","deployment_id":"<deployment_id>"}`

### `digitalocean_app_deployment_logs_get`

Get App Deployment Logs · Read-only

Get links to the logs of one deployment of an App Platform app, for all components.
Returns live_url (real-time logs for an in-progress or active deployment) and historic_urls (archived logs).
Use digitalocean_app_deployment_logs_get to read build or deploy logs of a specific deployment, such as a failed one. Use digitalocean_app_logs_get for the active deployment.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_id` (`string`, required): UUID of the App Platform app. Get it from digitalocean_apps_list. Example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf.
- `deployment_id` (`string`, required): UUID of the app deployment. Get it from digitalocean_app_deployments_list or the app's active_deployment.id. Example: 3aa4d20e-5527-4c00-b496-601fbd22520a.
- `type` (`string`, required): Which logs to fetch: BUILD (build output), DEPLOY (deploy output), RUN (runtime logs), RUN_RESTARTED (logs of crashed or restarted instances) or AUTOSCALE_EVENT. Example: RUN. One of: `BUILD`, `DEPLOY`, `RUN`, `RUN_RESTARTED`, `AUTOSCALE_EVENT`.
- `pod_connection_timeout` (`string`, optional): How long to wait for a component instance if it is not immediately available, as a duration such as 30s or 3m. Defaults to 3m.

Example input: `{"app_id":"<app_id>","deployment_id":"<deployment_id>","type":"BUILD"}`

### `digitalocean_app_deployments_list`

List App Deployments · Read-only

List the deployments of an App Platform app, newest first.
Returns a page of deployments with id, cause, phase (PENDING_BUILD, BUILDING, DEPLOYING, ACTIVE, ERROR, CANCELED, SUPERSEDED), progress, created_at and the spec used.
Use digitalocean_app_deployments_list to find a deployment ID or a failed deployment. Use digitalocean_app_deployment_get for one deployment.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_id` (`string`, required): UUID of the App Platform app. Get it from digitalocean_apps_list. Example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf.
- `deployment_types` (`array`, optional): Only return deployments of these types: MANUAL, DEPLOY_ON_PUSH, MAINTENANCE, MANUAL_ROLLBACK, AUTO_ROLLBACK, UPDATE_DATABASE_TRUSTED_SOURCES, AUTOSCALED. Example: ["MANUAL", "DEPLOY_ON_PUSH"].
- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{"app_id":"<app_id>"}`

### `digitalocean_app_get`

Get App · Read-only

Get one App Platform app by ID.
Returns the app's spec, live_url, default_ingress, active_deployment (with phase and progress), in_progress_deployment, last_deployment_active_at, region and project_id.
Use digitalocean_app_get to see an app's configuration and current deployment. Use digitalocean_app_health_get for component health.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_id` (`string`, required): UUID of the App Platform app. Get it from digitalocean_apps_list. Example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf.

Example input: `{"app_id":"<app_id>"}`

### `digitalocean_app_health_get`

Get App Health · Read-only

Get the health of an App Platform app's components.
Returns each component's state, cpu and memory usage, and replica counts.
Use digitalocean_app_health_get to check whether an app is running well. Use digitalocean_app_logs_get to read its logs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_id` (`string`, required): UUID of the App Platform app. Get it from digitalocean_apps_list. Example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf.

Example input: `{"app_id":"<app_id>"}`

### `digitalocean_app_logs_get`

Get App Logs · Read-only

Get links to the logs of an App Platform app's active deployment, for all components.
Returns live_url (a real-time log stream) and historic_urls (archived log files) to download.
Use digitalocean_app_logs_get for the app that is serving now. Use digitalocean_app_deployment_logs_get for a specific or in-progress deployment.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_id` (`string`, required): UUID of the App Platform app. Get it from digitalocean_apps_list. Example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf.
- `type` (`string`, required): Which logs to fetch: BUILD (build output), DEPLOY (deploy output), RUN (runtime logs), RUN_RESTARTED (logs of crashed or restarted instances) or AUTOSCALE_EVENT. Example: RUN. One of: `BUILD`, `DEPLOY`, `RUN`, `RUN_RESTARTED`, `AUTOSCALE_EVENT`.
- `pod_connection_timeout` (`string`, optional): How long to wait for a component instance if it is not immediately available, as a duration such as 30s or 3m. Defaults to 3m.

Example input: `{"app_id":"<app_id>","type":"BUILD"}`

### `digitalocean_apps_list`

List Apps · Read-only

List the App Platform apps in the account.
Returns a page of apps with id, spec (name, region, components), default_ingress URL, live_url, active_deployment, in_progress_deployment, region and timestamps.
Use digitalocean_apps_list to find an app ID. Use digitalocean_app_get for one app.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.
- `with_projects` (`boolean`, optional): Set to true to include each app's project_id.

Example input: `{}`

### `digitalocean_billing_balance_get`

Get Balance · Read-only

Get the account's current balance.
Returns month_to_date_balance, account_balance, month_to_date_usage and generated_at.
Use digitalocean_billing_balance_get to see what is owed this month. Use digitalocean_invoices_list for past invoices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `digitalocean_billing_history_list`

List Billing History · Read-only

List the account's billing history: invoices, payments and credits.
Returns billing_history entries with description, amount, invoice_id, invoice_uuid, date and type.
Use digitalocean_billing_history_list for payments and charges over time. Use digitalocean_invoices_list for invoices only.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `digitalocean_database_backups_list`

List Database Backups · Read-only

List the available backups of a managed database cluster. Not supported for Caching or Valkey clusters.
Returns backups with created_at and size_gigabytes, plus scheduling details.
Use digitalocean_database_backups_list to check that backups exist and when the latest ran.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>"}`

### `digitalocean_database_cluster_get`

Get Database Cluster · Read-only

Get one managed database cluster by ID.
Returns the cluster's engine, version, status, region, size, num_nodes, connection and private_connection (host, port, user, password, uri), maintenance_window, users and db_names.
Use digitalocean_database_cluster_get to check status or get connection details. The response includes credentials; handle them as secrets.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>"}`

### `digitalocean_database_clusters_list`

List Database Clusters · Read-only

List the managed database clusters (PostgreSQL, MySQL, Valkey/Caching, MongoDB, Kafka, OpenSearch) in the account.
Returns each cluster's id, name, engine, version, status, region, size, num_nodes, connection details, tags and db_names.
Use digitalocean_database_clusters_list to find a cluster ID. Use digitalocean_database_cluster_get for one cluster.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `tag_name` (`string`, optional): Only return clusters with this tag. Example: production.

Example input: `{}`

### `digitalocean_database_firewall_rules_list`

List Database Trusted Sources · Read-only

List the firewall rules (trusted sources) of a managed database cluster.
Returns rules, each with uuid, type (droplet, k8s, ip_addr, tag, app) and value.
Use digitalocean_database_firewall_rules_list to see what can connect. Use digitalocean_database_firewall_rules_update to change it.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>"}`

### `digitalocean_database_get`

Get Database · Read-only

Get one database inside a managed database cluster by name.
Returns the database's name.
Use digitalocean_database_get to confirm a database exists. Use digitalocean_databases_list to list all of them.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.
- `database_name` (`string`, required): Name of the database. Example: alpha.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>","database_name":"<database_name>"}`

### `digitalocean_database_options_list`

List Database Options · Read-only

List the engines, versions, regions and node sizes available for managed databases.
Returns options per engine (regions, versions, layouts with num_nodes and sizes) and version_availability with end-of-life dates.
Use digitalocean_database_options_list before digitalocean_database_cluster_create to pick valid values.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `digitalocean_database_user_get`

Get Database User · Read-only

Get one user of a managed database cluster.
Returns the user's name, role and password, plus engine-specific settings.
Use digitalocean_database_user_get for one user. The response includes the password; handle it as a secret.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.
- `username` (`string`, required): Name of the database user. Example: app-01.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>","username":"<username>"}`

### `digitalocean_database_users_list`

List Database Users · Read-only

List the users of a managed database cluster. Not supported for Caching or Valkey clusters.
Returns users with name, role (primary or normal) and password; MySQL users also include mysql_settings.
Use digitalocean_database_users_list to see who can connect. The response includes passwords; handle them as secrets.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>"}`

### `digitalocean_databases_list`

List Databases · Read-only

List the databases inside a managed database cluster. Not supported for Caching or Valkey clusters.
Returns dbs, each with its name.
Use digitalocean_databases_list to see which databases exist in a cluster.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>"}`

### `digitalocean_domain_get`

Get Domain · Read-only

Get one domain managed in DigitalOcean DNS.
Returns the domain's name, ttl and full zone_file.
Use digitalocean_domain_get to read a domain's zone file. Use digitalocean_domain_records_list for structured records.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `domain_name` (`string`, required): The domain name as registered in DigitalOcean DNS, without a trailing dot. Example: example.com.

Example input: `{"domain_name":"<domain_name>"}`

### `digitalocean_domain_record_get`

Get Domain Record · Read-only

Get one DNS record of a domain by ID.
Returns the record's type, name, data, priority, port, ttl, weight, flags and tag.
Use digitalocean_domain_record_get when you know the record ID. Use digitalocean_domain_records_list to search.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `domain_name` (`string`, required): The domain name as registered in DigitalOcean DNS, without a trailing dot. Example: example.com.
- `domain_record_id` (`integer`, required): Numeric ID of the DNS record. Get it from digitalocean_domain_records_list. Example: 3352896.

Example input: `{"domain_name":"<domain_name>","domain_record_id":3352896}`

### `digitalocean_domain_records_list`

List Domain Records · Read-only

List the DNS records of a domain, optionally filtered by name or type.
Returns a page of records with id, type, name, data, priority, port, ttl, weight, flags and tag.
Use digitalocean_domain_records_list to find a record ID or check current DNS. Use digitalocean_domain_record_get for one record.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `domain_name` (`string`, required): The domain name as registered in DigitalOcean DNS, without a trailing dot. Example: example.com.
- `name` (`string`, optional): Only return records with this fully qualified name. Example: www.example.com.
- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.
- `type` (`string`, optional): Only return records of this type. One of: `A`, `AAAA`, `CAA`, `CNAME`, `MX`, `NS`, `SOA`, `SRV`, `TXT`.

Example input: `{"domain_name":"<domain_name>"}`

### `digitalocean_domains_list`

List Domains · Read-only

List the domains managed in DigitalOcean DNS.
Returns a page of domains with name, ttl and zone_file.
Use digitalocean_domains_list to see which domains DigitalOcean serves DNS for. Use digitalocean_domain_records_list for a domain's records.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_droplet_actions_list`

List Droplet Actions · Read-only

List the actions that have run on a Droplet, newest first.
Returns a page of actions with id, type, status, started_at, completed_at and region.
Use digitalocean_droplet_actions_list for one Droplet's history. Use digitalocean_actions_list for every action in the account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `droplet_id` (`integer`, required): Numeric ID of the Droplet. Get it from digitalocean_droplets_list. Example: 3164444.
- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{"droplet_id":3164444}`

### `digitalocean_droplet_backups_list`

List Droplet Backups · Read-only

List the automated backups of a Droplet.
Returns a page of backups with id, name, created_at, regions, min_disk_size and size_gigabytes.
Use digitalocean_droplet_backups_list to find a backup ID for digitalocean_droplet_action_run with type restore. Use digitalocean_droplet_snapshots_list for manual snapshots.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `droplet_id` (`integer`, required): Numeric ID of the Droplet. Get it from digitalocean_droplets_list. Example: 3164444.
- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{"droplet_id":3164444}`

### `digitalocean_droplet_bandwidth_metrics_get`

Get Droplet Bandwidth Metrics · Read-only

Get a time series of a Droplet's network bandwidth in megabits per second for one interface and direction.
Returns a Prometheus-style result: data.result with values as [UNIX timestamp, Mbps] pairs.
Use digitalocean_droplet_bandwidth_metrics_get for network traffic. Use digitalocean_droplet_metrics_get for CPU, memory, load or disk.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `direction` (`string`, required): Traffic direction: inbound or outbound. One of: `inbound`, `outbound`.
- `end` (`string`, required): End of the time window as a UNIX timestamp in seconds. Example: 1620705417.
- `host_id` (`string`, required): ID of the Droplet to get metrics for, as a string. The Droplet needs the monitoring agent. Example: 17209102.
- `interface` (`string`, required): Network interface: public or private. One of: `private`, `public`.
- `start` (`string`, required): Start of the time window as a UNIX timestamp in seconds. Example: 1620683817.

Example input: `{"direction":"inbound","end":"<end>","host_id":"<host_id>","interface":"private","start":"<start>"}`

### `digitalocean_droplet_get`

Get Droplet · Read-only

Get one Droplet by its ID.
Returns the Droplet's name, status (new, active, off, archive), size, image, region, networks with public and private IPs, volume_ids, tags, features, backup and snapshot IDs, and creation time.
Use digitalocean_droplet_get when you know the Droplet ID. Use digitalocean_droplets_list to find it.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `droplet_id` (`integer`, required): Numeric ID of the Droplet. Get it from digitalocean_droplets_list. Example: 3164444.

Example input: `{"droplet_id":3164444}`

### `digitalocean_droplet_metrics_get`

Get Droplet Metrics · Read-only

Get a time series of one CPU, memory, load or filesystem metric for a Droplet.
Returns a Prometheus-style result: data.result with metric labels and values as [UNIX timestamp, value] pairs.
Use digitalocean_droplet_metrics_get for CPU, memory, load or disk metrics. Use digitalocean_droplet_bandwidth_metrics_get for network traffic. Memory, load and filesystem metrics need the monitoring agent on the Droplet.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `end` (`string`, required): End of the time window as a UNIX timestamp in seconds. Example: 1620705417.
- `host_id` (`string`, required): ID of the Droplet to get metrics for, as a string. The Droplet needs the monitoring agent. Example: 17209102.
- `metric` (`string`, required): Metric to fetch: cpu (CPU seconds by mode), memory_total, memory_free, memory_available, memory_cached (bytes), load_1, load_5, load_15 (load averages), filesystem_size, filesystem_free (bytes). One of: `cpu`, `memory_total`, `memory_free`, `memory_available`, `memory_cached`, `load_1`, `load_5`, `load_15`, `filesystem_size`, `filesystem_free`.
- `start` (`string`, required): Start of the time window as a UNIX timestamp in seconds. Example: 1620683817.

Example input: `{"end":"<end>","host_id":"<host_id>","metric":"cpu","start":"<start>"}`

### `digitalocean_droplet_snapshots_list`

List Droplet Snapshots · Read-only

List the snapshots taken from a Droplet.
Returns a page of snapshots with id, name, created_at, regions, min_disk_size and size_gigabytes.
Use digitalocean_droplet_snapshots_list for one Droplet. Use digitalocean_snapshots_list for all Droplet and volume snapshots.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `droplet_id` (`integer`, required): Numeric ID of the Droplet. Get it from digitalocean_droplets_list. Example: 3164444.
- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{"droplet_id":3164444}`

### `digitalocean_droplets_list`

List Droplets · Read-only

List the Droplets (virtual machines) in the account, optionally filtered by tag, exact name, or GPU type.
Returns a page of Droplets with id, name, status, memory, vcpus, disk, region, image, size_slug, networks (IP addresses), tags and vpc_uuid, plus links and meta.total.
Use digitalocean_droplets_list to find a Droplet ID. Use digitalocean_droplet_get for one Droplet's full details.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `name` (`string`, optional): Only return Droplets whose name matches exactly (case-insensitive). Cannot be combined with tag_name. Example: web-01.
- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.
- `tag_name` (`string`, optional): Only return Droplets that have this tag. Cannot be combined with name or type. Example: env:prod.
- `type` (`string`, optional): Set to `gpus` to list only GPU Droplets; `droplets` (or empty) lists regular Droplets. Cannot be combined with tag_name. One of: `droplets`, `gpus`.

Example input: `{}`

### `digitalocean_firewall_get`

Get Firewall · Read-only

Get one cloud firewall by ID.
Returns its name, status, inbound_rules, outbound_rules, droplet_ids, tags, pending_changes and created_at.
Use digitalocean_firewall_get to review a firewall's rules and which Droplets it covers.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `firewall_id` (`string`, required): UUID of the cloud firewall. Get it from digitalocean_firewalls_list. Example: bb4b2611-3d72-467b-8602-280330ecd65c.

Example input: `{"firewall_id":"<firewall_id>"}`

### `digitalocean_firewalls_list`

List Firewalls · Read-only

List the cloud firewalls in the account.
Returns a page of firewalls with id, name, status, inbound_rules, outbound_rules, droplet_ids, tags and pending_changes.
Use digitalocean_firewalls_list to find a firewall ID. Use digitalocean_firewall_get for one firewall.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_image_get`

Get Image · Read-only

Get one image by ID or, for public images, by slug.
Returns the image's name, distribution, slug, public flag, regions, type, min_disk_size, size_gigabytes, status and created_at.
Use digitalocean_image_get when you know the image. Use digitalocean_images_list to browse.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `image_id` (`string`, required): Numeric image ID, or the slug of a public image (e.g. ubuntu-24-04-x64). Private images must use the ID.

Example input: `{"image_id":"<image_id>"}`

### `digitalocean_images_list`

List Images · Read-only

List images available to the account: OS distributions, 1-Click application images, and the user's own snapshots, backups and custom images.
Returns a page of images with id, slug, name, distribution, type, public flag, regions, min_disk_size and created_at.
Use digitalocean_images_list to find an image slug or ID for digitalocean_droplet_create. Use digitalocean_image_get for one image.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.
- `private` (`boolean`, optional): Set to true to list only the user's own images (snapshots, backups, custom images).
- `tag_name` (`string`, optional): Only return images with this tag. Example: base-image.
- `type` (`string`, optional): Filter to `distribution` (OS images) or `application` (1-Click app images). Leave empty for all. One of: `application`, `distribution`.

Example input: `{}`

### `digitalocean_invoice_summary_get`

Get Invoice Summary · Read-only

Get the summary of one invoice.
Returns the billing period, amount, user and address details, product_charges grouped by product, overages, taxes and credits_and_adjustments.
Use digitalocean_invoice_summary_get to see what an invoice was for.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_uuid` (`string`, required): UUID of the invoice. Get it from digitalocean_invoices_list. Example: 22737513-0ea7-4206-8ceb-98a575af7681.

Example input: `{"invoice_uuid":"<invoice_uuid>"}`

### `digitalocean_invoices_list`

List Invoices · Read-only

List the account's invoices, newest first, plus a preview of the current month.
Returns invoices with invoice_uuid, amount, invoice_period and updated_at, and invoice_preview.
Use digitalocean_invoices_list to find an invoice UUID. Use digitalocean_invoice_summary_get for one invoice's breakdown.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_kubernetes_cluster_get`

Get Kubernetes Cluster · Read-only

Get one Kubernetes cluster by ID.
Returns the cluster's name, region, version, status (state and message), endpoint, ipv4, node_pools with their nodes, maintenance_policy, auto_upgrade, surge_upgrade, ha and tags.
Use digitalocean_kubernetes_cluster_get to check a cluster's state or node pools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cluster_id` (`string`, required): UUID of the Kubernetes cluster. Get it from digitalocean_kubernetes_clusters_list. Example: bd5f5959-5e1e-4205-a714-a914373942af.

Example input: `{"cluster_id":"<cluster_id>"}`

### `digitalocean_kubernetes_clusters_list`

List Kubernetes Clusters · Read-only

List the DigitalOcean Kubernetes (DOKS) clusters in the account.
Returns a page of clusters with id, name, region, version, status, endpoint, node_pools, vpc_uuid, auto_upgrade, ha and tags.
Use digitalocean_kubernetes_clusters_list to find a cluster ID. Use digitalocean_kubernetes_cluster_get for one cluster.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_kubernetes_node_pool_get`

Get Kubernetes Node Pool · Read-only

Get one node pool of a Kubernetes cluster.
Returns the pool's name, size, count, tags, labels, taints, auto_scale settings and nodes with status and droplet_id.
Use digitalocean_kubernetes_node_pool_get for one pool. Use digitalocean_kubernetes_node_pools_list for all pools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cluster_id` (`string`, required): UUID of the Kubernetes cluster. Get it from digitalocean_kubernetes_clusters_list. Example: bd5f5959-5e1e-4205-a714-a914373942af.
- `node_pool_id` (`string`, required): UUID of the node pool. Get it from digitalocean_kubernetes_node_pools_list. Example: cdda885e-7663-40c8-bc74-3a036c66545d.

Example input: `{"cluster_id":"<cluster_id>","node_pool_id":"<node_pool_id>"}`

### `digitalocean_kubernetes_node_pools_list`

List Kubernetes Node Pools · Read-only

List the node pools of a Kubernetes cluster.
Returns each pool's id, name, size, count, tags, labels, taints, auto_scale settings and nodes with their status and droplet_id.
Use digitalocean_kubernetes_node_pools_list to find a node pool ID or check node status.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cluster_id` (`string`, required): UUID of the Kubernetes cluster. Get it from digitalocean_kubernetes_clusters_list. Example: bd5f5959-5e1e-4205-a714-a914373942af.

Example input: `{"cluster_id":"<cluster_id>"}`

### `digitalocean_kubernetes_options_list`

List Kubernetes Options · Read-only

List the Kubernetes versions, regions and node sizes available for DigitalOcean Kubernetes.
Returns options.versions (slug and kubernetes_version), options.regions and options.sizes.
Use digitalocean_kubernetes_options_list before digitalocean_kubernetes_cluster_create to pick valid values.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `digitalocean_load_balancer_get`

Get Load Balancer · Read-only

Get one load balancer by ID.
Returns its name, ip, status, region, forwarding_rules, health_check, sticky_sessions, droplet_ids, tag, firewall and timestamps.
Use digitalocean_load_balancer_get to check a load balancer's status and backends.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `lb_id` (`string`, required): UUID of the load balancer. Get it from digitalocean_load_balancers_list. Example: 4de7ac8b-495b-4884-9a69-1050c6793cd6.

Example input: `{"lb_id":"<lb_id>"}`

### `digitalocean_load_balancers_list`

List Load Balancers · Read-only

List the load balancers in the account.
Returns a page of load balancers with id, name, ip, status, region, size_unit, forwarding_rules, health_check, droplet_ids, tag and vpc_uuid.
Use digitalocean_load_balancers_list to find a load balancer ID. Use digitalocean_load_balancer_get for one.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_monitoring_alert_policies_list`

List Alert Policies · Read-only

List the monitoring alert policies in the account.
Returns a page of policies with uuid, type (e.g. v1/insights/droplet/cpu), description, compare, value, window, entities, tags, alerts (email and Slack) and enabled.
Use digitalocean_monitoring_alert_policies_list to review which alerts exist. Use digitalocean_monitoring_alert_policy_get for one policy.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_monitoring_alert_policy_get`

Get Alert Policy · Read-only

Get one monitoring alert policy.
Returns its type, description, compare, value, window, entities, tags, alerts and enabled flag.
Use digitalocean_monitoring_alert_policy_get when you know the policy UUID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `alert_uuid` (`string`, required): UUID of the alert policy. Get it from digitalocean_monitoring_alert_policies_list. Example: 4de7ac8b-495b-4884-9a69-1050c6793cd6.

Example input: `{"alert_uuid":"<alert_uuid>"}`

### `digitalocean_project_get`

Get Project · Read-only

Get one project by ID, or the default project.
Returns the project's name, description, purpose, environment, is_default, owner and timestamps.
Use digitalocean_project_get with project_id `default` to find the account's default project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): UUID of the project, or `default` for the account's default project. Get it from digitalocean_projects_list. Example: 4de7ac8b-495b-4884-9a69-1050c6793cd6.

Example input: `{"project_id":"<project_id>"}`

### `digitalocean_project_resources_list`

List Project Resources · Read-only

List the resources assigned to a project.
Returns a page of resources, each with a urn such as do:droplet:13457723, assigned_at, links.self and status.
Use digitalocean_project_resources_list to see what a project contains. Only resources the connection can read are returned.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): UUID of the project, or `default` for the account's default project. Get it from digitalocean_projects_list. Example: 4de7ac8b-495b-4884-9a69-1050c6793cd6.
- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{"project_id":"<project_id>"}`

### `digitalocean_projects_list`

List Projects · Read-only

List the projects in the account.
Returns a page of projects with id, name, description, purpose, environment, is_default, owner and timestamps.
Use digitalocean_projects_list to find a project ID. Use digitalocean_project_resources_list to see what is in a project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_regions_list`

List Regions · Read-only

List DigitalOcean datacenter regions.
Returns each region's slug (e.g. nyc3), name, available flag, features and the size slugs offered there.
Use digitalocean_regions_list to pick a region slug before creating a Droplet, volume, cluster or database.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_reserved_ip_get`

Get Reserved IP · Read-only

Get one reserved IP address.
Returns its region, the droplet it is assigned to (or null), locked and project_id.
Use digitalocean_reserved_ip_get to see where an IP points.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `reserved_ip` (`string`, required): The reserved IPv4 address itself. Example: 45.55.96.47.

Example input: `{"reserved_ip":"<reserved_ip>"}`

### `digitalocean_reserved_ips_list`

List Reserved IPs · Read-only

List the reserved (static) IPv4 addresses in the account.
Returns a page of reserved IPs with ip, region, the droplet it is assigned to (or null), locked and project_id.
Use digitalocean_reserved_ips_list to see which IPs are free or assigned.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_sizes_list`

List Sizes · Read-only

List the Droplet sizes (plans) available to the account.
Returns each size's slug, memory, vcpus, disk, transfer, price_monthly, price_hourly, regions and available flag.
Use digitalocean_sizes_list to pick a size slug for digitalocean_droplet_create or a resize.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_snapshots_list`

List Snapshots · Read-only

List all Droplet and volume snapshots in the account.
Returns a page of snapshots with id, name, resource_id, resource_type, regions, min_disk_size, size_gigabytes and created_at.
Use digitalocean_snapshots_list to find old snapshots. Use digitalocean_droplet_snapshots_list or digitalocean_volume_snapshots_list for one resource.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.
- `resource_type` (`string`, optional): Only return snapshots of Droplets or of volumes. One of: `droplet`, `volume`.

Example input: `{}`

### `digitalocean_ssh_key_get`

Get SSH Key · Read-only

Get one SSH key by ID or fingerprint.
Returns the key's id, fingerprint, name and public_key.
Use digitalocean_ssh_key_get when you know the key. Use digitalocean_ssh_keys_list to browse.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `ssh_key_id` (`string`, required): Numeric ID or fingerprint of the SSH key. Example: 512189 or 3b:16:bf:e4:8b:00:8b:b8:59:8c:a9:d3:f0:19:45:fa.

Example input: `{"ssh_key_id":"<ssh_key_id>"}`

### `digitalocean_ssh_keys_list`

List SSH Keys · Read-only

List the SSH public keys saved in the account.
Returns a page of keys with id, fingerprint, name and public_key.
Use digitalocean_ssh_keys_list to get key IDs or fingerprints for digitalocean_droplet_create.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_tags_list`

List Tags · Read-only

List the tags in the account.
Returns a page of tags with name and resources (count and last tagged item per resource type).
Use digitalocean_tags_list to see how resources are grouped.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_volume_get`

Get Volume · Read-only

Get one block storage volume by ID.
Returns the volume's name, description, size_gigabytes, region, droplet_ids, filesystem_type, filesystem_label, tags and created_at.
Use digitalocean_volume_get to check a volume's size or which Droplet it is attached to.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `volume_id` (`string`, required): UUID of the block storage volume. Get it from digitalocean_volumes_list. Example: 7724db7c-e098-11e5-b522-000f53304e51.

Example input: `{"volume_id":"<volume_id>"}`

### `digitalocean_volume_snapshots_list`

List Volume Snapshots · Read-only

List the snapshots taken from a block storage volume.
Returns a page of snapshots with id, name, created_at, regions, min_disk_size, size_gigabytes and tags.
Use digitalocean_volume_snapshots_list for one volume. Use digitalocean_snapshots_list with resource_type volume for all volume snapshots.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `volume_id` (`string`, required): UUID of the block storage volume. Get it from digitalocean_volumes_list. Example: 7724db7c-e098-11e5-b522-000f53304e51.
- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{"volume_id":"<volume_id>"}`

### `digitalocean_volumes_list`

List Volumes · Read-only

List the block storage volumes in the account, optionally filtered by name or region.
Returns a page of volumes with id, name, size_gigabytes, region, droplet_ids (attachments), filesystem_type, tags and created_at.
Use digitalocean_volumes_list to find a volume ID. Use digitalocean_volume_get for one volume.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `name` (`string`, optional): Only return volumes with this name. Example: example.
- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.
- `region` (`string`, optional): Only return volumes in this region slug. Example: nyc3.

Example input: `{}`

### `digitalocean_vpc_get`

Get VPC · Read-only

Get one VPC network by ID.
Returns its name, description, region, ip_range, default flag, urn and created_at.
Use digitalocean_vpc_get when you know the VPC ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `vpc_id` (`string`, required): UUID of the VPC. Get it from digitalocean_vpcs_list. Example: 4de7ac8b-495b-4884-9a69-1050c6793cd6.

Example input: `{"vpc_id":"<vpc_id>"}`

### `digitalocean_vpcs_list`

List VPCs · Read-only

List the VPC networks in the account.
Returns a page of VPCs with id, name, description, region, ip_range, default flag and created_at.
Use digitalocean_vpcs_list to find a VPC UUID for creating Droplets, clusters or databases.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. Use with per_page; the response's links.pages.next URL shows whether more pages exist. Example: 2. Default: `1`.
- `per_page` (`integer`, optional): Number of results per page, 1 to 200. Defaults to 20. Example: 50. Default: `20`.

Example input: `{}`

### `digitalocean_app_create`

Create App · Write

Create an App Platform app from an app spec and start its first deployment.
Returns the new app with its id, spec and pending deployment.
Use digitalocean_app_create to deploy a new app. Use digitalocean_app_spec_propose first to validate the spec and see its cost.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `spec` (`object`, required): The app spec for the new app. An app spec has a name, an optional region, and one or more components (services, static_sites, workers, jobs, functions, databases), each with a source such as github, gitlab or image. See https://docs.digitalocean.com/products/app-platform/reference/app-spec/. Example: {"name": "web-app", "region": "nyc", "services": [{"name": "web", "github": {"repo": "acme/web", "branch": "main", "deploy_on_push": true}, "instance_count": 1, "instance_size_slug": "apps-s-1vcpu-0.5gb", "http_port": 8080}]}
- `project_id` (`string`, optional): UUID of the project to put the app in. Leave empty for the default project. Get it from digitalocean_projects_list.

Example input: `{"spec":{}}`

### `digitalocean_app_deployment_cancel`

Cancel App Deployment · Write

Cancel an in-progress deployment of an App Platform app.
Returns the deployment with phase CANCELED.
Use digitalocean_app_deployment_cancel to stop a deployment that is building or deploying.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `app_id` (`string`, required): UUID of the App Platform app. Get it from digitalocean_apps_list. Example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf.
- `deployment_id` (`string`, required): UUID of the app deployment. Get it from digitalocean_app_deployments_list or the app's active_deployment.id. Example: 3aa4d20e-5527-4c00-b496-601fbd22520a.

Example input: `{"app_id":"<app_id>","deployment_id":"<deployment_id>"}`

### `digitalocean_app_deployment_create`

Create App Deployment · Write

Start a new deployment of an App Platform app from the latest source, without changing its spec.
Returns the new deployment with its id and phase.
Use digitalocean_app_deployment_create to redeploy. Use digitalocean_app_update to change the spec, or digitalocean_app_restart to restart without rebuilding.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `app_id` (`string`, required): UUID of the App Platform app. Get it from digitalocean_apps_list. Example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf.
- `force_build` (`boolean`, optional): Set to true to rebuild from source even when the source has not changed.

Example input: `{"app_id":"<app_id>"}`

### `digitalocean_app_restart`

Restart App · Write

Do a rolling restart of an App Platform app, or of selected components, without rebuilding.
Returns the deployment created for the restart.
Use digitalocean_app_restart to restart running instances. Use digitalocean_app_deployment_create to rebuild and redeploy.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `app_id` (`string`, required): UUID of the App Platform app. Get it from digitalocean_apps_list. Example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf.
- `components` (`array`, optional): Names of the components to restart. Leave empty to restart all. Example: ["web", "worker"].

Example input: `{"app_id":"<app_id>"}`

### `digitalocean_app_spec_propose`

Propose App Spec · Write

Validate an app spec for a new or existing App Platform app without changing anything.
Returns validation results, the expanded spec, the monthly cost and, for an existing app, the cost of the upgrade.
Use digitalocean_app_spec_propose before digitalocean_app_create or digitalocean_app_update to catch errors and see pricing.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `spec` (`object`, required): The app spec to validate. An app spec has a name, an optional region, and one or more components (services, static_sites, workers, jobs, functions, databases), each with a source such as github, gitlab or image. See https://docs.digitalocean.com/products/app-platform/reference/app-spec/. Example: {"name": "web-app", "region": "nyc", "services": [{"name": "web", "github": {"repo": "acme/web", "branch": "main", "deploy_on_push": true}, "instance_count": 1, "instance_size_slug": "apps-s-1vcpu-0.5gb", "http_port": 8080}]}
- `app_id` (`string`, optional): UUID of an existing app to treat the spec as a proposed update to. Leave empty for a new app.

Example input: `{"spec":{}}`

### `digitalocean_app_update`

Update App · Write

Replace an App Platform app's spec, which triggers a new deployment.
Returns the updated app with its spec and pending deployment.
Use digitalocean_app_update to change components, env vars, sizes or sources. Send the full spec: read it from digitalocean_app_get, edit, then send it back. Use digitalocean_app_deployment_create to redeploy without changes.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `app_id` (`string`, required): UUID of the App Platform app. Get it from digitalocean_apps_list. Example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf.
- `spec` (`object`, required): The complete new app spec; it replaces the current one. An app spec has a name, an optional region, and one or more components (services, static_sites, workers, jobs, functions, databases), each with a source such as github, gitlab or image. See https://docs.digitalocean.com/products/app-platform/reference/app-spec/. Example: {"name": "web-app", "region": "nyc", "services": [{"name": "web", "github": {"repo": "acme/web", "branch": "main", "deploy_on_push": true}, "instance_count": 1, "instance_size_slug": "apps-s-1vcpu-0.5gb", "http_port": 8080}]}
- `update_all_source_versions` (`boolean`, optional): Set to true to also pull the latest commit or image digest for every component. By default only newly added sources are fetched.

Example input: `{"app_id":"<app_id>","spec":{}}`

### `digitalocean_database_cluster_create`

Create Database Cluster · Write

Create a managed database cluster.
Returns the new cluster with its id, status `creating` and connection details; provisioning takes several minutes.
Use digitalocean_database_cluster_create to launch a database. Get valid engine versions, regions and sizes from digitalocean_database_options_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `engine` (`string`, required): Database engine: pg (PostgreSQL), mysql, valkey (Caching), redis, mongodb, kafka, opensearch, advanced_pg or advanced_mysql. One of: `pg`, `mysql`, `redis`, `valkey`, `mongodb`, `kafka`, `opensearch`, `advanced_pg`, `advanced_mysql`.
- `name` (`string`, required): Unique name for the cluster. Example: backend.
- `num_nodes` (`integer`, required): Number of nodes, including standbys. Example: 1.
- `region` (`string`, required): Region slug. Example: nyc3.
- `size` (`string`, required): Node size slug. Example: db-s-1vcpu-1gb.
- `private_network_uuid` (`string`, optional): UUID of the VPC for the cluster. Leave empty for the region's default VPC.
- `project_id` (`string`, optional): UUID of the project to put the cluster in. Leave empty for the default project.
- `storage_size_mib` (`integer`, optional): Extra storage to add beyond the size's base amount, in MiB. Example: 61440.
- `tags` (`array`, optional): Tags for the cluster. Example: ["production"].
- `version` (`string`, optional): Engine version, e.g. 17 for PostgreSQL. Leave empty for the default. Get options from digitalocean_database_options_list.

Example input: `{"engine":"pg","name":"<name>","num_nodes":1,"region":"<region>","size":"<size>"}`

### `digitalocean_database_create`

Create Database · Write

Create a database inside a managed database cluster. Not supported for Caching or Valkey clusters.
Returns the new database's name.
Use digitalocean_database_create to add a database. Use digitalocean_database_user_create to add a user who can connect to it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.
- `name` (`string`, required): Name of the new database. Example: alpha.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>","name":"<name>"}`

### `digitalocean_database_firewall_rules_update`

Update Database Trusted Sources · Write

Replace the firewall rules (trusted sources) of a managed database cluster.
Returns an empty response (HTTP 204) on success.
Use digitalocean_database_firewall_rules_update to allow Droplets, Kubernetes clusters, apps, tags or IP addresses to connect. Send the full list: rules not included are removed. Read the current list with digitalocean_database_firewall_rules_list first.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.
- `rules` (`array`, required): The complete list of trusted sources. Each rule has a type (droplet, k8s, ip_addr, tag or app) and a value (a Droplet ID, cluster ID, IP or CIDR, tag name, or app ID). Example: [{"type": "ip_addr", "value": "192.168.1.1"}, {"type": "droplet", "value": "163973392"}].

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>","rules":[{"type":"ip_addr","value":"192.168.1.1"},{"type":"droplet","value":"163973392"}]}`

### `digitalocean_database_user_create`

Create Database User · Write

Create a user in a managed database cluster with a generated password. Not supported for Caching or Valkey clusters.
Returns the new user with name, role and password.
Use digitalocean_database_user_create to add a login for an app or person. The response includes the password; handle it as a secret.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.
- `name` (`string`, required): Username for the new user. Example: app-01.
- `mysql_settings` (`object`, optional): MySQL only: authentication plugin, as {"auth_plugin": "caching_sha2_password"} or {"auth_plugin": "mysql_native_password"}.
- `settings` (`object`, optional): Engine-specific user settings, such as PostgreSQL pg_allow_replication, Kafka topic ACLs or OpenSearch index ACLs. Example: {"pg_allow_replication": true}.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>","name":"<name>"}`

### `digitalocean_domain_create`

Create Domain · Write

Add a domain to DigitalOcean DNS, optionally with an apex A record.
Returns the new domain's name and ttl.
Use digitalocean_domain_create to start managing a domain's DNS. Point the domain's nameservers at ns1/ns2/ns3.digitalocean.com at the registrar.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Domain name to add, such as example.com.
- `ip_address` (`string`, optional): IPv4 address for an A record on the apex (@). Leave empty to create no record.

Example input: `{"name":"<name>"}`

### `digitalocean_domain_record_create`

Create Domain Record · Write

Create a DNS record (A, AAAA, CAA, CNAME, MX, NS, SRV or TXT) for a domain.
Returns the new record with its id.
Use digitalocean_domain_record_create to add a record. Use digitalocean_domain_record_update to change an existing one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `data` (`string`, required): Record value: an IP for A/AAAA, a hostname for CNAME/MX/NS/SRV (end hostnames with a dot or use @), the text for TXT, or the CA domain for CAA. Example: 192.0.2.1.
- `domain_name` (`string`, required): The domain name as registered in DigitalOcean DNS, without a trailing dot. Example: example.com.
- `name` (`string`, required): Host name relative to the domain: @ for the apex, or a subdomain label such as www.
- `type` (`string`, required): Record type. MX needs priority; SRV needs priority, port and weight; CAA needs flags and tag. One of: `A`, `AAAA`, `CAA`, `CNAME`, `MX`, `NS`, `SRV`, `TXT`.
- `flags` (`integer`, optional): Flags for CAA records, 0 to 255. Example: 0.
- `port` (`integer`, optional): Port for SRV records. Example: 5060.
- `priority` (`integer`, optional): Priority for MX and SRV records (lower is preferred). Example: 10.
- `tag` (`string`, optional): Tag for CAA records: issue, issuewild or iodef. One of: `issue`, `issuewild`, `iodef`.
- `ttl` (`integer`, optional): Time to live in seconds; minimum 30. Defaults to 1800 when created. Example: 3600.
- `weight` (`integer`, optional): Weight for SRV records. Example: 100.

Example input: `{"data":"<data>","domain_name":"<domain_name>","name":"<name>","type":"A"}`

### `digitalocean_domain_record_update`

Update Domain Record · Write

Change fields of an existing DNS record, such as its value or TTL.
Returns the updated record.
Use digitalocean_domain_record_update to edit a record in place. Use digitalocean_domain_record_create to add a new one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `domain_name` (`string`, required): The domain name as registered in DigitalOcean DNS, without a trailing dot. Example: example.com.
- `domain_record_id` (`integer`, required): Numeric ID of the DNS record. Get it from digitalocean_domain_records_list. Example: 3352896.
- `type` (`string`, required): Type of the record being updated (it cannot be changed). Example: A. One of: `A`, `AAAA`, `CAA`, `CNAME`, `MX`, `NS`, `SOA`, `SRV`, `TXT`.
- `data` (`string`, optional): New record value, e.g. a new IP for an A record.
- `flags` (`integer`, optional): Flags for CAA records, 0 to 255. Example: 0.
- `name` (`string`, optional): New host name: @ for the apex, or a subdomain label such as www.
- `port` (`integer`, optional): Port for SRV records. Example: 5060.
- `priority` (`integer`, optional): Priority for MX and SRV records (lower is preferred). Example: 10.
- `tag` (`string`, optional): Tag for CAA records: issue, issuewild or iodef. One of: `issue`, `issuewild`, `iodef`.
- `ttl` (`integer`, optional): Time to live in seconds; minimum 30. Defaults to 1800 when created. Example: 3600.
- `weight` (`integer`, optional): Weight for SRV records. Example: 100.

Example input: `{"domain_name":"<domain_name>","domain_record_id":3352896,"type":"A"}`

### `digitalocean_droplet_action_run`

Run Droplet Action · Write

Run an action on a Droplet: power on/off, reboot, shutdown, power cycle, resize, rebuild, rename, snapshot, restore, password reset, change kernel, enable IPv6, or enable/disable backups.
Returns the action with its id, status (in-progress, completed, errored), type and started_at; most actions finish asynchronously.
Use digitalocean_droplet_action_run to change a Droplet's state. Use digitalocean_action_get with the returned ID to check completion, and digitalocean_droplet_actions_list for its action history.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `droplet_id` (`integer`, required): Numeric ID of the Droplet. Get it from digitalocean_droplets_list. Example: 3164444.
- `type` (`string`, required): Action to run. power_on, power_off, shutdown, reboot, power_cycle, password_reset, enable_ipv6, enable_backups and disable_backups need no other field. resize needs size (and optionally disk). rebuild needs image. rename needs name. snapshot takes an optional name. restore needs image (a backup ID). change_kernel needs kernel. One of: `power_on`, `power_off`, `shutdown`, `reboot`, `power_cycle`, `password_reset`, `enable_ipv6`, `enable_backups`, `disable_backups`, `resize`, `rebuild`, `rename`, `snapshot`, `restore`, `change_kernel`.
- `disk` (`boolean`, optional): For `resize` only: true also grows the disk. This is permanent; disks cannot shrink. Leave empty or false to resize only CPU and RAM.
- `image` (`string`, optional): For `rebuild`: image slug or ID to rebuild from (e.g. ubuntu-24-04-x64). For `restore`: the ID of one of this Droplet's backups (from digitalocean_droplet_backups_list).
- `kernel` (`integer`, optional): For `change_kernel`: ID of the kernel to switch to. Example: 12389723.
- `name` (`string`, optional): New Droplet name for `rename`, or the snapshot name for `snapshot`. Example: web-01-renamed.
- `size` (`string`, optional): Target size slug for `resize`. Get options from digitalocean_sizes_list. Example: s-2vcpu-2gb.

Example input: `{"droplet_id":3164444,"type":"power_on"}`

### `digitalocean_droplet_create`

Create Droplet · Write

Create a new Droplet (virtual machine) from an image, size and region.
Returns the new Droplet with its id and status `new`, plus links.actions with the create action ID; creation finishes asynchronously.
Use digitalocean_droplet_create to launch one Droplet. Use digitalocean_action_get with the returned action ID to check progress, then digitalocean_droplet_get for its IP address.
Get valid region, size and image slugs from digitalocean_regions_list, digitalocean_sizes_list and digitalocean_images_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `image` (`string`, required): Image to build the Droplet from: a public image slug such as ubuntu-24-04-x64, or the numeric ID of a private image or snapshot (as a string). Get options from digitalocean_images_list.
- `name` (`string`, required): Name for the Droplet. If it is a domain managed in DigitalOcean DNS, a PTR record is created. Example: web-01.
- `size` (`string`, required): Size slug that sets CPU, memory and disk. Get options from digitalocean_sizes_list. Example: s-1vcpu-1gb.
- `backups` (`boolean`, optional): Set to true to enable automated backups (extra cost). Defaults to false.
- `ipv6` (`boolean`, optional): Set to true to enable IPv6 on the Droplet. Defaults to false.
- `monitoring` (`boolean`, optional): Set to true to install the DigitalOcean monitoring agent, needed for memory, disk and load metrics. Defaults to false.
- `region` (`string`, optional): Region slug to create the Droplet in. A prefix such as `nyc` picks any datacenter in that region. Get options from digitalocean_regions_list. Example: nyc3.
- `ssh_keys` (`array`, optional): SSH key IDs or fingerprints to add to the root account. Keys must already be in the account (digitalocean_ssh_keys_list). Example: [289794] or ["3b:16:e4:bf:8b:00:8b:b8:59:8c:a9:d3:f0:19:fa:45"].
- `tags` (`array`, optional): Tag names to apply. New tag names are created automatically. Example: ["env:prod", "web"].
- `user_data` (`string`, optional): Cloud-init user data (cloud-config or a shell script) run on first boot, plain text up to 64 KiB. Example: #cloud-config\nruncmd:\n  - touch /test.txt
- `volumes` (`array`, optional): IDs of block storage volumes to attach. Volumes must be in the same region and not attached elsewhere. Example: ["12e97116-7280-11ed-b3d0-0a58ac146812"].
- `vpc_uuid` (`string`, optional): UUID of the VPC to place the Droplet in. Leave empty for the region's default VPC. Get it from digitalocean_vpcs_list.
- `with_droplet_agent` (`boolean`, optional): Set to false to skip installing the agent used for the web console. Leave empty for the default (installed).

Example input: `{"image":"<image>","name":"<name>","size":"<size>"}`

### `digitalocean_firewall_create`

Create Firewall · Write

Create a cloud firewall with inbound and outbound rules, applied to Droplets by ID or tag.
Returns the new firewall with its id and status.
Use digitalocean_firewall_create to restrict traffic. At least one inbound or outbound rule is required; traffic not allowed by a rule is dropped.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Firewall name: starts with a letter or number, then letters, numbers, periods or dashes. Example: web-fw.
- `droplet_ids` (`array`, optional): IDs of the Droplets to apply the firewall to. Example: [8043964].
- `inbound_rules` (`array`, optional): Inbound rules. Each rule has a protocol (tcp, udp or icmp), ports (a port, a range such as 8000-9000, or 0 for all) and sources, an object with addresses (IPs or CIDRs), droplet_ids, load_balancer_uids, kubernetes_ids and/or tags. Example: [{"protocol": "tcp", "ports": "22", "sources": {"addresses": ["0.0.0.0/0", "::/0"]}}].
- `outbound_rules` (`array`, optional): Outbound rules. Each rule has a protocol (tcp, udp or icmp), ports and destinations, an object with addresses, droplet_ids, load_balancer_uids, kubernetes_ids and/or tags. Example: [{"protocol": "tcp", "ports": "0", "destinations": {"addresses": ["0.0.0.0/0", "::/0"]}}].
- `tags` (`array`, optional): Apply the firewall to all Droplets with these existing tags. Example: ["web"].

Example input: `{"name":"<name>"}`

### `digitalocean_firewall_droplets_add`

Add Droplets to Firewall · Write

Apply a cloud firewall to more Droplets.
Returns an empty response (HTTP 204) on success.
Use digitalocean_firewall_droplets_add to protect specific Droplets. Use digitalocean_firewall_droplets_remove to take them off.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `droplet_ids` (`array`, required): IDs of the Droplets to add. Example: [49696269].
- `firewall_id` (`string`, required): UUID of the cloud firewall. Get it from digitalocean_firewalls_list. Example: bb4b2611-3d72-467b-8602-280330ecd65c.

Example input: `{"droplet_ids":[49696269],"firewall_id":"<firewall_id>"}`

### `digitalocean_firewall_rules_add`

Add Firewall Rules · Write

Add inbound and/or outbound rules to a cloud firewall without replacing the existing ones.
Returns an empty response (HTTP 204) on success.
Use digitalocean_firewall_rules_add to open ports. Use digitalocean_firewall_rules_remove to close them.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `firewall_id` (`string`, required): UUID of the cloud firewall. Get it from digitalocean_firewalls_list. Example: bb4b2611-3d72-467b-8602-280330ecd65c.
- `inbound_rules` (`array`, optional): Inbound rules. Each rule has a protocol (tcp, udp or icmp), ports (a port, a range such as 8000-9000, or 0 for all) and sources, an object with addresses (IPs or CIDRs), droplet_ids, load_balancer_uids, kubernetes_ids and/or tags. Example: [{"protocol": "tcp", "ports": "22", "sources": {"addresses": ["0.0.0.0/0", "::/0"]}}].
- `outbound_rules` (`array`, optional): Outbound rules. Each rule has a protocol (tcp, udp or icmp), ports and destinations, an object with addresses, droplet_ids, load_balancer_uids, kubernetes_ids and/or tags. Example: [{"protocol": "tcp", "ports": "0", "destinations": {"addresses": ["0.0.0.0/0", "::/0"]}}].

Example input: `{"firewall_id":"<firewall_id>"}`

### `digitalocean_kubernetes_cluster_create`

Create Kubernetes Cluster · Write

Create a DigitalOcean Kubernetes cluster with at least one node pool.
Returns the new cluster with its id and status `provisioning`; provisioning takes several minutes.
Use digitalocean_kubernetes_cluster_create to launch a cluster. Get valid versions, regions and node sizes from digitalocean_kubernetes_options_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name for the cluster. Example: prod-cluster-01.
- `node_pools` (`array`, required): Node pools to create. Each pool needs a name, a size slug and a count; it can also set tags, labels, taints, auto_scale, min_nodes and max_nodes. Example: [{"name": "worker-pool", "size": "s-2vcpu-4gb", "count": 3, "auto_scale": true, "min_nodes": 2, "max_nodes": 5}]
- `region` (`string`, required): Region slug for the cluster. Example: nyc1.
- `version` (`string`, required): Kubernetes version slug, a minor version such as 1.31 (latest patch is used), or `latest`. Get options from digitalocean_kubernetes_options_list.
- `auto_upgrade` (`boolean`, optional): Set to true to apply new patch releases automatically during the maintenance window.
- `ha` (`boolean`, optional): Set to true for a highly available control plane (cannot be turned off later).
- `maintenance_policy` (`object`, optional): Weekly maintenance window: start_time in UTC as HH:MM and day (any, monday ... sunday). Example: {"start_time": "04:00", "day": "sunday"}.
- `surge_upgrade` (`boolean`, optional): Set to true to add new nodes before removing old ones during upgrades.
- `tags` (`array`, optional): Tags for the cluster. Clusters are also tagged k8s and k8s:<cluster id> automatically. Example: ["production"].
- `vpc_uuid` (`string`, optional): UUID of the VPC for the cluster. Leave empty for the region's default VPC.

Example input: `{"name":"<name>","node_pools":[{"name":"worker-pool","size":"s-2vcpu-4gb","count":3,"auto_scale":true,"min_nodes":2,"max_nodes":5}],"region":"<region>","version":"<version>"}`

### `digitalocean_kubernetes_cluster_update`

Update Kubernetes Cluster · Write

Update a Kubernetes cluster's name, tags, maintenance window, auto-upgrade, surge-upgrade or high-availability setting.
Returns the updated cluster.
Use digitalocean_kubernetes_cluster_update to change cluster settings. Use digitalocean_kubernetes_node_pool_update to change node counts.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cluster_id` (`string`, required): UUID of the Kubernetes cluster. Get it from digitalocean_kubernetes_clusters_list. Example: bd5f5959-5e1e-4205-a714-a914373942af.
- `name` (`string`, required): Cluster name (send the current name to keep it). Example: prod-cluster-01.
- `auto_upgrade` (`boolean`, optional): Set to true to apply new patch releases automatically.
- `ha` (`boolean`, optional): Set to true to make the control plane highly available. This cannot be turned off.
- `maintenance_policy` (`object`, optional): Weekly maintenance window: start_time in UTC as HH:MM and day (any, monday ... sunday). Example: {"start_time": "04:00", "day": "sunday"}.
- `surge_upgrade` (`boolean`, optional): Set to true to add new nodes before removing old ones during upgrades.
- `tags` (`array`, optional): Tags for the cluster; replaces the current custom tags. Example: ["production"].

Example input: `{"cluster_id":"<cluster_id>","name":"<name>"}`

### `digitalocean_kubernetes_node_pool_create`

Create Kubernetes Node Pool · Write

Add a node pool to a Kubernetes cluster.
Returns the new node pool with its id and nodes being provisioned.
Use digitalocean_kubernetes_node_pool_create to add worker capacity of a new size. Use digitalocean_kubernetes_node_pool_update to resize an existing pool.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `cluster_id` (`string`, required): UUID of the Kubernetes cluster. Get it from digitalocean_kubernetes_clusters_list. Example: bd5f5959-5e1e-4205-a714-a914373942af.
- `count` (`integer`, required): Number of nodes in the pool. Example: 3.
- `name` (`string`, required): Name for the node pool. Example: frontend-pool.
- `size` (`string`, required): Droplet size slug for the worker nodes. Example: s-2vcpu-4gb.
- `auto_scale` (`boolean`, optional): Set to true to let the pool scale between min_nodes and max_nodes.
- `labels` (`object`, optional): Kubernetes labels to apply to every node in the pool, as key/value pairs. Example: {"service": "web", "priority": "high"}.
- `max_nodes` (`integer`, optional): Maximum number of nodes when auto_scale is true. Example: 5.
- `min_nodes` (`integer`, optional): Minimum number of nodes when auto_scale is true. Example: 2.
- `tags` (`array`, optional): Tags for the nodes. Every pool is also tagged k8s, k8s-worker and k8s:<cluster id> automatically. Example: ["frontend"].
- `taints` (`array`, optional): Kubernetes taints for every node in the pool. Each taint has a key, a value and an effect (NoSchedule, PreferNoSchedule or NoExecute). Example: [{"key": "dedicated", "value": "gpu", "effect": "NoSchedule"}].

Example input: `{"cluster_id":"<cluster_id>","count":3,"name":"<name>","size":"<size>"}`

### `digitalocean_kubernetes_node_pool_update`

Update Kubernetes Node Pool · Write

Update a Kubernetes node pool's name, node count, tags, labels, taints or autoscaling.
Returns the updated node pool.
Use digitalocean_kubernetes_node_pool_update to scale a pool up or down. The size of a pool cannot change; create a new pool with digitalocean_kubernetes_node_pool_create instead.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cluster_id` (`string`, required): UUID of the Kubernetes cluster. Get it from digitalocean_kubernetes_clusters_list. Example: bd5f5959-5e1e-4205-a714-a914373942af.
- `count` (`integer`, required): Number of nodes the pool should have. Example: 5.
- `name` (`string`, required): Name of the node pool (send the current name to keep it). Example: frontend-pool.
- `node_pool_id` (`string`, required): UUID of the node pool. Get it from digitalocean_kubernetes_node_pools_list. Example: cdda885e-7663-40c8-bc74-3a036c66545d.
- `auto_scale` (`boolean`, optional): Set to true to let the pool scale between min_nodes and max_nodes.
- `labels` (`object`, optional): Kubernetes labels to apply to every node in the pool, as key/value pairs. Example: {"service": "web", "priority": "high"}.
- `max_nodes` (`integer`, optional): Maximum number of nodes when auto_scale is true. Example: 5.
- `min_nodes` (`integer`, optional): Minimum number of nodes when auto_scale is true. Example: 2.
- `tags` (`array`, optional): Tags for the nodes. Every pool is also tagged k8s, k8s-worker and k8s:<cluster id> automatically. Example: ["frontend"].
- `taints` (`array`, optional): Kubernetes taints for every node in the pool. Each taint has a key, a value and an effect (NoSchedule, PreferNoSchedule or NoExecute). Example: [{"key": "dedicated", "value": "gpu", "effect": "NoSchedule"}].

Example input: `{"cluster_id":"<cluster_id>","count":5,"name":"<name>","node_pool_id":"<node_pool_id>"}`

### `digitalocean_load_balancer_create`

Create Load Balancer · Write

Create a regional load balancer in front of Droplets chosen by ID or by tag.
Returns the new load balancer with its id and status `new`; it gets an IP once active.
Use digitalocean_load_balancer_create to balance traffic. Set either droplet_ids or tag, not both.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `forwarding_rules` (`array`, required): How traffic is forwarded. Each rule has entry_protocol and target_protocol (http, https, http2, http3, tcp or udp), entry_port and target_port, and for https a certificate_id or tls_passthrough. Example: [{"entry_protocol": "http", "entry_port": 80, "target_protocol": "http", "target_port": 8080}].
- `name` (`string`, required): Name for the load balancer. Example: web-lb-01.
- `region` (`string`, required): Region slug, the same as the Droplets'. Example: nyc3.
- `droplet_ids` (`array`, optional): IDs of the Droplets to balance across. Leave empty when using tag. Example: [3164444, 3164445].
- `health_check` (`object`, optional): Health check settings: protocol (http, https or tcp), port, path, check_interval_seconds, response_timeout_seconds, healthy_threshold and unhealthy_threshold. Example: {"protocol": "http", "port": 80, "path": "/healthz"}.
- `project_id` (`string`, optional): UUID of the project to put the load balancer in. Leave empty for the default project.
- `redirect_http_to_https` (`boolean`, optional): Set to true to redirect HTTP on port 80 to HTTPS on 443.
- `size_unit` (`integer`, optional): Number of nodes (1 to 100); more nodes handle more connections. Defaults to 1.
- `tag` (`string`, optional): Balance across all Droplets with this tag instead of droplet_ids. Example: prod:web.
- `vpc_uuid` (`string`, optional): UUID of the VPC. Leave empty for the region's default VPC.

Example input: `{"forwarding_rules":[{"entry_protocol":"http","entry_port":80,"target_protocol":"http","target_port":8080}],"name":"<name>","region":"<region>"}`

### `digitalocean_load_balancer_droplets_add`

Add Droplets to Load Balancer · Write

Add Droplets to a load balancer that selects Droplets by ID.
Returns an empty response (HTTP 204) on success.
Use digitalocean_load_balancer_droplets_add to add backends. For a tag-based load balancer, tag the Droplets with digitalocean_tag_resources_assign instead.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `droplet_ids` (`array`, required): IDs of the Droplets to add. Example: [3164444, 3164445].
- `lb_id` (`string`, required): UUID of the load balancer. Get it from digitalocean_load_balancers_list. Example: 4de7ac8b-495b-4884-9a69-1050c6793cd6.

Example input: `{"droplet_ids":[3164444,3164445],"lb_id":"<lb_id>"}`

### `digitalocean_project_create`

Create Project · Write

Create a project to group resources.
Returns the new project with its id.
Use digitalocean_project_create, then digitalocean_project_resources_assign to move resources into it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Unique project name, up to 175 characters. Example: my-web-api.
- `purpose` (`string`, required): What the project is for, up to 255 characters. Common values: Just trying out DigitalOcean, Class project / Educational purposes, Website or blog, Web Application, Service or API, Mobile Application, Machine learning / AI / Data processing, IoT, Operational / Developer tooling.
- `description` (`string`, optional): Description, up to 255 characters. Example: My website API.
- `environment` (`string`, optional): Environment of the project's resources: Development, Staging or Production. One of: `Development`, `Staging`, `Production`.

Example input: `{"name":"<name>","purpose":"<purpose>"}`

### `digitalocean_project_resources_assign`

Assign Resources to Project · Write

Move resources into a project, identified by their URNs.
Returns the assigned resources with urn, assigned_at and status.
Use digitalocean_project_resources_assign to organize Droplets, volumes, databases, apps, domains and more. A resource belongs to one project at a time.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `project_id` (`string`, required): UUID of the project, or `default` for the account's default project. Get it from digitalocean_projects_list. Example: 4de7ac8b-495b-4884-9a69-1050c6793cd6.
- `resources` (`array`, required): URNs of the resources to move, in the form do:<type>:<id>. Example: ["do:droplet:13457723", "do:domain:example.com"].

Example input: `{"project_id":"<project_id>","resources":["do:droplet:13457723","do:domain:example.com"]}`

### `digitalocean_project_update`

Update Project · Write

Change some fields of a project, or make it the default project.
Returns the updated project.
Use digitalocean_project_update to rename a project or change its purpose, environment or default flag. Send at least one field.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `project_id` (`string`, required): UUID of the project, or `default` for the account's default project. Get it from digitalocean_projects_list. Example: 4de7ac8b-495b-4884-9a69-1050c6793cd6.
- `description` (`string`, optional): New description.
- `environment` (`string`, optional): New environment: Development, Staging or Production. One of: `Development`, `Staging`, `Production`.
- `is_default` (`boolean`, optional): Set to true to make this the default project for new resources.
- `name` (`string`, optional): New name. Example: my-web-api.
- `purpose` (`string`, optional): New purpose. Common values: Just trying out DigitalOcean, Class project / Educational purposes, Website or blog, Web Application, Service or API, Mobile Application, Machine learning / AI / Data processing, IoT, Operational / Developer tooling.

Example input: `{"project_id":"<project_id>"}`

### `digitalocean_reserved_ip_action_run`

Assign or Unassign Reserved IP · Write

Assign a reserved IP to a Droplet or unassign it.
Returns the action with its id, type and status.
Use digitalocean_reserved_ip_action_run with type assign (needs droplet_id) to move an IP, or unassign to free it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `reserved_ip` (`string`, required): The reserved IPv4 address itself. Example: 45.55.96.47.
- `type` (`string`, required): assign (needs droplet_id) or unassign. One of: `assign`, `unassign`.
- `droplet_id` (`integer`, optional): Droplet to assign the IP to (assign only). Example: 758604968.

Example input: `{"reserved_ip":"<reserved_ip>","type":"assign"}`

### `digitalocean_reserved_ip_create`

Create Reserved IP · Write

Create a reserved IPv4 address, either assigned to a Droplet or held in a region.
Returns the new reserved IP.
Use digitalocean_reserved_ip_create with droplet_id to assign it right away, or with region to hold it for later.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `droplet_id` (`integer`, optional): Droplet to assign the new IP to. Leave empty when setting region. Example: 2457247.
- `project_id` (`string`, optional): Project to put the IP in (with region only). Leave empty for the default project.
- `region` (`string`, optional): Region to reserve the IP in, when not assigning it to a Droplet. Example: nyc3.

Example input: `{}`

### `digitalocean_ssh_key_create`

Create SSH Key · Write

Add an SSH public key to the account so it can be embedded in new Droplets.
Returns the saved key with its id, fingerprint, name and public_key.
Use digitalocean_ssh_key_create before digitalocean_droplet_create when the key is not yet saved.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Display name for the key. Example: laptop.
- `public_key` (`string`, required): The full public key line, e.g. starting with ssh-ed25519 or ssh-rsa.

Example input: `{"name":"<name>","public_key":"<public_key>"}`

### `digitalocean_tag_create`

Create Tag · Write

Create a tag.
Returns the new tag's name and resources.
Use digitalocean_tag_create before tagging resources. Most create tools also accept new tag names directly.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Tag name: letters, numbers, colons, dashes and underscores, up to 255 characters. Example: env:prod.

Example input: `{"name":"<name>"}`

### `digitalocean_tag_resources_assign`

Tag Resources · Write

Add a tag to Droplets, databases, images, volumes or volume snapshots.
Returns an empty response (HTTP 204) on success.
Use digitalocean_tag_resources_assign to group resources, for example for a tag-based load balancer or firewall.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `resources` (`array`, required): Resources to tag. Each item has resource_id (as a string) and resource_type: droplet, image, volume, volume_snapshot or database. Example: [{"resource_id": "9569411", "resource_type": "droplet"}].
- `tag_id` (`string`, required): Name of the tag. Example: env:prod.

Example input: `{"resources":[{"resource_id":"9569411","resource_type":"droplet"}],"tag_id":"<tag_id>"}`

### `digitalocean_volume_action_run`

Run Volume Action · Write

Attach a block storage volume to a Droplet, detach it, or resize it.
Returns the action with its id, type and status.
Use digitalocean_volume_action_run with type attach or detach (needs droplet_id) or resize (needs size_gigabytes). Use digitalocean_action_get to check completion.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `type` (`string`, required): attach and detach need droplet_id; resize needs size_gigabytes (volumes can only grow). One of: `attach`, `detach`, `resize`.
- `volume_id` (`string`, required): UUID of the block storage volume. Get it from digitalocean_volumes_list. Example: 7724db7c-e098-11e5-b522-000f53304e51.
- `droplet_id` (`integer`, optional): Droplet to attach to or detach from (attach, detach). Example: 11612190.
- `region` (`string`, optional): Region slug of the volume. Example: nyc3.
- `size_gigabytes` (`integer`, optional): New size in GiB (resize). Must be larger than the current size. Example: 100.

Example input: `{"type":"attach","volume_id":"<volume_id>"}`

### `digitalocean_volume_create`

Create Volume · Write

Create a block storage volume, empty or from a volume snapshot.
Returns the new volume with its id.
Use digitalocean_volume_create to add storage. Then attach it with digitalocean_volume_action_run (type attach).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Volume name: lowercase letters, numbers and dashes, starting with a letter, up to 64 characters. Example: data-01.
- `region` (`string`, required): Region slug; must match the Droplet it will attach to. Example: nyc3.
- `size_gigabytes` (`integer`, required): Size in GiB. Example: 10.
- `description` (`string`, optional): Free-form description. Example: Block store for examples.
- `filesystem_type` (`string`, optional): Format the volume with this filesystem: ext4 or xfs. Leave empty for an unformatted volume. One of: `ext4`, `xfs`.
- `snapshot_id` (`string`, optional): ID of a volume snapshot to create the volume from.
- `tags` (`array`, optional): Tag names to apply. Example: ["prod"].

Example input: `{"name":"<name>","region":"<region>","size_gigabytes":10}`

### `digitalocean_volume_snapshot_create`

Create Volume Snapshot · Write

Take a snapshot of a block storage volume.
Returns the new snapshot with its id.
Use digitalocean_volume_snapshot_create to back up a volume. Use digitalocean_droplet_action_run with type snapshot for a Droplet.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name for the snapshot. Example: data-01-2026-10-14.
- `volume_id` (`string`, required): UUID of the block storage volume. Get it from digitalocean_volumes_list. Example: 7724db7c-e098-11e5-b522-000f53304e51.
- `tags` (`array`, optional): Tag names to apply. Example: ["backup"].

Example input: `{"name":"<name>","volume_id":"<volume_id>"}`

### `digitalocean_vpc_create`

Create VPC · Write

Create a VPC network in a region.
Returns the new VPC with its id and ip_range.
Use digitalocean_vpc_create to isolate resources on a private network. The first VPC in a region becomes that region's default.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Unique name: letters, numbers, dashes and periods. Example: prod-vpc.
- `region` (`string`, required): Region slug. Example: nyc1.
- `description` (`string`, optional): Free-form description, up to 255 characters.
- `ip_range` (`string`, optional): Private IP range in CIDR notation (RFC 1918), between /16 and /24, not overlapping other VPCs. Leave empty to pick one automatically. Example: 10.10.10.0/24.

Example input: `{"name":"<name>","region":"<region>"}`

### `digitalocean_app_delete`

Delete App · Destructive

Delete an App Platform app and shut down all of its deployments.
Returns the deleted app's id.
Use digitalocean_app_delete to remove an app permanently. Save its spec with digitalocean_app_get first if you may recreate it.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `app_id` (`string`, required): UUID of the App Platform app. Get it from digitalocean_apps_list. Example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf.

Example input: `{"app_id":"<app_id>"}`

### `digitalocean_database_cluster_delete`

Delete Database Cluster · Destructive

Destroy a managed database cluster and all of its data.
Returns an empty response (HTTP 204) on success.
Use digitalocean_database_cluster_delete to remove a cluster permanently. Use digitalocean_database_delete to drop a single database inside a cluster.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>"}`

### `digitalocean_database_delete`

Delete Database · Destructive

Drop one database from a managed database cluster, deleting its data.
Returns an empty response (HTTP 204) on success.
Use digitalocean_database_delete to drop a single database. Use digitalocean_database_cluster_delete to destroy the whole cluster.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.
- `database_name` (`string`, required): Name of the database to drop. Example: alpha.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>","database_name":"<database_name>"}`

### `digitalocean_database_user_delete`

Delete Database User · Destructive

Remove a user from a managed database cluster.
Returns an empty response (HTTP 204) on success.
Use digitalocean_database_user_delete to revoke a login. The primary admin user cannot be removed.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `database_cluster_uuid` (`string`, required): UUID of the managed database cluster. Get it from digitalocean_database_clusters_list. Example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30.
- `username` (`string`, required): Name of the user to remove. Example: app-01.

Example input: `{"database_cluster_uuid":"<database_cluster_uuid>","username":"<username>"}`

### `digitalocean_domain_delete`

Delete Domain · Destructive

Remove a domain and all of its DNS records from DigitalOcean DNS.
Returns an empty response (HTTP 204) on success.
Use digitalocean_domain_delete to stop managing a domain. Use digitalocean_domain_record_delete to remove a single record.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `domain_name` (`string`, required): The domain name as registered in DigitalOcean DNS, without a trailing dot. Example: example.com.

Example input: `{"domain_name":"<domain_name>"}`

### `digitalocean_domain_record_delete`

Delete Domain Record · Destructive

Delete one DNS record from a domain.
Returns an empty response (HTTP 204) on success.
Use digitalocean_domain_record_delete to remove a record. Find its ID with digitalocean_domain_records_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `domain_name` (`string`, required): The domain name as registered in DigitalOcean DNS, without a trailing dot. Example: example.com.
- `domain_record_id` (`integer`, required): Numeric ID of the DNS record. Get it from digitalocean_domain_records_list. Example: 3352896.

Example input: `{"domain_name":"<domain_name>","domain_record_id":3352896}`

### `digitalocean_droplet_delete`

Delete Droplet · Destructive

Permanently delete a Droplet and its disk.
Returns an empty response (HTTP 204) on success.
Use digitalocean_droplet_delete to destroy a Droplet. Use digitalocean_droplet_action_run with type power_off to stop it without deleting.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `droplet_id` (`integer`, required): Numeric ID of the Droplet. Get it from digitalocean_droplets_list. Example: 3164444.

Example input: `{"droplet_id":3164444}`

### `digitalocean_firewall_delete`

Delete Firewall · Destructive

Delete a cloud firewall; its Droplets lose its rules.
Returns an empty response (HTTP 204) on success.
Use digitalocean_firewall_delete to remove a firewall permanently.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `firewall_id` (`string`, required): UUID of the cloud firewall. Get it from digitalocean_firewalls_list. Example: bb4b2611-3d72-467b-8602-280330ecd65c.

Example input: `{"firewall_id":"<firewall_id>"}`

### `digitalocean_firewall_droplets_remove`

Remove Droplets from Firewall · Destructive

Stop applying a cloud firewall to some Droplets.
Returns an empty response (HTTP 204) on success.
Use digitalocean_firewall_droplets_remove to take Droplets off a firewall.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `droplet_ids` (`array`, required): IDs of the Droplets to remove. Example: [49696269].
- `firewall_id` (`string`, required): UUID of the cloud firewall. Get it from digitalocean_firewalls_list. Example: bb4b2611-3d72-467b-8602-280330ecd65c.

Example input: `{"droplet_ids":[49696269],"firewall_id":"<firewall_id>"}`

### `digitalocean_firewall_rules_remove`

Remove Firewall Rules · Destructive

Remove inbound and/or outbound rules from a cloud firewall. Each rule must match an existing rule exactly.
Returns an empty response (HTTP 204) on success.
Use digitalocean_firewall_rules_remove to close ports. Copy the rules to remove from digitalocean_firewall_get.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `firewall_id` (`string`, required): UUID of the cloud firewall. Get it from digitalocean_firewalls_list. Example: bb4b2611-3d72-467b-8602-280330ecd65c.
- `inbound_rules` (`array`, optional): Inbound rules. Each rule has a protocol (tcp, udp or icmp), ports (a port, a range such as 8000-9000, or 0 for all) and sources, an object with addresses (IPs or CIDRs), droplet_ids, load_balancer_uids, kubernetes_ids and/or tags. Example: [{"protocol": "tcp", "ports": "22", "sources": {"addresses": ["0.0.0.0/0", "::/0"]}}].
- `outbound_rules` (`array`, optional): Outbound rules. Each rule has a protocol (tcp, udp or icmp), ports and destinations, an object with addresses, droplet_ids, load_balancer_uids, kubernetes_ids and/or tags. Example: [{"protocol": "tcp", "ports": "0", "destinations": {"addresses": ["0.0.0.0/0", "::/0"]}}].

Example input: `{"firewall_id":"<firewall_id>"}`

### `digitalocean_kubernetes_cluster_delete`

Delete Kubernetes Cluster · Destructive

Delete a Kubernetes cluster, its nodes and the workloads on it. Load balancers and volumes created by the cluster are not deleted.
Returns an empty response (HTTP 204) on success.
Use digitalocean_kubernetes_cluster_delete to remove a cluster permanently.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `cluster_id` (`string`, required): UUID of the Kubernetes cluster. Get it from digitalocean_kubernetes_clusters_list. Example: bd5f5959-5e1e-4205-a714-a914373942af.

Example input: `{"cluster_id":"<cluster_id>"}`

### `digitalocean_kubernetes_node_pool_delete`

Delete Kubernetes Node Pool · Destructive

Delete a node pool from a Kubernetes cluster; its nodes are drained and deleted.
Returns an empty response (HTTP 204) on success.
Use digitalocean_kubernetes_node_pool_delete to remove a pool. A cluster must keep at least one pool.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `cluster_id` (`string`, required): UUID of the Kubernetes cluster. Get it from digitalocean_kubernetes_clusters_list. Example: bd5f5959-5e1e-4205-a714-a914373942af.
- `node_pool_id` (`string`, required): UUID of the node pool. Get it from digitalocean_kubernetes_node_pools_list. Example: cdda885e-7663-40c8-bc74-3a036c66545d.

Example input: `{"cluster_id":"<cluster_id>","node_pool_id":"<node_pool_id>"}`

### `digitalocean_load_balancer_delete`

Delete Load Balancer · Destructive

Delete a load balancer. The Droplets behind it are not affected.
Returns an empty response (HTTP 204) on success.
Use digitalocean_load_balancer_delete to remove a load balancer permanently.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `lb_id` (`string`, required): UUID of the load balancer. Get it from digitalocean_load_balancers_list. Example: 4de7ac8b-495b-4884-9a69-1050c6793cd6.

Example input: `{"lb_id":"<lb_id>"}`

### `digitalocean_load_balancer_droplets_remove`

Remove Droplets from Load Balancer · Destructive

Remove Droplets from a load balancer that selects Droplets by ID. The Droplets themselves are not changed.
Returns an empty response (HTTP 204) on success.
Use digitalocean_load_balancer_droplets_remove to take backends out of rotation.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `droplet_ids` (`array`, required): IDs of the Droplets to remove. Example: [3164444].
- `lb_id` (`string`, required): UUID of the load balancer. Get it from digitalocean_load_balancers_list. Example: 4de7ac8b-495b-4884-9a69-1050c6793cd6.

Example input: `{"droplet_ids":[3164444],"lb_id":"<lb_id>"}`

### `digitalocean_project_delete`

Delete Project · Destructive

Delete an empty project. A project with resources returns 412; move or delete its resources first.
Returns an empty response (HTTP 204) on success.
Use digitalocean_project_delete to remove a project. The default project cannot be deleted.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): UUID of the project to delete. Example: 4de7ac8b-495b-4884-9a69-1050c6793cd6.

Example input: `{"project_id":"<project_id>"}`

### `digitalocean_reserved_ip_delete`

Delete Reserved IP · Destructive

Release a reserved IP address from the account.
Returns an empty response (HTTP 204) on success.
Use digitalocean_reserved_ip_delete to stop paying for an unused IP. Unassign it first with digitalocean_reserved_ip_action_run.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `reserved_ip` (`string`, required): The reserved IPv4 address itself. Example: 45.55.96.47.

Example input: `{"reserved_ip":"<reserved_ip>"}`

### `digitalocean_snapshot_delete`

Delete Snapshot · Destructive

Delete a Droplet or volume snapshot.
Returns an empty response (HTTP 204) on success.
Use digitalocean_snapshot_delete to clean up old snapshots and stop paying for them.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `snapshot_id` (`string`, required): ID of the snapshot: a number for Droplet snapshots, a UUID for volume snapshots. Example: 6372321.

Example input: `{"snapshot_id":"<snapshot_id>"}`

### `digitalocean_ssh_key_delete`

Delete SSH Key · Destructive

Remove an SSH key from the account. Droplets that already have the key keep it.
Returns an empty response (HTTP 204) on success.
Use digitalocean_ssh_key_delete to stop offering a key for new Droplets.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `ssh_key_id` (`string`, required): Numeric ID or fingerprint of the SSH key to delete. Example: 512189.

Example input: `{"ssh_key_id":"<ssh_key_id>"}`

### `digitalocean_tag_delete`

Delete Tag · Destructive

Delete a tag and remove it from every resource.
Returns an empty response (HTTP 204) on success.
Use digitalocean_tag_delete to remove a tag everywhere. Use digitalocean_tag_resources_unassign to untag specific resources.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `tag_id` (`string`, required): Name of the tag. Example: env:prod.

Example input: `{"tag_id":"<tag_id>"}`

### `digitalocean_tag_resources_unassign`

Untag Resources · Destructive

Remove a tag from specific Droplets, databases, images, volumes or volume snapshots.
Returns an empty response (HTTP 204) on success.
Use digitalocean_tag_resources_unassign to untag some resources. Use digitalocean_tag_delete to remove the tag everywhere.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `resources` (`array`, required): Resources to untag. Each item has resource_id (as a string) and resource_type: droplet, image, volume, volume_snapshot or database. Example: [{"resource_id": "9569411", "resource_type": "droplet"}].
- `tag_id` (`string`, required): Name of the tag. Example: env:prod.

Example input: `{"resources":[{"resource_id":"9569411","resource_type":"droplet"}],"tag_id":"<tag_id>"}`

### `digitalocean_volume_delete`

Delete Volume · Destructive

Delete a block storage volume and all of its data. The volume must be detached first.
Returns an empty response (HTTP 204) on success.
Use digitalocean_volume_delete to remove a volume permanently. Detach it with digitalocean_volume_action_run first.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `volume_id` (`string`, required): UUID of the block storage volume. Get it from digitalocean_volumes_list. Example: 7724db7c-e098-11e5-b522-000f53304e51.

Example input: `{"volume_id":"<volume_id>"}`

## Related

Other Developer Tools connectors ([all 117](/agentkit/connectors/?category=developer-tools)):

- [GitHub](/agentkit/connectors/github/): Scalekit connector, OAuth, 217 tools
- [Microsoft Entra ID](/agentkit/connectors/microsoftentraid/): Scalekit connector, OAuth, 82 tools
- [Datadog](/agentkit/connectors/datadog/): Scalekit connector, API key, 105 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
