DigitalOcean

Cloud infrastructure provider

docs.digitalocean.com/reference/api ↗
Version
2.0
OpenAPI
3.0.0
Endpoints
302
Schemas
493
Updated
3 days ago
Infrastructure cloud infrastructure hosting
Use this API in your AI agent

Query structured spec data via REST or MCP. Get exactly what your agent needs.

Get API Key

Server URLs

https://api.digitalocean.com

Authentication

bearer

Endpoints

Clear filters

1-click applications 1 endpoints

POST /v2/1-clicks/kubernetes

To install a Kubernetes 1-Click application on a cluster, send a POST request to `/v2/1-clicks/kubernetes`. The `addon_slugs` and `cluster_uuid` must be provided as body parameter in order to specify which 1-Click application(s) to install. To list all available 1-Click Kubernetes applications, send a request to `/v2/1-clicks?type=kubernetes`.

operationId: 1ClickApplications_installKubernetesApplication

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/oneClicks_create"
      }
    }
  },
  "required": true
}

Responses

default
200
401
429
500
POST /v2/1-clicks/kubernetes

Apps 10 endpoints

POST /v2/apps

Create a new app by submitting an app specification. For documentation on app specifications (`AppSpec` objects), please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/reference/app-spec/).

operationId: apps_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/apps_create_app_request"
      },
      "example": {
        "spec": {
          "name": "web-app",
          "region": "nyc",
          "services": [
            {
              "name": "api",
              "github": {
                "repo": "digitalocean/sample-golang",
                "branch": "main",
                "deploy_on_push": true
              },
              "routes": [
                {
                  "path": "/api"
                }
              ],
              "run_command": "bin/api",
              "instance_count": 2,
              "environment_slug": "node-js",
              "instance_size_slug": "basic-xxs"
            }
          ]
        }
      }
    }
  },
  "required": true
}

Responses

default
200
401
429
500
POST /v2/apps
POST /v2/apps/metrics/bandwidth_daily

Retrieve daily bandwidth usage metrics for multiple apps.

operationId: Apps_getMultipleDailyMetrics

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/app_metrics_bandwidth_usage_request"
      },
      "example": {
        "date": "2023-01-17T00:00:00Z",
        "app_ids": [
          "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf",
          "c2a93513-8d9b-4223-9d61-5e7272c81cf5"
        ]
      }
    }
  },
  "required": true
}

Responses

default
200
401
404
429
500
POST /v2/apps/metrics/bandwidth_daily
POST /v2/apps/propose

To propose and validate a spec for a new or existing app, send a POST request to the `/v2/apps/propose` endpoint. The request returns some information about the proposed app, including app cost and upgrade cost. If an existing app ID is specified, the app spec is treated as a proposed update to the existing app.

operationId: Apps_proposeAppSpec

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/app_propose"
      },
      "example": {
        "spec": {
          "name": "web-app",
          "region": "nyc",
          "services": [
            {
              "name": "api",
              "github": {
                "repo": "digitalocean/sample-golang",
                "branch": "main",
                "deploy_on_push": true
              },
              "routes": [
                {
                  "path": "/api"
                }
              ],
              "run_command": "bin/api",
              "instance_count": 2,
              "environment_slug": "node-js",
              "instance_size_slug": "basic-xxs"
            }
          ]
        },
        "app_id": "b6bdf840-2854-4f87-a36c-5f231c617c84"
      }
    }
  },
  "required": true
}

Responses

default
200
401
429
500
POST /v2/apps/propose
POST /v2/apps/{app_id}/alerts/{alert_id}/destinations

Updates the emails and slack webhook destinations for app alerts. Emails must be associated to a user with access to the app.

operationId: Apps_updateDestinationsForAlerts

Parameters

Name In Required Type Description
optional
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/apps_assign_app_alert_destinations_request"
      }
    }
  },
  "required": true
}

Responses

default
200
401
404
429
500
POST /v2/apps/{app_id}/alerts/{alert_id}/destinations
POST /v2/apps/{app_id}/deployments

Creating an app deployment will pull the latest changes from your repository and schedule a new deployment for your app.

operationId: Apps_createDeployment

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/apps_create_deployment_request"
      }
    }
  },
  "required": true
}

Responses

default
200
401
404
429
500
POST /v2/apps/{app_id}/deployments
POST /v2/apps/{app_id}/deployments/{deployment_id}/cancel

Immediately cancel an in-progress deployment.

operationId: Apps_cancelDeployment

Parameters

Name In Required Type Description
optional
optional

Responses

default
200
401
404
429
500
POST /v2/apps/{app_id}/deployments/{deployment_id}/cancel
POST /v2/apps/{app_id}/rollback

Rollback an app to a previous deployment. A new deployment will be created to perform the rollback. The app will be pinned to the rollback deployment preventing any new deployments from being created, either manually or through Auto Deploy on Push webhooks. To resume deployments, the rollback must be either committed or reverted. It is recommended to use the Validate App Rollback endpoint to double check if the rollback is valid and if there are any warnings.

operationId: Apps_rollbackDeployment

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/apps_rollback_app_request"
      }
    }
  },
  "required": true
}

Responses

default
200
401
404
429
500
POST /v2/apps/{app_id}/rollback
POST /v2/apps/{app_id}/rollback/commit

Commit an app rollback. This action permanently applies the rollback and unpins the app to resume new deployments.

operationId: Apps_commitRollback

Parameters

Name In Required Type Description
optional

Responses

default
200
401
404
429
500
POST /v2/apps/{app_id}/rollback/commit
POST /v2/apps/{app_id}/rollback/revert

Revert an app rollback. This action reverts the active rollback by creating a new deployment from the latest app spec prior to the rollback and unpins the app to resume new deployments.

operationId: Apps_revertRollback

Parameters

Name In Required Type Description
optional

Responses

default
200
401
404
429
500
POST /v2/apps/{app_id}/rollback/revert
POST /v2/apps/{app_id}/rollback/validate

Check whether an app can be rolled back to a specific deployment. This endpoint can also be used to check if there are any warnings or validation conditions that will cause the rollback to proceed under unideal circumstances. For example, if a component must be rebuilt as part of the rollback causing it to take longer than usual.

operationId: Apps_validateRollback

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/apps_rollback_app_request"
      }
    }
  },
  "required": true
}

Responses

default
200
401
404
429
500
POST /v2/apps/{app_id}/rollback/validate

Block storage 2 endpoints

POST /v2/volumes

To create a new volume, send a POST request to `/v2/volumes`. Optionally, a `filesystem_type` attribute may be provided in order to automatically format the volume's filesystem. Pre-formatted volumes are automatically mounted when attached to Ubuntu, Debian, Fedora, Fedora Atomic, and CentOS Droplets created on or after April 26, 2018. Attaching pre-formatted volumes to Droplets without support for auto-mounting is not recommended.

operationId: volumes_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/VolumesCreateRequest"
      },
      "examples": {
        "xfs volume": {
          "value": {
            "name": "xfs_example",
            "region": "nyc1",
            "description": "Block store for examples",
            "size_gigabytes": 10,
            "filesystem_type": "xfs",
            "filesystem_label": "xfs_volume01"
          }
        },
        "ext4 volume": {
          "value": {
            "name": "ext4-example",
            "region": "nyc1",
            "description": "Block store for examples",
            "size_gigabytes": 10,
            "filesystem_type": "ext4",
            "filesystem_label": "ext4_volume_01"
          }
        },
        "Volume from a snapshot": {
          "value": {
            "name": "snapshot_example",
            "region": "nyc1",
            "description": "A new volume based on a snapshot",
            "snapshot_id": "b0798135-fb76-11eb-946a-0a58ac146f33",
            "size_gigabytes": 10,
            "filesystem_type": "ext4",
            "filesystem_label": "ext4_volume_01"
          }
        }
      }
    }
  },
  "required": true
}

Responses

default
201
400
401
404
429
500
POST /v2/volumes
POST /v2/volumes/{volume_id}/snapshots

To create a snapshot from a volume, sent a POST request to `/v2/volumes/$VOLUME_ID/snapshots`.

operationId: volumeSnapshots_create

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/VolumeSnapshotsCreateRequest"
      },
      "example": {
        "name": "big-data-snapshot1475261774"
      }
    }
  },
  "required": true
}

Responses

default
201
400
401
404
429
500
POST /v2/volumes/{volume_id}/snapshots

Block storage actions 2 endpoints

POST /v2/volumes/actions

To initiate an action on a block storage volume by Name, send a POST request to `~/v2/volumes/actions`. The body should contain the appropriate attributes for the respective action. ## Attach a Block Storage Volume to a Droplet | Attribute | Details | | ----------- | ------------------------------------------------------------------- | | type | This must be `attach` | | volume_name | The name of the block storage volume | | droplet_id | Set to the Droplet's ID | | region | Set to the slug representing the region where the volume is located | Each volume may only be attached to a single Droplet. However, up to five volumes may be attached to a Droplet at a time. Pre-formatted volumes will be automatically mounted to Ubuntu, Debian, Fedora, Fedora Atomic, and CentOS Droplets created on or after April 26, 2018 when attached. On older Droplets, [additional configuration](https://www.digitalocean.com/community/tutorials/how-to-partition-and-format-digitalocean-block-storage-volumes-in-linux#mounting-the-filesystems) is required. ## Remove a Block Storage Volume from a Droplet | Attribute | Details | | ----------- | ------------------------------------------------------------------- | | type | This must be `detach` | | volume_name | The name of the block storage volume | | droplet_id | Set to the Droplet's ID | | region | Set to the slug representing the region where the volume is located |

operationId: volumeActions_post

Parameters

Name In Required Type Description
optional
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/VolumeActionsPostRequest"
      },
      "examples": {
        "VolumeActionAttach": {
          "value": {
            "tags": [
              "aninterestingtag"
            ],
            "type": "attach",
            "region": "nyc1",
            "droplet_id": 11612190,
            "volume_name": "example"
          }
        },
        "VolumeActionDetach": {
          "value": {
            "type": "detach",
            "region": "nyc1",
            "droplet_id": 11612190,
            "volume_name": "example"
          }
        }
      }
    }
  },
  "required": true
}

Responses

default
202
401
404
429
500
POST /v2/volumes/actions
POST /v2/volumes/{volume_id}/actions

To initiate an action on a block storage volume by Id, send a POST request to `~/v2/volumes/$VOLUME_ID/actions`. The body should contain the appropriate attributes for the respective action. ## Attach a Block Storage Volume to a Droplet | Attribute | Details | | ---------- | ------------------------------------------------------------------- | | type | This must be `attach` | | droplet_id | Set to the Droplet's ID | | region | Set to the slug representing the region where the volume is located | Each volume may only be attached to a single Droplet. However, up to seven volumes may be attached to a Droplet at a time. Pre-formatted volumes will be automatically mounted to Ubuntu, Debian, Fedora, Fedora Atomic, and CentOS Droplets created on or after April 26, 2018 when attached. On older Droplets, [additional configuration](https://www.digitalocean.com/community/tutorials/how-to-partition-and-format-digitalocean-block-storage-volumes-in-linux#mounting-the-filesystems) is required. ## Remove a Block Storage Volume from a Droplet | Attribute | Details | | ---------- | ------------------------------------------------------------------- | | type | This must be `detach` | | droplet_id | Set to the Droplet's ID | | region | Set to the slug representing the region where the volume is located | ## Resize a Volume | Attribute | Details | | -------------- | ------------------------------------------------------------------- | | type | This must be `resize` | | size_gigabytes | The new size of the block storage volume in GiB (1024^3) | | region | Set to the slug representing the region where the volume is located | Volumes may only be resized upwards. The maximum size for a volume is 16TiB.

operationId: BlockStorageActions_initiateAttachAction

Parameters

Name In Required Type Description
optional
optional
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/BlockStorageActionsInitiateAttachActionRequest"
      },
      "examples": {
        "VolumeActionAttach": {
          "value": {
            "tags": [
              "aninterestingtag"
            ],
            "type": "attach",
            "region": "nyc1",
            "droplet_id": 11612190
          }
        },
        "VolumeActionDetach": {
          "value": {
            "type": "detach",
            "region": "nyc1",
            "droplet_id": 11612190
          }
        },
        "VolumeActionResize": {
          "value": {
            "type": "resize",
            "region": "nyc1",
            "size_gigabytes": 100
          }
        }
      }
    }
  },
  "required": true
}

Responses

default
202
401
404
429
500
POST /v2/volumes/{volume_id}/actions

Cdn endpoints 1 endpoints

POST /v2/cdn/endpoints

To create a new CDN endpoint, send a POST request to `/v2/cdn/endpoints`. The origin attribute must be set to the fully qualified domain name (FQDN) of a DigitalOcean Space. Optionally, the TTL may be configured by setting the `ttl` attribute. A custom subdomain may be configured by specifying the `custom_domain` and `certificate_id` attributes.

operationId: CdnEndpoints_createNewEndpoint

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/cdn_endpoint"
      },
      "examples": {
        "CDN Endpoint": {
          "value": {
            "ttl": 3600,
            "origin": "static-images.nyc3.digitaloceanspaces.com"
          }
        },
        "CDN Endpoint With Custom Domain": {
          "value": {
            "ttl": 3600,
            "origin": "static-images.nyc3.digitaloceanspaces.com",
            "custom_domain": "static.example.com",
            "certificate_id": "892071a0-bb95-49bc-8021-3afd67a210bf"
          }
        }
      }
    }
  },
  "required": true
}

Responses

default
201
401
429
500
POST /v2/cdn/endpoints

Certificates 1 endpoints

POST /v2/certificates

To upload new SSL certificate which you have previously generated, send a POST request to `/v2/certificates`. When uploading a user-generated certificate, the `private_key`, `leaf_certificate`, and optionally the `certificate_chain` attributes should be provided. The type must be set to `custom`. When using Let's Encrypt to create a certificate, the `dns_names` attribute must be provided, and the type must be set to `lets_encrypt`.

operationId: certificates_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/CertificatesCreateRequest"
      }
    }
  },
  "required": true
}

Responses

default
201
401
429
500
POST /v2/certificates

Container registry 4 endpoints

POST /v2/registry

To create your container registry, send a POST request to `/v2/registry`. The `name` becomes part of the URL for images stored in the registry. For example, if your registry is called `example`, an image in it will have the URL `registry.digitalocean.com/example/image:tag`.

operationId: registry_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/registry_create"
      }
    }
  },
  "required": true
}

Responses

default
201
401
429
500
POST /v2/registry
POST /v2/registry/subscription

After creating your registry, you can switch to a different subscription tier to better suit your needs. To do this, send a POST request to `/v2/registry/subscription`.

operationId: ContainerRegistry_updateSubscriptionTier

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/ContainerRegistryUpdateSubscriptionTierRequest"
      }
    }
  }
}

Responses

default
200
401
429
500
POST /v2/registry/subscription
POST /v2/registry/validate-name

To validate that a container registry name is available for use, send a POST request to `/v2/registry/validate-name`. If the name is both formatted correctly and available, the response code will be 204 and contain no body. If the name is already in use, the response will be a 409 Conflict.

operationId: ContainerRegistry_validateName

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/validate_registry"
      }
    }
  },
  "required": true
}

Responses

default
204
401
409
429
500
POST /v2/registry/validate-name
POST /v2/registry/{registry_name}/garbage-collection

Garbage collection enables users to clear out unreferenced blobs (layer & manifest data) after deleting one or more manifests from a repository. If there are no unreferenced blobs resulting from the deletion of one or more manifests, garbage collection is effectively a noop. [See here for more information](https://www.digitalocean.com/docs/container-registry/how-to/clean-up-container-registry/) about how and why you should clean up your container registry periodically. To request a garbage collection run on your registry, send a POST request to `/v2/registry/$REGISTRY_NAME/garbage-collection`. This will initiate the following sequence of events on your registry. * Set the registry to read-only mode, meaning no further write-scoped JWTs will be issued to registry clients. Existing write-scoped JWTs will continue to work until they expire which can take up to 15 minutes. * Wait until all existing write-scoped JWTs have expired. * Scan all registry manifests to determine which blobs are unreferenced. * Delete all unreferenced blobs from the registry. * Record the number of blobs deleted and bytes freed, mark the garbage collection status as `success`. * Remove the read-only mode restriction from the registry, meaning write-scoped JWTs will once again be issued to registry clients.

operationId: ContainerRegistry_startGarbageCollection

Parameters

Name In Required Type Description
optional

Responses

default
201
401
404
429
500
POST /v2/registry/{registry_name}/garbage-collection

Databases 7 endpoints

POST /v2/databases

To create a database cluster, send a POST request to `/v2/databases`. The response will be a JSON object with a key called `database`. The value of this will be an object that contains the standard attributes associated with a database cluster. The initial value of the database cluster's `status` attribute will be `creating`. When the cluster is ready to receive traffic, this will transition to `online`. The embedded `connection` and `private_connection` objects will contain the information needed to access the database cluster. For multi-node clusters, the `standby_connection` and `standby_private_connection` objects will contain the information needed to connect to the cluster's standby node(s). DigitalOcean managed PostgreSQL and MySQL database clusters take automated daily backups. To create a new database cluster based on a backup of an existing cluster, send a POST request to `/v2/databases`. In addition to the standard database cluster attributes, the JSON body must include a key named `backup_restore` with the name of the original database cluster and the timestamp of the backup to be restored. Creating a database from a backup is the same as forking a database in the control panel. Note: Backups are not supported for Redis clusters.

operationId: Databases_createCluster

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/DatabasesCreateClusterRequest"
      },
      "examples": {
        "Create a New Database Cluster": {
          "value": {
            "name": "backend",
            "size": "db-s-2vcpu-4gb",
            "tags": [
              "production"
            ],
            "engine": "pg",
            "region": "nyc3",
            "version": "14",
            "num_nodes": 2,
            "storage_size_mib": 61440
          }
        },
        "Restore from a Database Cluster Backup": {
          "value": {
            "name": "backend-restored",
            "size": "db-s-2vcpu-4gb",
            "engine": "pg",
            "region": "nyc3",
            "version": "14",
            "num_nodes": 2,
            "backup_restore": {
              "database_name": "backend",
              "backup_created_at": "2019-01-31T19:25:22Z"
            }
          }
        },
        "Create a New Database Cluster with trusted sources": {
          "value": {
            "name": "backend",
            "size": "db-s-2vcpu-4gb",
            "tags": [
              "production"
            ],
            "rules": [
              {
                "type": "ip_addr",
                "value": "192.168.1.1"
              },
              {
                "type": "k8s",
                "value": "ff2a6c52-5a44-4b63-b99c-0e98e7a63d61"
              },
              {
                "type": "droplet",
                "value": "163973392"
              },
              {
                "type": "tag",
                "value": "test"
              }
            ],
            "engine": "pg",
            "region": "nyc3",
            "version": "14",
            "num_nodes": 2,
            "storage_size_mib": 61440
          }
        }
      }
    }
  },
  "required": true
}

Responses

default
201
401
404
429
500
POST /v2/databases
POST /v2/databases/{database_cluster_uuid}/dbs

To add a new database to an existing cluster, send a POST request to `/v2/databases/$DATABASE_ID/dbs`. Note: Database management is not supported for Redis clusters. The response will be a JSON object with a key called `db`. The value of this will be an object that contains the standard attributes associated with a database.

operationId: databases_add

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/database"
      },
      "example": {
        "name": "alpha"
      }
    }
  },
  "required": true
}

Responses

default
201
401
404
429
500
POST /v2/databases/{database_cluster_uuid}/dbs
POST /v2/databases/{database_cluster_uuid}/pools

For PostgreSQL database clusters, connection pools can be used to allow a database to share its idle connections. The popular PostgreSQL connection pooling utility PgBouncer is used to provide this service. [See here for more information](https://www.digitalocean.com/docs/databases/postgresql/how-to/manage-connection-pools/) about how and why to use PgBouncer connection pooling including details about the available transaction modes. To add a new connection pool to a PostgreSQL database cluster, send a POST request to `/v2/databases/$DATABASE_ID/pools` specifying a name for the pool, the user to connect with, the database to connect to, as well as its desired size and transaction mode.

operationId: Databases_addNewConnectionPool

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/connection_pool"
      },
      "example": {
        "db": "defaultdb",
        "mode": "transaction",
        "name": "backend-pool",
        "size": 10,
        "user": "doadmin"
      }
    }
  },
  "required": true
}

Responses

default
201
401
404
429
500
POST /v2/databases/{database_cluster_uuid}/pools
POST /v2/databases/{database_cluster_uuid}/replicas

To create a read-only replica for a PostgreSQL or MySQL database cluster, send a POST request to `/v2/databases/$DATABASE_ID/replicas` specifying the name it should be given, the size of the node to be used, and the region where it will be located. **Note**: Read-only replicas are not supported for Redis clusters. The response will be a JSON object with a key called `replica`. The value of this will be an object that contains the standard attributes associated with a database replica. The initial value of the read-only replica's `status` attribute will be `forking`. When the replica is ready to receive traffic, this will transition to `active`.

operationId: Databases_createReadOnlyReplica

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/database_replica"
      },
      "example": {
        "name": "read-nyc3-01",
        "size": "db-s-2vcpu-4gb",
        "region": "nyc3",
        "storage_size_mib": 61440
      }
    }
  }
}

Responses

default
201
401
404
429
500
POST /v2/databases/{database_cluster_uuid}/replicas
POST /v2/databases/{database_cluster_uuid}/topics

To create a topic attached to a Kafka cluster, send a POST request to `/v2/databases/$DATABASE_ID/topics`. The result will be a JSON object with a `topic` key.

operationId: Databases_createTopicKafkaCluster

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/kafka_topic_create"
      },
      "example": {
        "name": "customer-events",
        "config": {
          "retention_ms": 100000,
          "retention_bytes": -1
        },
        "partitions": 3,
        "replication": 2
      }
    }
  }
}

Responses

default
201
401
404
429
500
POST /v2/databases/{database_cluster_uuid}/topics
POST /v2/databases/{database_cluster_uuid}/users

To add a new database user, send a POST request to `/v2/databases/$DATABASE_ID/users` with the desired username. Note: User management is not supported for Redis clusters. When adding a user to a MySQL cluster, additional options can be configured in the `mysql_settings` object. When adding a user to a Kafka cluster, additional options can be configured in the `settings` object. The response will be a JSON object with a key called `user`. The value of this will be an object that contains the standard attributes associated with a database user including its randomly generated password.

operationId: Databases_addUser

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/DatabasesAddUserRequest"
      },
      "examples": {
        "Add New User": {
          "value": {
            "name": "app-01"
          }
        },
        "Add New User with Kafka ACLs": {
          "value": {
            "name": "app-03",
            "settings": {
              "acl": [
                {
                  "topic": "customer-events",
                  "permission": "produceconsume"
                },
                {
                  "topic": "customer-events.*",
                  "permission": "produce"
                },
                {
                  "topic": "customer-events",
                  "permission": "consume"
                }
              ]
            }
          }
        },
        "Add New User with MySQL Auth Plugin": {
          "value": {
            "name": "app-02",
            "mysql_settings": {
              "auth_plugin": "mysql_native_password"
            }
          }
        },
        "Add New Read Only User (MongoDB Only)": {
          "value": {
            "name": "my-readonly",
            "readonly": true
          }
        },
        "Add New User for Postgres with replication rights": {
          "value": {
            "name": "app-02",
            "settings": {
              "pg_allow_replication": true
            }
          }
        }
      }
    }
  },
  "required": true
}

Responses

default
201
401
404
429
500
POST /v2/databases/{database_cluster_uuid}/users
POST /v2/databases/{database_cluster_uuid}/users/{username}/reset_auth

To reset the password for a database user, send a POST request to `/v2/databases/$DATABASE_ID/users/$USERNAME/reset_auth`. For `mysql` databases, the authentication method can be specifying by including a key in the JSON body called `mysql_settings` with the `auth_plugin` value specified. The response will be a JSON object with a `user` key. This will be set to an object containing the standard database user attributes.

operationId: Databases_resetUserAuth

Parameters

Name In Required Type Description
optional
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/DatabasesResetUserAuthRequest"
      },
      "example": {
        "mysql_settings": {
          "auth_plugin": "caching_sha2_password"
        }
      }
    }
  },
  "required": true
}

Responses

default
200
401
404
429
500
POST /v2/databases/{database_cluster_uuid}/users/{username}/reset_auth

Domain records 1 endpoints

POST /v2/domains/{domain_name}/records

To create a new record to a domain, send a POST request to `/v2/domains/$DOMAIN_NAME/records`. The request must include all of the required fields for the domain record type being added. See the [attribute table](https://api-engineering.nyc3.cdn.digitaloceanspaces.com) for details regarding record types and their respective required attributes.

operationId: DomainRecords_createNewRecord

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/DomainRecordsCreateNewRecordRequest"
      },
      "example": {
        "tag": null,
        "ttl": 1800,
        "data": "162.10.66.0",
        "name": "www",
        "port": null,
        "type": "A",
        "flags": null,
        "weight": null,
        "priority": null
      }
    }
  }
}

Responses

default
201
401
404
429
500
POST /v2/domains/{domain_name}/records

Domains 1 endpoints

POST /v2/domains

To create a new domain, send a POST request to `/v2/domains`. Set the "name" attribute to the domain name you are adding. Optionally, you may set the "ip_address" attribute, and an A record will be automatically created pointing to the apex domain.

operationId: domains_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/domain"
      },
      "example": {
        "name": "example.com"
      }
    }
  }
}

Responses

default
201
401
429
500
POST /v2/domains

Droplet actions 2 endpoints

POST /v2/droplets/actions

Some actions can be performed in bulk on tagged Droplets. The actions can be initiated by sending a POST to `/v2/droplets/actions?tag_name=$TAG_NAME` with the action arguments. Only a sub-set of action types are supported: - `power_cycle` - `power_on` - `power_off` - `shutdown` - `enable_ipv6` - `enable_backups` - `disable_backups` - `snapshot`

operationId: DropletActions_actOnTaggedDroplets

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/DropletActionsActOnTaggedDropletsRequest"
      }
    }
  },
  "description": "The `type` attribute set in the request body will specify the  action that\nwill be taken on the Droplet. Some actions will require additional\nattributes to be set as well.\n"
}

Responses

default
201
401
429
500
POST /v2/droplets/actions
POST /v2/droplets/{droplet_id}/actions

To initiate an action on a Droplet send a POST request to `/v2/droplets/$DROPLET_ID/actions`. In the JSON body to the request, set the `type` attribute to on of the supported action types: | Action | Details | | ---------------------------------------- | ----------- | | <nobr>`enable_backups`</nobr> | Enables backups for a Droplet | | <nobr>`disable_backups`</nobr> | Disables backups for a Droplet | | <nobr>`reboot`</nobr> | Reboots a Droplet. A `reboot` action is an attempt to reboot the Droplet in a graceful way, similar to using the `reboot` command from the console. | | <nobr>`power_cycle`</nobr> | Power cycles a Droplet. A `powercycle` action is similar to pushing the reset button on a physical machine, it's similar to booting from scratch. | | <nobr>`shutdown`</nobr> | Shutsdown a Droplet. A shutdown action is an attempt to shutdown the Droplet in a graceful way, similar to using the `shutdown` command from the console. Since a `shutdown` command can fail, this action guarantees that the command is issued, not that it succeeds. The preferred way to turn off a Droplet is to attempt a shutdown, with a reasonable timeout, followed by a `power_off` action to ensure the Droplet is off. | | <nobr>`power_off`</nobr> | Powers off a Droplet. A `power_off` event is a hard shutdown and should only be used if the `shutdown` action is not successful. It is similar to cutting the power on a server and could lead to complications. | | <nobr>`power_on`</nobr> | Powers on a Droplet. | | <nobr>`restore`</nobr> | Restore a Droplet using a backup image. The image ID that is passed in must be a backup of the current Droplet instance. The operation will leave any embedded SSH keys intact. | | <nobr>`password_reset`</nobr> | Resets the root password for a Droplet. A new password will be provided via email. It must be changed after first use. | | <nobr>`resize`</nobr> | Resizes a Droplet. Set the `size` attribute to a size slug. If a permanent resize with disk changes included is desired, set the `disk` attribute to `true`. | | <nobr>`rebuild`</nobr> | Rebuilds a Droplet from a new base image. Set the `image` attribute to an image ID or slug. | | <nobr>`rename`</nobr> | Renames a Droplet. | | <nobr>`change_kernel`</nobr> | Changes a Droplet's kernel. Only applies to Droplets with externally managed kernels. All Droplets created after March 2017 use internal kernels by default. | | <nobr>`enable_ipv6`</nobr> | Enables IPv6 for a Droplet. Once enabled for a Droplet, IPv6 can not be disabled. When enabling IPv6 on an existing Droplet, [additional OS-level configuration](https://docs.digitalocean.com/products/networking/ipv6/how-to/enable/#on-existing-droplets) is required. | | <nobr>`snapshot`</nobr> | Takes a snapshot of a Droplet. |

operationId: dropletActions_post

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/DropletActionsPostRequest"
      }
    }
  },
  "description": "The `type` attribute set in the request body will specify the  action that\nwill be taken on the Droplet. Some actions will require additional\nattributes to be set as well.\n"
}

Responses

default
201
401
404
429
500
POST /v2/droplets/{droplet_id}/actions

Droplets 2 endpoints

POST /v2/droplets

To create a new Droplet, send a POST request to `/v2/droplets` setting the required attributes. A Droplet will be created using the provided information. The response body will contain a JSON object with a key called `droplet`. The value will be an object containing the standard attributes for your new Droplet. The response code, 202 Accepted, does not indicate the success or failure of the operation, just that the request has been accepted for processing. The `actions` returned as part of the response's `links` object can be used to check the status of the Droplet create event. ### Create Multiple Droplets Creating multiple Droplets is very similar to creating a single Droplet. Instead of sending `name` as a string, send `names` as an array of strings. A Droplet will be created for each name you send using the associated information. Up to ten Droplets may be created this way at a time. Rather than returning a single Droplet, the response body will contain a JSON array with a key called `droplets`. This will be set to an array of JSON objects, each of which will contain the standard Droplet attributes. The response code, 202 Accepted, does not indicate the success or failure of any operation, just that the request has been accepted for processing. The array of `actions` returned as part of the response's `links` object can be used to check the status of each individual Droplet create event.

operationId: droplets_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/DropletsCreateRequest"
      },
      "examples": {
        "Single Droplet Create Request": {
          "$ref": "#/components/examples/droplet_create_request"
        },
        "Multiple Droplet Create Request": {
          "$ref": "#/components/examples/droplet_multi_create_request"
        }
      }
    }
  }
}

Responses

default
202
401
429
500
POST /v2/droplets
POST /v2/droplets/{droplet_id}/destroy_with_associated_resources/retry

If the status of a request to destroy a Droplet with its associated resources reported any errors, it can be retried by sending a POST request to the `/v2/droplets/$DROPLET_ID/destroy_with_associated_resources/retry` endpoint. Only one destroy can be active at a time per Droplet. If a retry is issued while another destroy is in progress for the Droplet a 409 status code will be returned. A successful response will include a 202 response code and no content.

operationId: Droplets_retryDestroyWithAssociatedResources

Parameters

Name In Required Type Description
optional

Responses

default
202
401
404
409
429
500
POST /v2/droplets/{droplet_id}/destroy_with_associated_resources/retry

Firewalls 4 endpoints

POST /v2/firewalls

To create a new firewall, send a POST request to `/v2/firewalls`. The request must contain at least one inbound or outbound access rule.

operationId: firewalls_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/FirewallsCreateRequest"
      },
      "example": {
        "name": "firewall",
        "droplet_ids": [
          8043964
        ],
        "inbound_rules": [
          {
            "ports": "80",
            "sources": {
              "load_balancer_uids": [
                "4de7ac8b-495b-4884-9a69-1050c6793cd6"
              ]
            },
            "protocol": "tcp"
          },
          {
            "ports": "22",
            "sources": {
              "tags": [
                "gateway"
              ],
              "addresses": [
                "18.0.0.0/8"
              ]
            },
            "protocol": "tcp"
          }
        ],
        "outbound_rules": [
          {
            "ports": "80",
            "protocol": "tcp",
            "destinations": {
              "addresses": [
                "0.0.0.0/0",
                "::/0"
              ]
            }
          }
        ]
      }
    }
  }
}

Responses

default
202
400
401
429
500
POST /v2/firewalls
POST /v2/firewalls/{firewall_id}/droplets

To assign a Droplet to a firewall, send a POST request to `/v2/firewalls/$FIREWALL_ID/droplets`. In the body of the request, there should be a `droplet_ids` attribute containing a list of Droplet IDs. No response body will be sent back, but the response code will indicate success. Specifically, the response code will be a 204, which means that the action was successful with no returned body data.

operationId: Firewalls_addDroplets

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/FirewallsAddDropletsRequest"
      },
      "example": {
        "droplet_ids": [
          49696269
        ]
      }
    }
  }
}

Responses

default
204
400
401
404
429
500
POST /v2/firewalls/{firewall_id}/droplets
POST /v2/firewalls/{firewall_id}/rules

To add additional access rules to a firewall, send a POST request to `/v2/firewalls/$FIREWALL_ID/rules`. The body of the request may include an inbound_rules and/or outbound_rules attribute containing an array of rules to be added. No response body will be sent back, but the response code will indicate success. Specifically, the response code will be a 204, which means that the action was successful with no returned body data.

operationId: Firewalls_addRules

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/FirewallsAddRulesRequest"
      },
      "example": {
        "inbound_rules": [
          {
            "ports": "3306",
            "sources": {
              "droplet_ids": [
                49696269
              ]
            },
            "protocol": "tcp"
          }
        ],
        "outbound_rules": [
          {
            "ports": "3306",
            "protocol": "tcp",
            "destinations": {
              "droplet_ids": [
                49696269
              ]
            }
          }
        ]
      }
    }
  }
}

Responses

default
204
400
401
404
429
500
POST /v2/firewalls/{firewall_id}/rules
POST /v2/firewalls/{firewall_id}/tags

To assign a tag representing a group of Droplets to a firewall, send a POST request to `/v2/firewalls/$FIREWALL_ID/tags`. In the body of the request, there should be a `tags` attribute containing a list of tag names. No response body will be sent back, but the response code will indicate success. Specifically, the response code will be a 204, which means that the action was successful with no returned body data.

operationId: Firewalls_addTags

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/FirewallsAddTagsRequest"
      },
      "example": {
        "tags": [
          "frontend"
        ]
      }
    }
  }
}

Responses

default
204
400
401
404
429
500
POST /v2/firewalls/{firewall_id}/tags

Floating ip actions 1 endpoints

POST /v2/floating_ips/{floating_ip}/actions

To initiate an action on a floating IP send a POST request to `/v2/floating_ips/$FLOATING_IP/actions`. In the JSON body to the request, set the `type` attribute to on of the supported action types: | Action | Details |------------|-------- | `assign` | Assigns a floating IP to a Droplet | `unassign` | Unassign a floating IP from a Droplet

operationId: floatingIPsAction_post

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/FloatingIPsActionPostRequest"
      }
    }
  },
  "description": "The `type` attribute set in the request body will specify the action that\nwill be taken on the floating IP.\n"
}

Responses

default
201
401
404
429
500
POST /v2/floating_ips/{floating_ip}/actions

Floating ips 1 endpoints

POST /v2/floating_ips

On creation, a floating IP must be either assigned to a Droplet or reserved to a region. * To create a new floating IP assigned to a Droplet, send a POST request to `/v2/floating_ips` with the `droplet_id` attribute. * To create a new floating IP reserved to a region, send a POST request to `/v2/floating_ips` with the `region` attribute. **Note**: In addition to the standard rate limiting, only 12 floating IPs may be created per 60 seconds.

operationId: floatingIPs_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/floating_ip_create"
      }
    }
  },
  "required": true
}

Responses

default
202
401
429
500
POST /v2/floating_ips

Functions 2 endpoints

POST /v2/functions/namespaces

Creates a new serverless functions namespace in the desired region and associates it with the provided label. A namespace is a collection of functions and their associated packages, triggers, and project specifications. To create a namespace, send a POST request to `/v2/functions/namespaces` with the `region` and `label` properties.

operationId: Functions_createNamespace

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/create_namespace"
      }
    }
  },
  "required": true
}

Responses

default
200
401
404
422
429
500
POST /v2/functions/namespaces
POST /v2/functions/namespaces/{namespace_id}/triggers

Creates a new trigger for a given function in a namespace. To create a trigger, send a POST request to `/v2/functions/namespaces/$NAMESPACE_ID/triggers` with the `name`, `function`, `type`, `is_enabled` and `scheduled_details` properties.

operationId: Functions_createTriggerInNamespace

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/create_trigger"
      }
    }
  },
  "required": true
}

Responses

default
200
400
401
404
422
429
500
POST /v2/functions/namespaces/{namespace_id}/triggers

Image actions 1 endpoints

POST /v2/images/{image_id}/actions

The following actions are available on an Image. ## Convert an Image to a Snapshot To convert an image, for example, a backup to a snapshot, send a POST request to `/v2/images/$IMAGE_ID/actions`. Set the `type` attribute to `convert`. ## Transfer an Image To transfer an image to another region, send a POST request to `/v2/images/$IMAGE_ID/actions`. Set the `type` attribute to `transfer` and set `region` attribute to the slug identifier of the region you wish to transfer to.

operationId: imageActions_post

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/ImageActionsPostRequest"
      }
    }
  }
}

Responses

default
201
401
404
429
500
POST /v2/images/{image_id}/actions

Images 1 endpoints

POST /v2/images

To create a new custom image, send a POST request to /v2/images. The body must contain a url attribute pointing to a Linux virtual machine image to be imported into DigitalOcean. The image must be in the raw, qcow2, vhdx, vdi, or vmdk format. It may be compressed using gzip or bzip2 and must be smaller than 100 GB after being decompressed.

operationId: Images_importCustomImageFromUrl

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/image_new_custom"
      }
    }
  },
  "required": true
}

Responses

default
202
401
429
500
POST /v2/images

Kubernetes 5 endpoints

POST /v2/kubernetes/clusters

To create a new Kubernetes cluster, send a POST request to `/v2/kubernetes/clusters`. The request must contain at least one node pool with at least one worker. The request may contain a maintenance window policy describing a time period when disruptive maintenance tasks may be carried out. Omitting the policy implies that a window will be chosen automatically. See [here](https://www.digitalocean.com/docs/kubernetes/how-to/upgrade-cluster/) for details.

operationId: Kubernetes_createNewCluster

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/cluster"
      },
      "examples": {
        "Kubernetes Cluster Request": {
          "$ref": "#/components/examples/kubernetes_clusters_basic_request"
        },
        "Kubernetes Cluster with Multiple Node Pools Request": {
          "$ref": "#/components/examples/kubernetes_clusters_multi_pool_request"
        }
      }
    }
  },
  "required": true
}

Responses

default
201
401
429
500
POST /v2/kubernetes/clusters
POST /v2/kubernetes/clusters/{cluster_id}/clusterlint

Clusterlint helps operators conform to Kubernetes best practices around resources, security and reliability to avoid common problems while operating or upgrading the clusters. To request a clusterlint run on your cluster, send a POST request to `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/clusterlint`. This will run all checks present in the `doks` group by default, if a request body is not specified. Optionally specify the below attributes. For information about the available checks, please refer to [the clusterlint check documentation](https://github.com/digitalocean/clusterlint/blob/master/checks.md).

operationId: Kubernetes_runClusterlintChecks

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/clusterlint_request"
      }
    }
  }
}

Responses

default
202
401
404
429
500
POST /v2/kubernetes/clusters/{cluster_id}/clusterlint
POST /v2/kubernetes/clusters/{cluster_id}/node_pools

To add an additional node pool to a Kubernetes clusters, send a POST request to `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/node_pools` with the following attributes.

operationId: Kubernetes_addNodePool

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/kubernetes_node_pool"
      },
      "example": {
        "name": "new-pool",
        "size": "s-1vcpu-2gb",
        "tags": [
          "frontend"
        ],
        "count": 3,
        "max_nodes": 6,
        "min_nodes": 3,
        "auto_scale": true
      }
    }
  },
  "required": true
}

Responses

default
201
401
404
429
500
POST /v2/kubernetes/clusters/{cluster_id}/node_pools
POST /v2/kubernetes/clusters/{cluster_id}/upgrade

To immediately upgrade a Kubernetes cluster to a newer patch release of Kubernetes, send a POST request to `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/upgrade`. The body of the request must specify a version attribute. Available upgrade versions for a cluster can be fetched from `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/upgrades`.

operationId: Kubernetes_upgradeCluster

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/KubernetesUpgradeClusterRequest"
      }
    }
  },
  "required": true
}

Responses

default
202
401
404
429
500
POST /v2/kubernetes/clusters/{cluster_id}/upgrade
POST /v2/kubernetes/registry

To integrate the container registry with Kubernetes clusters, send a POST request to `/v2/kubernetes/registry`.

operationId: Kubernetes_addContainerRegistryToClusters

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/cluster_registries"
      }
    }
  }
}

Responses

default
204
401
429
500
POST /v2/kubernetes/registry

Load balancers 3 endpoints

POST /v2/load_balancers

To create a new load balancer instance, send a POST request to `/v2/load_balancers`. You can specify the Droplets that will sit behind the load balancer using one of two methods: * Set `droplet_ids` to a list of specific Droplet IDs. * Set `tag` to the name of a tag. All Droplets with this tag applied will be assigned to the load balancer. Additional Droplets will be automatically assigned as they are tagged. These methods are mutually exclusive.

operationId: loadBalancers_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/load_balancer_create"
      },
      "examples": {
        "Basic Create Request": {
          "$ref": "#/components/examples/load_balancer_basic_create_request"
        },
        "SSL Termination Create Request": {
          "$ref": "#/components/examples/load_balancer_ssl_termination_create_request"
        },
        "Create Request Using Droplet Tag": {
          "$ref": "#/components/examples/load_balancer_using_tag_create_request"
        },
        "Sticky Sessions and Custom Health Check": {
          "$ref": "#/components/examples/load_balancer_sticky_sessions_and_health_check_create_request"
        }
      }
    }
  },
  "required": true
}

Responses

default
202
401
429
500
POST /v2/load_balancers
POST /v2/load_balancers/{lb_id}/droplets

To assign a Droplet to a load balancer instance, send a POST request to `/v2/load_balancers/$LOAD_BALANCER_ID/droplets`. In the body of the request, there should be a `droplet_ids` attribute containing a list of Droplet IDs. Individual Droplets can not be added to a load balancer configured with a Droplet tag. Attempting to do so will result in a "422 Unprocessable Entity" response from the API. No response body will be sent back, but the response code will indicate success. Specifically, the response code will be a 204, which means that the action was successful with no returned body data.

operationId: LoadBalancers_assignDroplets

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/LoadBalancersAssignDropletsRequest"
      }
    }
  },
  "required": true
}

Responses

default
204
401
404
429
500
POST /v2/load_balancers/{lb_id}/droplets
POST /v2/load_balancers/{lb_id}/forwarding_rules

To add an additional forwarding rule to a load balancer instance, send a POST request to `/v2/load_balancers/$LOAD_BALANCER_ID/forwarding_rules`. In the body of the request, there should be a `forwarding_rules` attribute containing an array of rules to be added. No response body will be sent back, but the response code will indicate success. Specifically, the response code will be a 204, which means that the action was successful with no returned body data.

operationId: LoadBalancers_addForwardingRules

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/LoadBalancersAddForwardingRulesRequest"
      }
    }
  },
  "required": true
}

Responses

default
204
401
404
429
500
POST /v2/load_balancers/{lb_id}/forwarding_rules

Monitoring 1 endpoints

POST /v2/monitoring/alerts

To create a new alert, send a POST request to `/v2/monitoring/alerts`.

operationId: Monitoring_createAlertPolicy

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/alert_policy_request"
      }
    }
  },
  "required": true,
  "description": "The `type` field dictates what type of entity that the alert policy applies to and hence what type of entity is passed in the `entities` array. If both the `tags` array and `entities` array are empty the alert policy applies to all entities of the relevant type that are owned by the user account. Otherwise the following table shows the valid entity types for each type of alert policy:\n\nType | Description | Valid Entity Type\n-----|-------------|--------------------\n`v1/insights/droplet/memory_utilization_percent` | alert on the percent of memory utilization | Droplet ID\n`v1/insights/droplet/disk_read` | alert on the rate of disk read I/O in MBps | Droplet ID\n`v1/insights/droplet/load_5` | alert on the 5 minute load average | Droplet ID\n`v1/insights/droplet/load_15` | alert on the 15 minute load average | Droplet ID\n`v1/insights/droplet/disk_utilization_percent` | alert on the percent of disk utilization | Droplet ID\n`v1/insights/droplet/cpu` | alert on the percent of CPU utilization | Droplet ID\n`v1/insights/droplet/disk_write` | alert on the rate of disk write I/O in MBps | Droplet ID\n`v1/insights/droplet/public_outbound_bandwidth` | alert on the rate of public outbound bandwidth in Mbps | Droplet ID\n`v1/insights/droplet/public_inbound_bandwidth` | alert on the rate of public inbound bandwidth in Mbps | Droplet ID\n`v1/insights/droplet/private_outbound_bandwidth` | alert on the rate of private outbound bandwidth in Mbps | Droplet ID\n`v1/insights/droplet/private_inbound_bandwidth` | alert on the rate of private inbound bandwidth in Mbps | Droplet ID\n`v1/insights/droplet/load_1` | alert on the 1 minute load average | Droplet ID\n`v1/insights/lbaas/avg_cpu_utilization_percent`|alert on the percent of CPU utilization|load balancer ID\n`v1/insights/lbaas/connection_utilization_percent`|alert on the percent of connection utilization|load balancer ID\n`v1/insights/lbaas/droplet_health`|alert on Droplet health status changes|load balancer ID\n`v1/insights/lbaas/tls_connections_per_second_utilization_percent`|alert on the percent of TLS connections per second utilization|load balancer ID\n`v1/insights/lbaas/increase_in_http_error_rate_percentage_5xx`|alert on the percent increase of 5xx level http errors over 5m|load balancer ID\n`v1/insights/lbaas/increase_in_http_error_rate_percentage_4xx`|alert on the percent increase of 4xx level http errors over 5m|load balancer ID\n`v1/insights/lbaas/increase_in_http_error_rate_count_5xx`|alert on the count of 5xx level http errors over 5m|load balancer ID\n`v1/insights/lbaas/increase_in_http_error_rate_count_4xx`|alert on the count of 4xx level http errors over 5m|load balancer ID\n`v1/insights/lbaas/high_http_request_response_time`|alert on high average http response time|load balancer ID\n`v1/insights/lbaas/high_http_request_response_time_50p`|alert on high 50th percentile http response time|load balancer ID\n`v1/insights/lbaas/high_http_request_response_time_95p`|alert on high 95th percentile http response time|load balancer ID\n`v1/insights/lbaas/high_http_request_response_time_99p`|alert on high 99th percentile http response time|load balancer ID\n`v1/dbaas/alerts/load_15_alerts` | alert on 15 minute load average across the database cluster | database cluster UUID\n`v1/dbaas/alerts/memory_utilization_alerts` | alert on the percent memory utilization average across the database cluster | database cluster UUID\n`v1/dbaas/alerts/disk_utilization_alerts` | alert on the percent disk utilization average across the database cluster | database cluster UUID\n`v1/dbaas/alerts/cpu_alerts` | alert on the percent CPU usage average across the database cluster | database cluster UUID\n"
}

Responses

default
200
401
429
500
POST /v2/monitoring/alerts

Project resources 2 endpoints

POST /v2/projects/default/resources

To assign resources to your default project, send a POST request to `/v2/projects/default/resources`.

operationId: ProjectResources_assignResourcesToDefault

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/project_assignment"
      },
      "examples": {
        "assign_resources": {
          "value": {
            "resources": [
              "do:droplet:13457723",
              "do:domain:example.com"
            ]
          }
        }
      }
    }
  },
  "required": true
}

Responses

default
200
401
404
429
500
POST /v2/projects/default/resources
POST /v2/projects/{project_id}/resources

To assign resources to a project, send a POST request to `/v2/projects/$PROJECT_ID/resources`.

operationId: ProjectResources_assignToProject

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/project_assignment"
      },
      "examples": {
        "assign_resources": {
          "value": {
            "resources": [
              "do:droplet:13457723",
              "do:domain:example.com"
            ]
          }
        }
      }
    }
  },
  "required": true
}

Responses

default
200
401
404
429
500
POST /v2/projects/{project_id}/resources

Projects 1 endpoints

POST /v2/projects

To create a project, send a POST request to `/v2/projects`.

operationId: projects_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/project_base"
      }
    }
  },
  "required": true
}

Responses

default
201
401
429
500
POST /v2/projects

Reserved ip actions 1 endpoints

POST /v2/reserved_ips/{reserved_ip}/actions

To initiate an action on a reserved IP send a POST request to `/v2/reserved_ips/$RESERVED_IP/actions`. In the JSON body to the request, set the `type` attribute to on of the supported action types: | Action | Details |------------|-------- | `assign` | Assigns a reserved IP to a Droplet | `unassign` | Unassign a reserved IP from a Droplet

operationId: reservedIPsActions_post

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/ReservedIPsActionsPostRequest"
      }
    }
  },
  "description": "The `type` attribute set in the request body will specify the action that\nwill be taken on the reserved IP.\n"
}

Responses

default
201
401
404
429
500
POST /v2/reserved_ips/{reserved_ip}/actions

Reserved ips 1 endpoints

POST /v2/reserved_ips

On creation, a reserved IP must be either assigned to a Droplet or reserved to a region. * To create a new reserved IP assigned to a Droplet, send a POST request to `/v2/reserved_ips` with the `droplet_id` attribute. * To create a new reserved IP reserved to a region, send a POST request to `/v2/reserved_ips` with the `region` attribute. **Note**: In addition to the standard rate limiting, only 12 reserved IPs may be created per 60 seconds.

operationId: reservedIPs_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/reserved_ip_create"
      }
    }
  },
  "required": true
}

Responses

default
202
401
429
500
POST /v2/reserved_ips

Ssh keys 1 endpoints

POST /v2/account/keys

To add a new SSH public key to your DigitalOcean account, send a POST request to `/v2/account/keys`. Set the `name` attribute to the name you wish to use and the `public_key` attribute to the full public key you are adding.

operationId: sshKeys_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/sshKeys"
      }
    }
  },
  "required": true
}

Responses

default
201
401
429
500
POST /v2/account/keys

Tags 2 endpoints

POST /v2/tags

To create a tag you can send a POST request to `/v2/tags` with a `name` attribute.

operationId: tags_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/tags"
      }
    }
  },
  "required": true
}

Responses

default
201
400
401
429
500
POST /v2/tags
POST /v2/tags/{tag_id}/resources

Resources can be tagged by sending a POST request to `/v2/tags/$TAG_NAME/resources` with an array of json objects containing `resource_id` and `resource_type` attributes. Currently only tagging of Droplets, Databases, Images, Volumes, and Volume Snapshots is supported. `resource_type` is expected to be the string `droplet`, `database`, `image`, `volume` or `volume_snapshot`. `resource_id` is expected to be the ID of the resource as a string.

operationId: Tags_tagResource

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/tags_resource"
      }
    }
  },
  "required": true
}

Responses

default
204
401
404
429
500
POST /v2/tags/{tag_id}/resources

Uptime 2 endpoints

POST /v2/uptime/checks

To create an Uptime check, send a POST request to `/v2/uptime/checks` specifying the attributes in the table below in the JSON body.

operationId: Uptime_createCheck

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/check_updatable"
      }
    }
  },
  "required": true
}

Responses

default
201
401
429
500
POST /v2/uptime/checks
POST /v2/uptime/checks/{check_id}/alerts

To create an Uptime alert, send a POST request to `/v2/uptime/checks/$CHECK_ID/alerts` specifying the attributes in the table below in the JSON body.

operationId: Uptime_createNewAlert

Parameters

Name In Required Type Description
optional

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/alert"
      }
    }
  },
  "required": true,
  "description": "The ''type'' field dictates the type of alert, and hence what type of value to pass into the threshold property.\nType | Description | Threshold Value\n-----|-------------|--------------------\n`latency` | alerts on the response latency | milliseconds\n`down` | alerts on a target registering as down in any region | N/A (Not required)\n`down_global` | alerts on a target registering as down globally | N/A (Not required)\n`ssl_expiry` | alerts on a SSL certificate expiring within $threshold days | days\n"
}

Responses

default
201
401
404
429
500
POST /v2/uptime/checks/{check_id}/alerts

Vpcs 1 endpoints

POST /v2/vpcs

To create a VPC, send a POST request to `/v2/vpcs` specifying the attributes in the table below in the JSON body. **Note:** If you do not currently have a VPC network in a specific datacenter region, the first one that you create will be set as the default for that region. The default VPC for a region cannot be changed or deleted.

operationId: vpcs_create

Request Body

{
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/VpcsCreateRequest"
      }
    }
  },
  "required": true
}

Responses

default
201
401
429
500
POST /v2/vpcs

Schemas

object 1ClickApplicationsInstallKubernetesApplicationResponse
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "example": "Successfully kicked off addon job.",
      "description": "A message about the result of the request."
    }
  }
}
object AccountGetResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object ActionsGetResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object ActionsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "actions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/action"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object AppsValidateRollbackResponse
{
  "type": "object",
  "properties": {
    "error": {
      "allOf": [
        {
          "description": "Contains the failing condition that is causing the rollback to be invalid."
        },
        {
          "$ref": "#/components/schemas/app_rollback_validation_condition"
        }
      ]
    },
    "valid": {
      "type": "boolean",
      "description": "Indicates whether the app can be rolled back to the specified deployment."
    },
    "warnings": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_rollback_validation_condition"
      },
      "description": "Contains a list of warnings that may cause the rollback to run under unideal circumstances."
    }
  }
}
object BillingGetInvoiceByUuidResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "invoice_items": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/invoice_item"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 6
    },
    "links": {
      "pages": {
        "last": "https://api.digitalocean.com/v2/customers/my/invoices/22737513-0ea7-4206-8ceb-98a575af7681?page=3&per_page=2",
        "next": "https://api.digitalocean.com/v2/customers/my/invoices/22737513-0ea7-4206-8ceb-98a575af7681?page=2&per_page=2"
      }
    },
    "invoice_items": [
      {
        "amount": "12.34",
        "product": "Kubernetes Clusters",
        "duration": "744",
        "end_time": "2020-02-01T00:00:00Z",
        "start_time": "2020-01-01T00:00:00Z",
        "description": "a56e086a317d8410c8b4cfd1f4dc9f82",
        "duration_unit": "Hours",
        "resource_uuid": "711157cb-37c8-4817-b371-44fa3504a39c",
        "group_description": "my-doks-cluster"
      },
      {
        "amount": "34.45",
        "product": "Spaces Subscription",
        "duration": "744",
        "end_time": "2020-02-01T00:00:00Z",
        "start_time": "2020-01-01T00:00:00Z",
        "description": "Spaces ($5/mo 250GB storage & 1TB bandwidth)",
        "duration_unit": "Hours"
      }
    ]
  }
}
string BillingGetInvoiceCsvByUuidResponse
{
  "type": "string"
}
string BillingGetPdfByUuidResponse
{
  "type": "string",
  "format": "binary"
}
object BillingHistoryListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "billing_history": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/billing_history"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta_optional_total"
    }
  ],
  "example": {
    "meta": {
      "total": 5
    },
    "links": {
      "pages": {
        "last": "https://api.digitalocean.com/v2/customers/my/billing_history?page=3&per_page=2",
        "next": "https://api.digitalocean.com/v2/customers/my/billing_history?page=2&per_page=2"
      }
    },
    "billing_history": [
      {
        "date": "2018-06-01T08:44:38Z",
        "type": "Invoice",
        "amount": "12.34",
        "invoice_id": "123",
        "description": "Invoice for May 2018",
        "invoice_uuid": "example-uuid"
      },
      {
        "date": "2018-06-02T08:44:38Z",
        "type": "Payment",
        "amount": "-12.34",
        "description": "Payment (MC 2018)"
      }
    ]
  }
}
object BlockStorageActionsInitiateAttachActionRequest
{
  "anyOf": [
    {
      "$ref": "#/components/schemas/volume_action_post_attach"
    },
    {
      "$ref": "#/components/schemas/volume_action_post_detach"
    },
    {
      "$ref": "#/components/schemas/volume_action_post_resize"
    }
  ],
  "discriminator": {
    "mapping": {
      "attach": "#/components/schemas/volume_action_post_attach",
      "detach": "#/components/schemas/volume_action_post_detach",
      "resize": "#/components/schemas/volume_action_post_resize"
    },
    "propertyName": "type"
  }
}
object BlockStorageGetSnapshotDetailsResponse
{
  "example": {
    "snapshot": {
      "id": "8fa70202-873f-11e6-8b68-000f533176b1",
      "name": "big-data-snapshot1475261774",
      "tags": [
        "aninterestingtag"
      ],
      "regions": [
        "nyc1"
      ],
      "created_at": "2020-09-30T18:56:14Z",
      "resource_id": "82a48a18-873f-11e6-96bf-000f53315a41",
      "min_disk_size": 10,
      "resource_type": "volume",
      "size_gigabytes": 10
    }
  },
  "properties": {
    "snapshot": {
      "$ref": "#/components/schemas/snapshots"
    }
  }
}
object CdnEndpointsCreateNewEndpointResponse
{
  "type": "object",
  "example": {
    "endpoint": {
      "id": "19f06b6a-3ace-4315-b086-499a0e521b76X",
      "ttl": 3600,
      "origin": "static-images.nyc3.digitaloceanspaces.com",
      "endpoint": "static-images.nyc3.cdn.digitaloceanspaces.com",
      "created_at": "2018-07-19T15:04:16Z"
    }
  },
  "properties": {
    "endpoint": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "example": "19f06b6a-3ace-4315-b086-499a0e521b76"
        },
        "ttl": {
          "type": "number",
          "example": 3600
        },
        "origin": {
          "type": "string",
          "example": "static-images.nyc3.digitaloceanspaces.com"
        },
        "endpoint": {
          "type": "string",
          "example": "static-images.nyc3.cdn.digitaloceanspaces.com"
        },
        "created_at": {
          "type": "string",
          "example": "2018-07-19T15:04:16Z"
        },
        "custom_domain": {
          "type": "string",
          "example": "static.example.com"
        },
        "certificate_id": {
          "type": "string",
          "example": "892071a0-bb95-49bc-8021-3afd67a210bf"
        }
      }
    }
  }
}
object CdnEndpointsListAllResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "endpoints": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/cdn_endpoint"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "links": {},
    "endpoints": [
      {
        "id": "19f06b6a-3ace-4315-b086-499a0e521b76",
        "ttl": 3600,
        "origin": "static-images.nyc3.digitaloceanspaces.com",
        "endpoint": "static-images.nyc3.cdn.digitaloceanspaces.com",
        "created_at": "2018-07-19T15:04:16Z",
        "custom_domain": "static.example.com",
        "certificate_id": "892071a0-bb95-49bc-8021-3afd67a210bf"
      }
    ]
  }
}
object CertificatesCreateRequest
{
  "oneOf": [
    {
      "$ref": "#/components/schemas/certificate_request_lets_encrypt"
    },
    {
      "$ref": "#/components/schemas/certificate_request_custom"
    }
  ]
}
object CertificatesCreateResponse
{
  "type": "object",
  "properties": {
    "certificate": {
      "$ref": "#/components/schemas/certificate"
    }
  }
}
object CertificatesGetResponse
{
  "type": "object",
  "properties": {
    "certificate": {
      "$ref": "#/components/schemas/certificate"
    }
  }
}
object CertificatesListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "certificates": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/certificate"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object ContainerRegistryGetActiveGarbageCollectionResponse
{
  "type": "object",
  "properties": {
    "garbage_collection": {
      "$ref": "#/components/schemas/garbage_collection"
    }
  }
}
object ContainerRegistryGetSubscriptionInfoResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object ContainerRegistryListGarbageCollectionsResponse
{
  "type": "object",
  "properties": {
    "garbage_collections": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/garbage_collection"
      }
    }
  }
}
object ContainerRegistryListOptionsResponse
{
  "type": "object",
  "properties": {
    "options": {
      "type": "object",
      "properties": {
        "available_regions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "nyc3"
          ]
        },
        "subscription_tiers": {
          "type": "array",
          "items": {
            "allOf": [
              {
                "$ref": "#/components/schemas/subscription_tier_base"
              },
              {
                "$ref": "#/components/schemas/subscription_tier_extended"
              }
            ]
          }
        }
      }
    }
  }
}
object ContainerRegistryListRepositoriesResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "repositories": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/repository"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "repositories": [
      {
        "name": "repo-1",
        "tag_count": 1,
        "latest_tag": {
          "tag": "latest",
          "repository": "repo-1",
          "size_bytes": 5861888,
          "updated_at": "2020-04-09T23:54:25Z",
          "registry_name": "example",
          "manifest_digest": "sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221",
          "compressed_size_bytes": 2803255
        },
        "registry_name": "example"
      }
    ]
  }
}
object ContainerRegistryListRepositoriesV2Response
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "repositories": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/repository_v2"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 5
    },
    "links": {
      "pages": {
        "last": "https://api.digitalocean.com/v2/registry/example/repositoriesV2?page=5&per_page=1",
        "next": "https://api.digitalocean.com/v2/registry/example/repositoriesV2?page=2&page_token=JPZmZzZXQiOjB9&per_page=1"
      }
    },
    "repositories": [
      {
        "name": "repo-1",
        "tag_count": 57,
        "registry_name": "example",
        "manifest_count": 82,
        "latest_manifest": {
          "tags": [
            "v1",
            "v2"
          ],
          "blobs": [
            {
              "digest": "sha256:14119a10abf4669e8cdbdff324a9f9605d99697215a0d21c360fe8dfa8471bab",
              "compressed_size_bytes": 1471
            },
            {
              "digest": "sha256:a0d0a0d46f8b52473982a3c466318f479767577551a53ffc9074c9fa7035982e",
              "compressed_size_byte": 2814446
            },
            {
              "digest": "sha256:69704ef328d05a9f806b6b8502915e6a0a4faa4d72018dc42343f511490daf8a",
              "compressed_size_bytes": 528
            }
          ],
          "digest": "sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221",
          "repository": "repo-1",
          "size_bytes": 2816445,
          "updated_at": "2021-04-09T23:54:25Z",
          "registry_name": "example",
          "compressed_size_bytes": 1972332
        }
      }
    ]
  }
}
object ContainerRegistryListRepositoryManifestsResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "manifests": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/repository_manifest"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 3
    },
    "links": {
      "pages": {
        "last": "https://api.digitalocean.com/v2/registry/example/repositories/repo-1/digests?page=3&per_page=1",
        "next": "https://api.digitalocean.com/v2/registry/example/repositories/repo-1/digests?page=3&per_page=1",
        "prev": "https://api.digitalocean.com/v2/registry/example/repositories/repo-1/digests?page=1&per_page=1",
        "first": "https://api.digitalocean.com/v2/registry/example/repositories/repo-1/digests?page=1&per_page=1"
      }
    },
    "manifests": [
      {
        "tags": [
          "v1",
          "v2"
        ],
        "blobs": [
          {
            "digest": "sha256:14119a10abf4669e8cdbdff324a9f9605d99697215a0d21c360fe8dfa8471bab",
            "compressed_size_bytes": 1471
          },
          {
            "digest": "sha256:a0d0a0d46f8b52473982a3c466318f479767577551a53ffc9074c9fa7035982e",
            "compressed_size_byte": 2814446
          },
          {
            "digest": "sha256:69704ef328d05a9f806b6b8502915e6a0a4faa4d72018dc42343f511490daf8a",
            "compressed_size_bytes": 528
          }
        ],
        "digest": "sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221",
        "repository": "repo-1",
        "size_bytes": 2816445,
        "updated_at": "2021-04-09T23:54:25Z",
        "registry_name": "example",
        "compressed_size_bytes": 1972332
      }
    ]
  }
}
object ContainerRegistryListRepositoryTagsResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/repository_tag"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "tags": [
      {
        "tag": "latest",
        "repository": "repo-1",
        "size_bytes": 5861888,
        "updated_at": "2020-04-09T23:54:25Z",
        "registry_name": "example",
        "manifest_digest": "sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221",
        "compressed_size_bytes": 2803255
      }
    ]
  }
}
object ContainerRegistryUpdateSubscriptionTierRequest
{
  "type": "object",
  "properties": {
    "tier_slug": {
      "enum": [
        "starter",
        "basic",
        "professional"
      ],
      "type": "string",
      "example": "basic",
      "description": "The slug of the subscription tier to sign up for."
    }
  }
}
object DatabasesAddNewConnectionPoolResponse
{
  "type": "object",
  "required": [
    "pool"
  ],
  "properties": {
    "pool": {
      "$ref": "#/components/schemas/connection_pool"
    }
  }
}
object DatabasesAddResponse
{
  "type": "object",
  "required": [
    "db"
  ],
  "properties": {
    "db": {
      "$ref": "#/components/schemas/database"
    }
  }
}
object DatabasesAddUserRequest
{
  "allOf": [
    {
      "$ref": "#/components/schemas/database_user"
    },
    {
      "type": "object",
      "properties": {
        "readonly": {
          "type": "boolean",
          "example": true,
          "description": "For MongoDB clusters, set to `true` to create a read-only user.\nThis option is not currently supported for other database engines.             \n"
        }
      }
    }
  ]
}
object DatabasesAddUserResponse
{
  "type": "object",
  "required": [
    "user"
  ],
  "properties": {
    "user": {
      "$ref": "#/components/schemas/database_user"
    }
  }
}
object DatabasesConfigureEvictionPolicyRequest
{
  "type": "object",
  "required": [
    "eviction_policy"
  ],
  "properties": {
    "eviction_policy": {
      "$ref": "#/components/schemas/eviction_policy_model"
    }
  }
}
object DatabasesCreateClusterRequest
{
  "allOf": [
    {
      "$ref": "#/components/schemas/database_cluster"
    },
    {
      "type": "object",
      "properties": {
        "backup_restore": {
          "$ref": "#/components/schemas/database_backup"
        }
      }
    }
  ]
}
object DatabasesCreateClusterResponse
{
  "type": "object",
  "required": [
    "database"
  ],
  "properties": {
    "database": {
      "$ref": "#/components/schemas/database_cluster"
    }
  }
}
object DatabasesCreateReadOnlyReplicaResponse
{
  "type": "object",
  "properties": {
    "replica": {
      "$ref": "#/components/schemas/database_replica"
    }
  }
}
object DatabasesCreateTopicKafkaClusterResponse
{
  "type": "object",
  "example": {
    "topic": {
      "name": "customer-events",
      "state": "active",
      "config": {
        "flush_ms": 9223372036854776000,
        "segment_ms": 604800000,
        "preallocate": false,
        "retention_ms": 604800000,
        "segment_bytes": 209715200,
        "cleanup_policy": "delete",
        "flush_messages": 9223372036854776000,
        "retention_bytes": -1,
        "compression_type": "producer",
        "max_message_bytes": 1048588,
        "segment_jitter_ms": 0,
        "delete_retention_ms": 86400000,
        "min_insync_replicas": 1,
        "segment_index_bytes": 10485760,
        "file_delete_delay_ms": 60000,
        "index_interval_bytes": 4096,
        "max_compaction_lag_ms": 9223372036854776000,
        "min_compaction_lag_ms": 0,
        "message_format_version": "3.0-IV1",
        "message_timestamp_type": "create_time",
        "min_cleanable_dirty_ratio": 0.5,
        "message_down_conversion_enable": true,
        "message_timestamp_difference_max_ms": 9223372036854776000
      },
      "partitions": [
        {
          "id": 0,
          "size": 4096,
          "consumer_groups": [
            {
              "name": "consumer-group-1",
              "offset": 0
            },
            {
              "name": "consumer-group-2",
              "offset": 1
            }
          ],
          "earliest_offset": 0,
          "in_sync_replicas": 3
        },
        {
          "id": 1,
          "size": 4096,
          "consumer_groups": null,
          "earliest_offset": 0,
          "in_sync_replicas": 3
        }
      ],
      "replication_factor": 3
    }
  },
  "properties": {
    "topic": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "example": "customer-events"
        },
        "state": {
          "type": "string",
          "example": "active"
        },
        "config": {
          "type": "object",
          "properties": {
            "flush_ms": {
              "type": "number",
              "example": 9223372036854776000
            },
            "segment_ms": {
              "type": "number",
              "example": 604800000
            },
            "preallocate": {
              "type": "boolean",
              "example": false
            },
            "retention_ms": {
              "type": "number",
              "example": 604800000
            },
            "segment_bytes": {
              "type": "number",
              "example": 209715200
            },
            "cleanup_policy": {
              "type": "string",
              "example": "delete"
            },
            "flush_messages": {
              "type": "number",
              "example": 9223372036854776000
            },
            "retention_bytes": {
              "type": "number",
              "example": -1
            },
            "compression_type": {
              "type": "string",
              "example": "producer"
            },
            "max_message_bytes": {
              "type": "number",
              "example": 1048588
            },
            "segment_jitter_ms": {
              "type": "number",
              "example": 0
            },
            "delete_retention_ms": {
              "type": "number",
              "example": 86400000
            },
            "min_insync_replicas": {
              "type": "number",
              "example": 1
            },
            "segment_index_bytes": {
              "type": "number",
              "example": 10485760
            },
            "file_delete_delay_ms": {
              "type": "number",
              "example": 60000
            },
            "index_interval_bytes": {
              "type": "number",
              "example": 4096
            },
            "max_compaction_lag_ms": {
              "type": "number",
              "example": 9223372036854776000
            },
            "min_compaction_lag_ms": {
              "type": "number",
              "example": 0
            },
            "message_format_version": {
              "type": "string",
              "example": "3.0-IV1"
            },
            "message_timestamp_type": {
              "type": "string",
              "example": "create_time"
            },
            "min_cleanable_dirty_ratio": {
              "type": "number",
              "example": 0.5
            },
            "message_down_conversion_enable": {
              "type": "boolean",
              "example": true
            },
            "message_timestamp_difference_max_ms": {
              "type": "number",
              "example": 9223372036854776000
            }
          }
        },
        "partitions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number",
                "example": 0
              },
              "size": {
                "type": "number",
                "example": 4096
              },
              "consumer_groups": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "example": "consumer-group-1"
                    },
                    "offset": {
                      "type": "number",
                      "example": 0
                    }
                  }
                },
                "nullable": true
              },
              "earliest_offset": {
                "type": "number",
                "example": 0
              },
              "in_sync_replicas": {
                "type": "number",
                "example": 3
              }
            }
          }
        },
        "replication_factor": {
          "type": "number",
          "example": 3
        }
      }
    }
  }
}
object DatabasesGetClusterConfigResponse
{
  "type": "object",
  "required": [
    "config"
  ],
  "properties": {
    "config": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/mysql"
        },
        {
          "$ref": "#/components/schemas/postgres"
        },
        {
          "$ref": "#/components/schemas/redis"
        }
      ]
    }
  }
}
object DatabasesGetClustersMetricsCredentialsResponse
{
  "type": "object",
  "example": {
    "credentials": {
      "basic_auth_password": "password",
      "basic_auth_username": "username"
    }
  },
  "properties": {
    "credentials": {
      "type": "object",
      "properties": {
        "basic_auth_password": {
          "type": "string",
          "example": "password"
        },
        "basic_auth_username": {
          "type": "string",
          "example": "username"
        }
      }
    }
  }
}
object DatabasesGetEvictionPolicyResponse
{
  "required": [
    "eviction_policy"
  ],
  "properties": {
    "eviction_policy": {
      "$ref": "#/components/schemas/eviction_policy_model"
    }
  }
}
object DatabasesGetPublicCertificateResponse
{
  "type": "object",
  "required": [
    "ca"
  ],
  "properties": {
    "ca": {
      "$ref": "#/components/schemas/ca"
    }
  }
}
object DatabasesListBackupsResponse
{
  "type": "object",
  "required": [
    "backups"
  ],
  "properties": {
    "backups": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/backup"
      }
    }
  }
}
object DatabasesListClustersResponse
{
  "type": "object",
  "example": {
    "databases": [
      {
        "id": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30",
        "name": "backend",
        "size": "db-s-2vcpu-4gb",
        "tags": [
          "production"
        ],
        "users": [
          {
            "name": "doadmin",
            "role": "primary",
            "password": "wv78n3zpz42xezdk"
          }
        ],
        "engine": "pg",
        "region": "nyc3",
        "status": "online",
        "version": "10",
        "db_names": [
          "defaultdb"
        ],
        "num_nodes": 1,
        "connection": {
          "ssl": true,
          "uri": "postgres://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require",
          "host": "backend-do-user-19081923-0.db.ondigitalocean.com",
          "port": 25060,
          "user": "doadmin",
          "database": "",
          "password": "wv78n3zpz42xezdk"
        },
        "created_at": "2019-01-11T18:37:36Z",
        "storage_size_mib": 61440,
        "maintenance_window": {
          "day": "saturday",
          "hour": "08:45:12",
          "pending": true,
          "description": [
            "Update TimescaleDB to version 1.2.1",
            "Upgrade to PostgreSQL 11.2 and 10.7 bugfix releases"
          ]
        },
        "private_connection": {
          "ssl": true,
          "uri": "postgres://doadmin:wv78n3zpz42xezdk@private-backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require",
          "host": "private-backend-do-user-19081923-0.db.ondigitalocean.com",
          "port": 25060,
          "user": "doadmin",
          "database": "",
          "password": "wv78n3zpz42xezdk"
        },
        "version_end_of_life": "2023-11-09T00:00:00Z",
        "private_network_uuid": "d455e75d-4858-4eec-8c95-da2f0a5f93a7",
        "version_end_of_availability": "2023-05-09T00:00:00Z"
      }
    ]
  },
  "properties": {
    "databases": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30"
          },
          "name": {
            "type": "string",
            "example": "backend"
          },
          "size": {
            "type": "string",
            "example": "db-s-2vcpu-4gb"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "example": "production"
            }
          },
          "users": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "example": "doadmin"
                },
                "role": {
                  "type": "string",
                  "example": "primary"
                },
                "password": {
                  "type": "string",
                  "example": "wv78n3zpz42xezdk"
                }
              }
            }
          },
          "engine": {
            "type": "string",
            "example": "pg"
          },
          "region": {
            "type": "string",
            "example": "nyc3"
          },
          "status": {
            "type": "string",
            "example": "online"
          },
          "version": {
            "type": "string",
            "example": "10"
          },
          "db_names": {
            "type": "array",
            "items": {
              "type": "string",
              "example": "defaultdb"
            }
          },
          "num_nodes": {
            "type": "number",
            "example": 1
          },
          "connection": {
            "type": "object",
            "properties": {
              "ssl": {
                "type": "boolean",
                "example": true
              },
              "uri": {
                "type": "string",
                "example": "postgres://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require"
              },
              "host": {
                "type": "string",
                "example": "backend-do-user-19081923-0.db.ondigitalocean.com"
              },
              "port": {
                "type": "number",
                "example": 25060
              },
              "user": {
                "type": "string",
                "example": "doadmin"
              },
              "database": {
                "type": "string",
                "example": ""
              },
              "password": {
                "type": "string",
                "example": "wv78n3zpz42xezdk"
              }
            }
          },
          "created_at": {
            "type": "string",
            "example": "2019-01-11T18:37:36Z"
          },
          "storage_size_mib": {
            "type": "number",
            "example": 61440
          },
          "maintenance_window": {
            "type": "object",
            "properties": {
              "day": {
                "type": "string",
                "example": "saturday"
              },
              "hour": {
                "type": "string",
                "example": "08:45:12"
              },
              "pending": {
                "type": "boolean",
                "example": true
              },
              "description": {
                "type": "array",
                "items": {
                  "type": "string",
                  "example": "Update TimescaleDB to version 1.2.1"
                }
              }
            }
          },
          "private_connection": {
            "type": "object",
            "properties": {
              "ssl": {
                "type": "boolean",
                "example": true
              },
              "uri": {
                "type": "string",
                "example": "postgres://doadmin:wv78n3zpz42xezdk@private-backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require"
              },
              "host": {
                "type": "string",
                "example": "private-backend-do-user-19081923-0.db.ondigitalocean.com"
              },
              "port": {
                "type": "number",
                "example": 25060
              },
              "user": {
                "type": "string",
                "example": "doadmin"
              },
              "database": {
                "type": "string",
                "example": ""
              },
              "password": {
                "type": "string",
                "example": "wv78n3zpz42xezdk"
              }
            }
          },
          "version_end_of_life": {
            "type": "string",
            "example": "2023-11-09T00:00:00Z"
          },
          "private_network_uuid": {
            "type": "string",
            "example": "d455e75d-4858-4eec-8c95-da2f0a5f93a7"
          },
          "version_end_of_availability": {
            "type": "string",
            "example": "2023-05-09T00:00:00Z"
          }
        }
      }
    }
  }
}
object DatabasesListEventsLogsResponse
{
  "type": "object",
  "example": {
    "events": [
      {
        "id": "pe8u2huh",
        "event_type": "cluster_create",
        "create_time": "2020-10-29T15:57:38Z",
        "cluster_name": "customer-events"
      },
      {
        "id": "pe8ufefuh",
        "event_type": "cluster_update",
        "create_time": "2023-10-30T15:57:38Z",
        "cluster_name": "customer-events"
      }
    ]
  },
  "properties": {
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "pe8u2huh"
          },
          "event_type": {
            "type": "string",
            "example": "cluster_create"
          },
          "create_time": {
            "type": "string",
            "example": "2020-10-29T15:57:38Z"
          },
          "cluster_name": {
            "type": "string",
            "example": "customer-events"
          }
        }
      }
    }
  }
}
object DatabasesListFirewallRulesResponse
{
  "type": "object",
  "example": {
    "rules": [
      {
        "type": "k8s",
        "uuid": "79f26d28-ea8a-41f2-8ad8-8cfcdd020095",
        "value": "ff2a6c52-5a44-4b63-b99c-0e98e7a63d61",
        "created_at": "2019-11-14T20:30:28Z",
        "cluster_uuid": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30"
      },
      {
        "type": "ip_addr",
        "uuid": "adfe81a8-0fa1-4e2d-973f-06aa5af19b44",
        "value": "192.168.1.1",
        "created_at": "2019-11-14T20:30:28Z",
        "cluster_uuid": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30"
      },
      {
        "type": "droplet",
        "uuid": "b9b42276-8295-4313-b40f-74173a7f46e6",
        "value": "163973392",
        "created_at": "2019-11-14T20:30:28Z",
        "cluster_uuid": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30"
      },
      {
        "type": "tag",
        "uuid": "718d23e0-13d7-4129-8a00-47fb72ee0deb",
        "value": "backend",
        "created_at": "2019-11-14T20:30:28Z",
        "cluster_uuid": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30"
      }
    ]
  },
  "properties": {
    "rules": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "example": "k8s"
          },
          "uuid": {
            "type": "string",
            "example": "79f26d28-ea8a-41f2-8ad8-8cfcdd020095"
          },
          "value": {
            "type": "string",
            "example": "ff2a6c52-5a44-4b63-b99c-0e98e7a63d61"
          },
          "created_at": {
            "type": "string",
            "example": "2019-11-14T20:30:28Z"
          },
          "cluster_uuid": {
            "type": "string",
            "example": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30"
          }
        }
      }
    }
  }
}
object DatabasesListReadOnlyReplicasResponse
{
  "type": "object",
  "example": {
    "replicas": [
      {
        "name": "read-nyc3-01",
        "region": "nyc3",
        "status": "online",
        "connection": {
          "ssl": true,
          "uri": "",
          "host": "read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com",
          "port": 25060,
          "user": "doadmin",
          "database": "defaultdb",
          "password": "wv78n3zpz42xezdk"
        },
        "created_at": "2019-01-11T18:37:36Z",
        "private_connection": {
          "ssl": true,
          "uri": "postgres://doadmin:wv78n3zpz42xezdk@private-read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require",
          "host": "private-read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com",
          "port": 25060,
          "user": "doadmin",
          "database": "",
          "password": "wv78n3zpz42xezdk"
        }
      }
    ]
  },
  "properties": {
    "replicas": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "read-nyc3-01"
          },
          "region": {
            "type": "string",
            "example": "nyc3"
          },
          "status": {
            "type": "string",
            "example": "online"
          },
          "connection": {
            "type": "object",
            "properties": {
              "ssl": {
                "type": "boolean",
                "example": true
              },
              "uri": {
                "type": "string",
                "example": ""
              },
              "host": {
                "type": "string",
                "example": "read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com"
              },
              "port": {
                "type": "number",
                "example": 25060
              },
              "user": {
                "type": "string",
                "example": "doadmin"
              },
              "database": {
                "type": "string",
                "example": "defaultdb"
              },
              "password": {
                "type": "string",
                "example": "wv78n3zpz42xezdk"
              }
            }
          },
          "created_at": {
            "type": "string",
            "example": "2019-01-11T18:37:36Z"
          },
          "private_connection": {
            "type": "object",
            "properties": {
              "ssl": {
                "type": "boolean",
                "example": true
              },
              "uri": {
                "type": "string",
                "example": "postgres://doadmin:wv78n3zpz42xezdk@private-read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require"
              },
              "host": {
                "type": "string",
                "example": "private-read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com"
              },
              "port": {
                "type": "number",
                "example": 25060
              },
              "user": {
                "type": "string",
                "example": "doadmin"
              },
              "database": {
                "type": "string",
                "example": ""
              },
              "password": {
                "type": "string",
                "example": "wv78n3zpz42xezdk"
              }
            }
          }
        }
      }
    }
  }
}
object DatabasesListResponse
{
  "type": "object",
  "example": {
    "dbs": [
      {
        "name": "alpha"
      },
      {
        "name": "defaultdb"
      }
    ]
  },
  "properties": {
    "dbs": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "alpha"
          }
        }
      }
    }
  }
}
object DatabasesListTopicsKafkaClusterResponse
{
  "type": "object",
  "example": {
    "topics": [
      {
        "name": "customer-events",
        "state": "active",
        "partition_count": 3,
        "replication_factor": 2
      },
      {
        "name": "engineering-events",
        "state": "configuring",
        "partition_count": 10,
        "replication_factor": 2
      }
    ]
  },
  "properties": {
    "topics": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "customer-events"
          },
          "state": {
            "type": "string",
            "example": "active"
          },
          "partition_count": {
            "type": "number",
            "example": 3
          },
          "replication_factor": {
            "type": "number",
            "example": 2
          }
        }
      }
    }
  }
}
object DatabasesListUsersResponse
{
  "type": "object",
  "example": {
    "users": [
      {
        "name": "app-01",
        "role": "normal",
        "password": "jge5lfxtzhx42iff"
      },
      {
        "name": "doadmin",
        "role": "primary",
        "password": "wv78n3zpz42xezd"
      }
    ]
  },
  "properties": {
    "users": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "app-01"
          },
          "role": {
            "type": "string",
            "example": "normal"
          },
          "password": {
            "type": "string",
            "example": "jge5lfxtzhx42iff"
          }
        }
      }
    }
  }
}
object DatabasesMigrateClusterToNewRegionRequest
{
  "type": "object",
  "example": {
    "region": "lon1"
  },
  "required": [
    "region"
  ],
  "properties": {
    "region": {
      "type": "string",
      "example": "lon1",
      "description": "A slug identifier for the region to which the database cluster will be migrated."
    }
  }
}
object DatabasesResetUserAuthRequest
{
  "type": "object",
  "properties": {
    "mysql_settings": {
      "$ref": "#/components/schemas/mysql_settings"
    }
  }
}
object DatabasesUpdateFirewallRulesRequest
{
  "type": "object",
  "properties": {
    "rules": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/firewall_rule"
      }
    }
  }
}
object DatabasesUpdateSettingsRequest
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "settings": {
          "$ref": "#/components/schemas/user_settings"
        }
      }
    }
  ],
  "required": [
    "settings"
  ]
}
object DomainRecordsCreateNewRecordRequest
{
  "anyOf": [
    {
      "$ref": "#/components/schemas/domain_record_a"
    },
    {
      "$ref": "#/components/schemas/domain_record_aaaa"
    },
    {
      "$ref": "#/components/schemas/domain_record_caa"
    },
    {
      "$ref": "#/components/schemas/domain_record_cname"
    },
    {
      "$ref": "#/components/schemas/domain_record_mx"
    },
    {
      "$ref": "#/components/schemas/domain_record_ns"
    },
    {
      "$ref": "#/components/schemas/domain_record_soa"
    },
    {
      "$ref": "#/components/schemas/domain_record_srv"
    },
    {
      "$ref": "#/components/schemas/domain_record_txt"
    }
  ],
  "discriminator": {
    "mapping": {
      "A": "#/components/schemas/domain_record_a",
      "MX": "#/components/schemas/domain_record_mx",
      "NS": "#/components/schemas/domain_record_ns",
      "CAA": "#/components/schemas/domain_record_caa",
      "SOA": "#/components/schemas/domain_record_soa",
      "SRV": "#/components/schemas/domain_record_srv",
      "TXT": "#/components/schemas/domain_record_txt",
      "AAAA": "#/components/schemas/domain_record_aaaa",
      "CNAME": "#/components/schemas/domain_record_cname"
    },
    "propertyName": "type"
  }
}
object DomainRecordsCreateNewRecordResponse
{
  "example": {
    "domain_record": {
      "id": 28448433,
      "tag": null,
      "ttl": 1800,
      "data": "162.10.66.0",
      "name": "www",
      "port": null,
      "type": "A",
      "flags": null,
      "weight": null,
      "priority": null
    }
  },
  "properties": {
    "domain_record": {
      "$ref": "#/components/schemas/domain_record"
    }
  }
}
object DomainRecordsGetExistingRecordResponse
{
  "example": {
    "domain_record": {
      "id": 3352896,
      "tag": null,
      "ttl": 1800,
      "data": "162.10.66.0",
      "name": "blog",
      "port": null,
      "type": "A",
      "flags": null,
      "weight": null,
      "priority": null
    }
  },
  "properties": {
    "domain_record": {
      "$ref": "#/components/schemas/domain_record"
    }
  }
}
object DomainRecordsListAllRecordsResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "domain_records": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/domain_record"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object DomainsCreateResponse
{
  "example": {
    "domain": {
      "ttl": 1800,
      "name": "example.com",
      "zone_file": null
    }
  },
  "properties": {
    "domain": {
      "$ref": "#/components/schemas/domain"
    }
  }
}
object DomainsGetResponse
{
  "example": {
    "domain": {
      "ttl": 1800,
      "name": "example.com",
      "zone_file": "$ORIGIN example.com.\n$TTL 1800\nexample.com. IN SOA ns1.digitalocean.com. hostmaster.example.com. 1415982611 10800 3600 604800 1800\nexample.com. 1800 IN NS ns1.digitalocean.com.\nexample.com. 1800 IN NS ns2.digitalocean.com.\nexample.com. 1800 IN NS ns3.digitalocean.com.\nexample.com. 1800 IN A 1.2.3.4\n"
    }
  },
  "properties": {
    "domain": {
      "$ref": "#/components/schemas/domain"
    }
  }
}
object DomainsListResponse
{
  "allOf": [
    {
      "type": "object",
      "required": [
        "domains"
      ],
      "properties": {
        "domains": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/domain"
          },
          "description": "Array of volumes."
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "links": {},
    "domains": [
      {
        "ttl": 1800,
        "name": "example.com",
        "zone_file": "$ORIGIN example.com.\n$TTL 1800\nexample.com. IN SOA ns1.digitalocean.com. hostmaster.example.com. 1415982609 10800 3600 604800 1800\nexample.com. 1800 IN NS ns1.digitalocean.com.\nexample.com. 1800 IN NS ns2.digitalocean.com.\nexample.com. 1800 IN NS ns3.digitalocean.com.\nexample.com. 1800 IN A 1.2.3.4\n"
      }
    ]
  }
}
object DropletActionsActOnTaggedDropletsRequest
{
  "oneOf": [
    {
      "$ref": "#/components/schemas/droplet_action"
    },
    {
      "$ref": "#/components/schemas/droplet_action_snapshot"
    }
  ],
  "discriminator": {
    "mapping": {
      "power_on": "#/components/schemas/droplet_action",
      "shutdown": "#/components/schemas/droplet_action",
      "snapshot": "#/components/schemas/droplet_action_snapshot",
      "power_off": "#/components/schemas/droplet_action",
      "enable_ipv6": "#/components/schemas/droplet_action",
      "power_cycle": "#/components/schemas/droplet_action",
      "enable_backups": "#/components/schemas/droplet_action",
      "disable_backups": "#/components/schemas/droplet_action"
    },
    "propertyName": "type"
  }
}
object DropletActionsActOnTaggedDropletsResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object DropletActionsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "actions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/action"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object DropletActionsPostRequest
{
  "anyOf": [
    {
      "$ref": "#/components/schemas/droplet_action"
    },
    {
      "$ref": "#/components/schemas/droplet_action_restore"
    },
    {
      "$ref": "#/components/schemas/droplet_action_resize"
    },
    {
      "$ref": "#/components/schemas/droplet_action_rebuild"
    },
    {
      "$ref": "#/components/schemas/droplet_action_rename"
    },
    {
      "$ref": "#/components/schemas/droplet_action_change_kernel"
    },
    {
      "$ref": "#/components/schemas/droplet_action_snapshot"
    }
  ],
  "discriminator": {
    "mapping": {
      "reboot": "#/components/schemas/droplet_action",
      "rename": "#/components/schemas/droplet_action_rename",
      "resize": "#/components/schemas/droplet_action_resize",
      "rebuild": "#/components/schemas/droplet_action_rebuild",
      "restore": "#/components/schemas/droplet_action_restore",
      "power_on": "#/components/schemas/droplet_action",
      "shutdown": "#/components/schemas/droplet_action",
      "snapshot": "#/components/schemas/droplet_action_snapshot",
      "power_off": "#/components/schemas/droplet_action",
      "enable_ipv6": "#/components/schemas/droplet_action",
      "power_cycle": "#/components/schemas/droplet_action",
      "change_kernel": "#/components/schemas/droplet_action_change_kernel",
      "enable_backups": "#/components/schemas/droplet_action",
      "password_reset": "#/components/schemas/droplet_action",
      "disable_backups": "#/components/schemas/droplet_action"
    },
    "propertyName": "type"
  }
}
object DropletActionsPostResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object DropletsCreateRequest
{
  "oneOf": [
    {
      "$ref": "#/components/schemas/droplet_single_create"
    },
    {
      "$ref": "#/components/schemas/droplet_multi_create"
    }
  ]
}
object DropletsCreateResponse
{
  "oneOf": [
    {
      "title": "Single Droplet Response",
      "required": [
        "droplet",
        "links"
      ],
      "properties": {
        "links": {
          "type": "object",
          "properties": {
            "actions": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/action_link"
              }
            }
          }
        },
        "droplet": {
          "$ref": "#/components/schemas/droplet"
        }
      }
    },
    {
      "title": "Multiple Droplet Response",
      "required": [
        "droplets",
        "links"
      ],
      "properties": {
        "links": {
          "type": "object",
          "properties": {
            "actions": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/action_link"
              }
            }
          }
        },
        "droplets": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/droplet"
          }
        }
      }
    }
  ]
}
object DropletsGetResponse
{
  "type": "object",
  "example": {
    "droplet": {
      "id": 3164444,
      "disk": 25,
      "name": "example.com",
      "size": {
        "disk": 25,
        "slug": "s-1vcpu-1gb",
        "vcpus": 1,
        "memory": 1024,
        "regions": [
          "ams2",
          "ams3",
          "blr1",
          "fra1",
          "lon1",
          "nyc1",
          "nyc2",
          "nyc3",
          "sfo1",
          "sfo2",
          "sfo3",
          "sgp1",
          "tor1"
        ],
        "transfer": 1,
        "available": true,
        "description": "Basic",
        "price_hourly": 0.00743999984115362,
        "price_monthly": 5
      },
      "tags": [
        "web",
        "env:prod"
      ],
      "image": {
        "id": 63663980,
        "name": "20.04 (LTS) x64",
        "slug": "ubuntu-20-04-x64",
        "tags": [],
        "type": "snapshot",
        "public": true,
        "status": "available",
        "regions": [
          "ams2",
          "ams3",
          "blr1",
          "fra1",
          "lon1",
          "nyc1",
          "nyc2",
          "nyc3",
          "sfo1",
          "sfo2",
          "sfo3",
          "sgp1",
          "tor1"
        ],
        "created_at": "2020-05-15T05:47:50Z",
        "description": "",
        "distribution": "Ubuntu",
        "error_message": "",
        "min_disk_size": 20,
        "size_gigabytes": 2.36
      },
      "vcpus": 1,
      "kernel": null,
      "locked": false,
      "memory": 1024,
      "region": {
        "name": "New York 3",
        "slug": "nyc3",
        "sizes": [
          "s-1vcpu-1gb",
          "s-1vcpu-2gb",
          "s-1vcpu-3gb",
          "s-2vcpu-2gb",
          "s-3vcpu-1gb",
          "s-2vcpu-4gb",
          "s-4vcpu-8gb",
          "s-6vcpu-16gb",
          "s-8vcpu-32gb",
          "s-12vcpu-48gb",
          "s-16vcpu-64gb",
          "s-20vcpu-96gb",
          "s-24vcpu-128gb",
          "s-32vcpu-192g"
        ],
        "features": [
          "private_networking",
          "backups",
          "ipv6",
          "metadata",
          "install_agent",
          "storage",
          "image_transfer"
        ],
        "available": true
      },
      "status": "active",
      "features": [
        "backups",
        "private_networking",
        "ipv6"
      ],
      "networks": {
        "v4": [
          {
            "type": "private",
            "gateway": "nil",
            "netmask": "255.255.0.0",
            "ip_address": "10.128.192.124"
          },
          {
            "type": "public",
            "gateway": "192.241.165.1",
            "netmask": "255.255.255.0",
            "ip_address": "192.241.165.154"
          }
        ],
        "v6": [
          {
            "type": "public",
            "gateway": "2604:a880:0:1010::1",
            "netmask": 64,
            "ip_address": "2604:a880:0:1010::18a:a001"
          }
        ]
      },
      "vpc_uuid": "760e09ef-dc84-11e8-981e-3cfdfeaae000",
      "size_slug": "s-1vcpu-1gb",
      "backup_ids": [
        53893572
      ],
      "created_at": "2020-07-21T18:37:44Z",
      "volume_ids": [],
      "snapshot_ids": [
        67512819
      ],
      "next_backup_window": {
        "end": "2020-07-30T23:00:00Z",
        "start": "2020-07-30T00:00:00Z"
      }
    }
  },
  "properties": {
    "droplet": {
      "type": "object",
      "properties": {
        "id": {
          "type": "number",
          "example": 3164444
        },
        "disk": {
          "type": "number",
          "example": 25
        },
        "name": {
          "type": "string",
          "example": "example.com"
        },
        "size": {
          "type": "object",
          "properties": {
            "disk": {
              "type": "number",
              "example": 25
            },
            "slug": {
              "type": "string",
              "example": "s-1vcpu-1gb"
            },
            "vcpus": {
              "type": "number",
              "example": 1
            },
            "memory": {
              "type": "number",
              "example": 1024
            },
            "regions": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "ams2"
              }
            },
            "transfer": {
              "type": "number",
              "example": 1
            },
            "available": {
              "type": "boolean",
              "example": true
            },
            "description": {
              "type": "string",
              "example": "Basic"
            },
            "price_hourly": {
              "type": "number",
              "example": 0.00743999984115362
            },
            "price_monthly": {
              "type": "number",
              "example": 5
            }
          }
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string",
            "example": "web"
          }
        },
        "image": {
          "type": "object",
          "properties": {
            "id": {
              "type": "number",
              "example": 63663980
            },
            "name": {
              "type": "string",
              "example": "20.04 (LTS) x64"
            },
            "slug": {
              "type": "string",
              "example": "ubuntu-20-04-x64"
            },
            "tags": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "type": {
              "type": "string",
              "example": "snapshot"
            },
            "public": {
              "type": "boolean",
              "example": true
            },
            "status": {
              "type": "string",
              "example": "available"
            },
            "regions": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "ams2"
              }
            },
            "created_at": {
              "type": "string",
              "example": "2020-05-15T05:47:50Z"
            },
            "description": {
              "type": "string",
              "example": ""
            },
            "distribution": {
              "type": "string",
              "example": "Ubuntu"
            },
            "error_message": {
              "type": "string",
              "example": ""
            },
            "min_disk_size": {
              "type": "number",
              "example": 20
            },
            "size_gigabytes": {
              "type": "number",
              "example": 2.36
            }
          }
        },
        "vcpus": {
          "type": "number",
          "example": 1
        },
        "kernel": {
          "type": "string",
          "nullable": true,
          "x-konfig-null-placeholder": true
        },
        "locked": {
          "type": "boolean",
          "example": false
        },
        "memory": {
          "type": "number",
          "example": 1024
        },
        "region": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "example": "New York 3"
            },
            "slug": {
              "type": "string",
              "example": "nyc3"
            },
            "sizes": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "s-1vcpu-1gb"
              }
            },
            "features": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "private_networking"
              }
            },
            "available": {
              "type": "boolean",
              "example": true
            }
          }
        },
        "status": {
          "type": "string",
          "example": "active"
        },
        "features": {
          "type": "array",
          "items": {
            "type": "string",
            "example": "backups"
          }
        },
        "networks": {
          "type": "object",
          "properties": {
            "v4": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "example": "private"
                  },
                  "gateway": {
                    "type": "string",
                    "example": "nil"
                  },
                  "netmask": {
                    "type": "string",
                    "example": "255.255.0.0"
                  },
                  "ip_address": {
                    "type": "string",
                    "example": "10.128.192.124"
                  }
                }
              }
            },
            "v6": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "example": "public"
                  },
                  "gateway": {
                    "type": "string",
                    "example": "2604:a880:0:1010::1"
                  },
                  "netmask": {
                    "type": "number",
                    "example": 64
                  },
                  "ip_address": {
                    "type": "string",
                    "example": "2604:a880:0:1010::18a:a001"
                  }
                }
              }
            }
          }
        },
        "vpc_uuid": {
          "type": "string",
          "example": "760e09ef-dc84-11e8-981e-3cfdfeaae000"
        },
        "size_slug": {
          "type": "string",
          "example": "s-1vcpu-1gb"
        },
        "backup_ids": {
          "type": "array",
          "items": {
            "type": "number",
            "example": 53893572
          }
        },
        "created_at": {
          "type": "string",
          "example": "2020-07-21T18:37:44Z"
        },
        "volume_ids": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "snapshot_ids": {
          "type": "array",
          "items": {
            "type": "number",
            "example": 67512819
          }
        },
        "next_backup_window": {
          "type": "object",
          "properties": {
            "end": {
              "type": "string",
              "example": "2020-07-30T23:00:00Z"
            },
            "start": {
              "type": "string",
              "example": "2020-07-30T00:00:00Z"
            }
          }
        }
      }
    }
  }
}
object DropletsListAssociatedResourcesResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "volumes": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/associated_resource"
          }
        },
        "snapshots": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/associated_resource"
          }
        },
        "floating_ips": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/associated_resource"
          }
        },
        "reserved_ips": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/associated_resource"
          }
        },
        "volume_snapshots": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/associated_resource"
          }
        }
      }
    }
  ]
}
object DropletsListBackupsResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "backups": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/droplet_snapshot"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object DropletsListFirewallsResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "firewalls": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/firewall"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object DropletsListKernelsResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "kernels": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/kernel"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object DropletsListNeighborsResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "droplets": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/droplet"
          }
        }
      }
    }
  ]
}
object DropletsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "droplets": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/droplet"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object DropletsListSnapshotsResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "snapshots": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/droplet_snapshot"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object FirewallsAddDropletsRequest
{
  "required": [
    "droplet_ids"
  ],
  "properties": {
    "droplet_ids": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "example": [
        49696269
      ],
      "description": "An array containing the IDs of the Droplets to be assigned to the firewall."
    }
  }
}
object FirewallsAddRulesRequest
{
  "allOf": [
    {
      "$ref": "#/components/schemas/firewall_rules"
    },
    {
      "anyOf": [
        {
          "title": "Inbound Rules",
          "required": [
            "inbound_rules"
          ]
        },
        {
          "title": "Outbound Rules",
          "required": [
            "outbound_rules"
          ]
        }
      ]
    }
  ]
}
object FirewallsAddTagsRequest
{
  "required": [
    "tags"
  ],
  "properties": {
    "tags": {
      "allOf": [
        {
          "$ref": "#/components/schemas/tags_array"
        },
        {
          "description": "An array containing the names of the Tags to be assigned to the firewall."
        }
      ]
    }
  }
}
object FirewallsCreateRequest
{
  "allOf": [
    {
      "$ref": "#/components/schemas/firewall"
    },
    {
      "required": [
        "name"
      ]
    },
    {
      "anyOf": [
        {
          "title": "Inbound Rules",
          "required": [
            "inbound_rules"
          ]
        },
        {
          "title": "Outbound Rules",
          "required": [
            "outbound_rules"
          ]
        }
      ]
    }
  ]
}
object FirewallsCreateResponse
{
  "type": "object",
  "example": {
    "firewall": {
      "id": "bb4b2611-3d72-467b-8602-280330ecd65c",
      "name": "firewall",
      "tags": [],
      "status": "waiting",
      "created_at": "2017-05-23T21:24:00Z",
      "droplet_ids": [
        8043964
      ],
      "inbound_rules": [
        {
          "ports": "80",
          "sources": {
            "load_balancer_uids": [
              "4de7ac8b-495b-4884-9a69-1050c6793cd6"
            ]
          },
          "protocol": "tcp"
        },
        {
          "ports": "22",
          "sources": {
            "tags": [
              "gateway"
            ],
            "addresses": [
              "18.0.0.0/8"
            ]
          },
          "protocol": "tcp"
        }
      ],
      "outbound_rules": [
        {
          "ports": "80",
          "protocol": "tcp",
          "destinations": {
            "addresses": [
              "0.0.0.0/0",
              "::/0"
            ]
          }
        }
      ],
      "pending_changes": [
        {
          "status": "waiting",
          "removing": false,
          "droplet_id": 8043964
        }
      ]
    }
  },
  "properties": {
    "firewall": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "example": "bb4b2611-3d72-467b-8602-280330ecd65c"
        },
        "name": {
          "type": "string",
          "example": "firewall"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "status": {
          "type": "string",
          "example": "waiting"
        },
        "created_at": {
          "type": "string",
          "example": "2017-05-23T21:24:00Z"
        },
        "droplet_ids": {
          "type": "array",
          "items": {
            "type": "number",
            "example": 8043964
          }
        },
        "inbound_rules": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ports": {
                "type": "string",
                "example": "80"
              },
              "sources": {
                "type": "object",
                "properties": {
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "gateway"
                    }
                  },
                  "addresses": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "18.0.0.0/8"
                    }
                  },
                  "load_balancer_uids": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "4de7ac8b-495b-4884-9a69-1050c6793cd6"
                    }
                  }
                }
              },
              "protocol": {
                "type": "string",
                "example": "tcp"
              }
            }
          }
        },
        "outbound_rules": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ports": {
                "type": "string",
                "example": "80"
              },
              "protocol": {
                "type": "string",
                "example": "tcp"
              },
              "destinations": {
                "type": "object",
                "properties": {
                  "addresses": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "0.0.0.0/0"
                    }
                  }
                }
              }
            }
          }
        },
        "pending_changes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "example": "waiting"
              },
              "removing": {
                "type": "boolean",
                "example": false
              },
              "droplet_id": {
                "type": "number",
                "example": 8043964
              }
            }
          }
        }
      }
    }
  }
}
object FirewallsGetResponse
{
  "type": "object",
  "example": {
    "firewall": {
      "id": "bb4b2611-3d72-467b-8602-280330ecd65cX",
      "name": "firewall",
      "tags": [],
      "status": "succeeded",
      "created_at": "2017-05-23T21:24:00Z",
      "droplet_ids": [
        8043964
      ],
      "inbound_rules": [
        {
          "ports": "80",
          "sources": {
            "load_balancer_uids": [
              "4de7ac8b-495b-4884-9a69-1050c6793cd6"
            ]
          },
          "protocol": "tcp"
        },
        {
          "ports": "22",
          "sources": {
            "tags": [
              "gateway"
            ],
            "addresses": [
              "18.0.0.0/8"
            ]
          },
          "protocol": "tcp"
        }
      ],
      "outbound_rules": [
        {
          "ports": "80",
          "protocol": "tcp",
          "destinations": {
            "addresses": [
              "0.0.0.0/0",
              "::/0"
            ]
          }
        }
      ],
      "pending_changes": []
    }
  },
  "properties": {
    "firewall": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "example": "bb4b2611-3d72-467b-8602-280330ecd65c"
        },
        "name": {
          "type": "string",
          "example": "firewall"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "status": {
          "type": "string",
          "example": "succeeded"
        },
        "created_at": {
          "type": "string",
          "example": "2017-05-23T21:24:00Z"
        },
        "droplet_ids": {
          "type": "array",
          "items": {
            "type": "number",
            "example": 8043964
          }
        },
        "inbound_rules": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ports": {
                "type": "string",
                "example": "80"
              },
              "sources": {
                "type": "object",
                "properties": {
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "gateway"
                    }
                  },
                  "addresses": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "18.0.0.0/8"
                    }
                  },
                  "load_balancer_uids": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "4de7ac8b-495b-4884-9a69-1050c6793cd6"
                    }
                  }
                }
              },
              "protocol": {
                "type": "string",
                "example": "tcp"
              }
            }
          }
        },
        "outbound_rules": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ports": {
                "type": "string",
                "example": "80"
              },
              "protocol": {
                "type": "string",
                "example": "tcp"
              },
              "destinations": {
                "type": "object",
                "properties": {
                  "addresses": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "0.0.0.0/0"
                    }
                  }
                }
              }
            }
          }
        },
        "pending_changes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    }
  }
}
object FirewallsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "firewalls": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/firewall"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object FirewallsRemoveDropletsRequest
{
  "required": [
    "droplet_ids"
  ],
  "properties": {
    "droplet_ids": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "example": [
        49696269
      ],
      "description": "An array containing the IDs of the Droplets to be removed from the firewall."
    }
  }
}
object FirewallsRemoveRulesRequest
{
  "allOf": [
    {
      "$ref": "#/components/schemas/firewall_rules"
    },
    {
      "anyOf": [
        {
          "title": "Inbound Rules",
          "required": [
            "inbound_rules"
          ]
        },
        {
          "title": "Outbound Rules",
          "required": [
            "outbound_rules"
          ]
        }
      ]
    }
  ]
}
object FirewallsRemoveTagsRequest
{
  "required": [
    "tags"
  ],
  "properties": {
    "tags": {
      "allOf": [
        {
          "$ref": "#/components/schemas/tags_array"
        },
        {
          "description": "An array containing the names of the Tags to be removed from the firewall."
        }
      ]
    }
  }
}
object FirewallsUpdateRequest
{
  "allOf": [
    {
      "$ref": "#/components/schemas/firewall"
    },
    {
      "anyOf": [
        {
          "title": "Inbound Rules",
          "required": [
            "inbound_rules"
          ]
        },
        {
          "title": "Outbound Rules",
          "required": [
            "outbound_rules"
          ]
        }
      ]
    }
  ],
  "required": [
    "name"
  ]
}
object FirewallsUpdateResponse
{
  "type": "object",
  "example": {
    "firewall": {
      "id": "bb4b2611-3d72-467b-8602-280330ecd65cX",
      "name": "frontend-firewall",
      "tags": [
        "frontend"
      ],
      "status": "waiting",
      "created_at": "2020-05-23T21:24:00Z",
      "droplet_ids": [
        8043964
      ],
      "inbound_rules": [
        {
          "ports": "80",
          "sources": {
            "load_balancer_uids": [
              "4de7ac8b-495b-4884-9a69-1050c6793cd6"
            ]
          },
          "protocol": "tcp"
        },
        {
          "ports": "22",
          "sources": {
            "tags": [
              "gateway"
            ],
            "addresses": [
              "18.0.0.0/8"
            ]
          },
          "protocol": "tcp"
        }
      ],
      "outbound_rules": [
        {
          "ports": "80",
          "protocol": "tcp",
          "destinations": {
            "addresses": [
              "0.0.0.0/0",
              "::/0"
            ]
          }
        }
      ],
      "pending_changes": [
        {
          "status": "waiting",
          "removing": false,
          "droplet_id": 8043964
        }
      ]
    }
  },
  "properties": {
    "firewall": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "example": "bb4b2611-3d72-467b-8602-280330ecd65c"
        },
        "name": {
          "type": "string",
          "example": "frontend-firewall"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string",
            "example": "frontend"
          }
        },
        "status": {
          "type": "string",
          "example": "waiting"
        },
        "created_at": {
          "type": "string",
          "example": "2020-05-23T21:24:00Z"
        },
        "droplet_ids": {
          "type": "array",
          "items": {
            "type": "number",
            "example": 8043964
          }
        },
        "inbound_rules": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ports": {
                "type": "string",
                "example": "80"
              },
              "sources": {
                "type": "object",
                "properties": {
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "gateway"
                    }
                  },
                  "addresses": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "18.0.0.0/8"
                    }
                  },
                  "load_balancer_uids": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "4de7ac8b-495b-4884-9a69-1050c6793cd6"
                    }
                  }
                }
              },
              "protocol": {
                "type": "string",
                "example": "tcp"
              }
            }
          }
        },
        "outbound_rules": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ports": {
                "type": "string",
                "example": "80"
              },
              "protocol": {
                "type": "string",
                "example": "tcp"
              },
              "destinations": {
                "type": "object",
                "properties": {
                  "addresses": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "example": "0.0.0.0/0"
                    }
                  }
                }
              }
            }
          }
        },
        "pending_changes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "example": "waiting"
              },
              "removing": {
                "type": "boolean",
                "example": false
              },
              "droplet_id": {
                "type": "number",
                "example": 8043964
              }
            }
          }
        }
      }
    }
  }
}
object FloatingIPsActionListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "actions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/action"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "links": {},
    "actions": [
      {
        "id": 72531856,
        "type": "reserve_ip",
        "region": {
          "name": "New York 3",
          "slug": "nyc3",
          "sizes": [
            "s-1vcpu-1gb",
            "s-1vcpu-2gb",
            "s-1vcpu-3gb",
            "s-2vcpu-2gb",
            "s-3vcpu-1gb",
            "s-2vcpu-4gb",
            "s-4vcpu-8gb",
            "s-6vcpu-16gb",
            "s-8vcpu-32gb",
            "s-12vcpu-48gb",
            "s-16vcpu-64gb",
            "s-20vcpu-96gb",
            "s-24vcpu-128gb",
            "s-32vcpu-192gb"
          ],
          "features": [
            "private_networking",
            "backups",
            "ipv6",
            "metadata"
          ],
          "available": true
        },
        "status": "completed",
        "started_at": "2015-11-21T21:51:09Z",
        "region_slug": "nyc3",
        "resource_id": 758604197,
        "completed_at": "2015-11-21T21:51:09Z",
        "resource_type": "floating_ip"
      }
    ]
  }
}
object FloatingIPsActionPostRequest
{
  "anyOf": [
    {
      "$ref": "#/components/schemas/floating_ip_action_unassign"
    },
    {
      "$ref": "#/components/schemas/floating_ip_action_assign"
    }
  ],
  "discriminator": {
    "mapping": {
      "assign": "#/components/schemas/floating_ip_action_assign",
      "unassign": "#/components/schemas/floating_ip_action_unassign"
    },
    "propertyName": "type"
  }
}
object FloatingIPsActionPostResponse
{
  "example": {
    "action": {
      "id": 72531856,
      "type": "assign_ip",
      "region": {
        "name": "New York 3",
        "slug": "nyc3",
        "sizes": [
          "s-1vcpu-1gb",
          "s-1vcpu-2gb",
          "s-1vcpu-3gb",
          "s-2vcpu-2gb",
          "s-3vcpu-1gb",
          "s-2vcpu-4gb",
          "s-4vcpu-8gb",
          "s-6vcpu-16gb",
          "s-8vcpu-32gb",
          "s-12vcpu-48gb",
          "s-16vcpu-64gb",
          "s-20vcpu-96gb",
          "s-24vcpu-128gb",
          "s-32vcpu-192gb"
        ],
        "features": [
          "private_networking",
          "backups",
          "ipv6",
          "metadata"
        ],
        "available": true
      },
      "status": "completed",
      "project_id": "746c6152-2fa2-11ed-92d3-27aaa54e4988",
      "started_at": "2015-11-12T17:51:03Z",
      "region_slug": "nyc3",
      "resource_id": 758604968,
      "completed_at": "2015-11-12T17:51:14Z",
      "resource_type": "floating_ip"
    }
  },
  "properties": {
    "action": {
      "allOf": [
        {
          "$ref": "#/components/schemas/action"
        },
        {
          "type": "object",
          "properties": {
            "project_id": {
              "type": "string",
              "format": "uuid",
              "example": "746c6152-2fa2-11ed-92d3-27aaa54e4988",
              "description": "The UUID of the project to which the reserved IP currently belongs."
            }
          }
        }
      ]
    }
  }
}
object FloatingIPsCreateResponse
{
  "type": "object",
  "properties": {
    "links": {
      "type": "object",
      "properties": {
        "actions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/action_link"
          }
        },
        "droplets": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/action_link"
          }
        }
      }
    },
    "floating_ip": {
      "$ref": "#/components/schemas/floating_ip"
    }
  }
}
object FloatingIPsGetResponse
{
  "type": "object",
  "properties": {
    "floating_ip": {
      "$ref": "#/components/schemas/floating_ip"
    }
  }
}
object FloatingIPsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "floating_ips": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/floating_ip"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "links": {},
    "floating_ips": [
      {
        "ip": "45.55.96.47",
        "locked": false,
        "region": {
          "name": "New York 3",
          "slug": "nyc3",
          "sizes": [
            "s-1vcpu-1gb",
            "s-1vcpu-2gb",
            "s-1vcpu-3gb",
            "s-2vcpu-2gb",
            "s-3vcpu-1gb",
            "s-2vcpu-4gb",
            "s-4vcpu-8gb",
            "s-6vcpu-16gb",
            "s-8vcpu-32gb",
            "s-12vcpu-48gb",
            "s-16vcpu-64gb",
            "s-20vcpu-96gb",
            "s-24vcpu-128gb",
            "s-32vcpu-192g"
          ],
          "features": [
            "private_networking",
            "backups",
            "ipv6",
            "metadata",
            "install_agent",
            "storage",
            "image_transfer"
          ],
          "available": true
        },
        "droplet": null,
        "project_id": "746c6152-2fa2-11ed-92d3-27aaa54e4988"
      }
    ]
  }
}
object FunctionsCreateNamespaceResponse
{
  "type": "object",
  "properties": {
    "namespace": {
      "$ref": "#/components/schemas/namespace_info"
    }
  }
}
object FunctionsCreateTriggerInNamespaceResponse
{
  "type": "object",
  "properties": {
    "trigger": {
      "$ref": "#/components/schemas/trigger_info"
    }
  }
}
object FunctionsListNamespacesResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "namespaces": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/namespace_info"
          }
        }
      }
    }
  ]
}
object FunctionsListTriggersResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "triggers": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/trigger_info"
          }
        }
      }
    }
  ]
}
object ImageActionsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "actions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/action"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object ImageActionsPostRequest
{
  "anyOf": [
    {
      "$ref": "#/components/schemas/image_action_base"
    },
    {
      "$ref": "#/components/schemas/image_action_transfer"
    }
  ],
  "discriminator": {
    "mapping": {
      "convert": "#/components/schemas/image_action_base",
      "transfer": "#/components/schemas/image_action_transfer"
    },
    "propertyName": "type"
  }
}
object ImagesGetResponse
{
  "type": "object",
  "required": [
    "image"
  ],
  "properties": {
    "image": {
      "$ref": "#/components/schemas/image"
    }
  }
}
object ImagesImportCustomImageFromUrlResponse
{
  "type": "object",
  "example": {
    "image": {
      "id": 38413969,
      "name": "ubuntu-18.04-minimal",
      "tags": [
        "base-image",
        "prod"
      ],
      "type": "custom",
      "status": "NEW",
      "regions": [],
      "created_at": "2018-09-20T19:28:00Z",
      "description": "Cloud-optimized image w/ small footprint",
      "distribution": "Ubuntu",
      "error_message": ""
    }
  },
  "properties": {
    "image": {
      "type": "object",
      "properties": {
        "id": {
          "type": "number",
          "example": 38413969
        },
        "name": {
          "type": "string",
          "example": "ubuntu-18.04-minimal"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string",
            "example": "base-image"
          }
        },
        "type": {
          "type": "string",
          "example": "custom"
        },
        "status": {
          "type": "string",
          "example": "NEW"
        },
        "regions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "created_at": {
          "type": "string",
          "example": "2018-09-20T19:28:00Z"
        },
        "description": {
          "type": "string",
          "example": "Cloud-optimized image w/ small footprint"
        },
        "distribution": {
          "type": "string",
          "example": "Ubuntu"
        },
        "error_message": {
          "type": "string",
          "example": ""
        }
      }
    }
  }
}
object ImagesListResponse
{
  "allOf": [
    {
      "type": "object",
      "required": [
        "images"
      ],
      "properties": {
        "images": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/image"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object ImagesUpdateResponse
{
  "type": "object",
  "required": [
    "image"
  ],
  "properties": {
    "image": {
      "$ref": "#/components/schemas/image"
    }
  }
}
object InvoicesListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "invoices": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/invoice_preview"
          }
        },
        "invoice_preview": {
          "$ref": "#/components/schemas/invoice_preview"
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 70
    },
    "links": {
      "pages": {
        "last": "https://api.digitalocean.com/v2/customers/my/invoices?page=35&per_page=2",
        "next": "https://api.digitalocean.com/v2/customers/my/invoices?page=2&per_page=2"
      }
    },
    "invoices": [
      {
        "amount": "12.34",
        "invoice_id": "12345678",
        "invoice_uuid": "22737513-0ea7-4206-8ceb-98a575af7681",
        "invoice_period": "2019-12"
      },
      {
        "amount": "23.45",
        "invoice_id": "23456789",
        "invoice_uuid": "fdabb512-6faf-443c-ba2e-665452332a9e",
        "invoice_period": "2019-11"
      }
    ],
    "invoice_preview": {
      "amount": "34.56",
      "invoice_id": "34567890",
      "updated_at": "2020-02-23T06:31:50Z",
      "invoice_uuid": "1afe95e6-0958-4eb0-8d9a-9c5060d3ef03",
      "invoice_period": "2020-02"
    }
  }
}
object KubernetesAddNodePoolResponse
{
  "example": {
    "node_pool": {
      "id": "cdda885e-7663-40c8-bc74-3a036c66545dX",
      "name": "new-pool",
      "size": "s-1vcpu-2gb",
      "tags": [
        "production",
        "web-team",
        "front-end",
        "k8s",
        "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
        "k8s:worker"
      ],
      "count": 3,
      "nodes": [
        {
          "id": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8fX",
          "name": " ",
          "status": {
            "state": "provisioning"
          },
          "created_at": "2018-11-15T16:00:11Z",
          "droplet_id": " ",
          "updated_at": "2018-11-15T16:00:11Z"
        },
        {
          "id": "ad12e744-c2a9-473d-8aa9-be5680500eb1X",
          "name": " ",
          "status": {
            "state": "provisioning"
          },
          "created_at": "2018-11-15T16:00:11Z",
          "droplet_id": " ",
          "updated_at": "2018-11-15T16:00:11Z"
        },
        {
          "id": "e46e8d07-f58f-4ff1-9737-97246364400eX",
          "name": " ",
          "status": {
            "state": "provisioning"
          },
          "created_at": "2018-11-15T16:00:11Z",
          "droplet_id": " ",
          "updated_at": "2018-11-15T16:00:11Z"
        }
      ],
      "labels": null,
      "taints": [],
      "max_nodes": 6,
      "min_nodes": 3,
      "auto_scale": true
    }
  },
  "properties": {
    "node_pool": {
      "$ref": "#/components/schemas/kubernetes_node_pool"
    }
  }
}
object KubernetesCreateNewClusterResponse
{
  "type": "object",
  "example": {
    "kubernetes_cluster": {
      "ha": false,
      "id": "bd5f5959-5e1e-4205-a714-a914373942af",
      "ipv4": "",
      "name": "prod-cluster-01",
      "tags": [
        "k8s",
        "k8s:bd5f5959-5e1e-4205-a714-a914373942af"
      ],
      "region": "nyc1",
      "status": {
        "state": "provisioning",
        "message": "provisioning"
      },
      "version": "1.18.6-do.0",
      "endpoint": "",
      "vpc_uuid": "c33931f2-a26a-4e61-b85c-4e95a2ec431b",
      "created_at": "2018-11-15T16:00:11Z",
      "node_pools": [
        {
          "id": "cdda885e-7663-40c8-bc74-3a036c66545d",
          "name": "worker-pool",
          "size": "s-1vcpu-2gb",
          "tags": [
            "k8s",
            "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
            "k8s:worker"
          ],
          "count": 3,
          "nodes": [
            {
              "id": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f",
              "name": "",
              "status": {
                "state": "provisioning"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "",
              "updated_at": "2018-11-15T16:00:11Z"
            },
            {
              "id": "ad12e744-c2a9-473d-8aa9-be5680500eb1",
              "name": "",
              "status": {
                "state": "provisioning"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "",
              "updated_at": "2018-11-15T16:00:11Z"
            },
            {
              "id": "e46e8d07-f58f-4ff1-9737-97246364400e",
              "name": "",
              "status": {
                "state": "provisioning"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "",
              "updated_at": "2018-11-15T16:00:11Z"
            }
          ],
          "labels": null,
          "taints": [],
          "max_nodes": 0,
          "min_nodes": 0,
          "auto_scale": false
        }
      ],
      "updated_at": "2018-11-15T16:00:11Z",
      "auto_upgrade": false,
      "surge_upgrade": false,
      "cluster_subnet": "10.244.0.0/16",
      "service_subnet": "10.245.0.0/16",
      "registry_enabled": false,
      "maintenance_policy": {
        "day": "any",
        "duration": "4h0m0s",
        "start_time": "00:00"
      }
    }
  },
  "properties": {
    "kubernetes_cluster": {
      "type": "object",
      "properties": {
        "ha": {
          "type": "boolean",
          "example": false
        },
        "id": {
          "type": "string",
          "example": "bd5f5959-5e1e-4205-a714-a914373942af"
        },
        "ipv4": {
          "type": "string",
          "example": ""
        },
        "name": {
          "type": "string",
          "example": "prod-cluster-01"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string",
            "example": "k8s"
          }
        },
        "region": {
          "type": "string",
          "example": "nyc1"
        },
        "status": {
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "example": "provisioning"
            },
            "message": {
              "type": "string",
              "example": "provisioning"
            }
          }
        },
        "version": {
          "type": "string",
          "example": "1.18.6-do.0"
        },
        "endpoint": {
          "type": "string",
          "example": ""
        },
        "vpc_uuid": {
          "type": "string",
          "example": "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
        },
        "created_at": {
          "type": "string",
          "example": "2018-11-15T16:00:11Z"
        },
        "node_pools": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "example": "cdda885e-7663-40c8-bc74-3a036c66545d"
              },
              "name": {
                "type": "string",
                "example": "worker-pool"
              },
              "size": {
                "type": "string",
                "example": "s-1vcpu-2gb"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string",
                  "example": "k8s"
                }
              },
              "count": {
                "type": "number",
                "example": 3
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "example": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f"
                    },
                    "name": {
                      "type": "string",
                      "example": ""
                    },
                    "status": {
                      "type": "object",
                      "properties": {
                        "state": {
                          "type": "string",
                          "example": "provisioning"
                        }
                      }
                    },
                    "created_at": {
                      "type": "string",
                      "example": "2018-11-15T16:00:11Z"
                    },
                    "droplet_id": {
                      "type": "string",
                      "example": ""
                    },
                    "updated_at": {
                      "type": "string",
                      "example": "2018-11-15T16:00:11Z"
                    }
                  }
                }
              },
              "labels": {
                "type": "string",
                "nullable": true,
                "x-konfig-null-placeholder": true
              },
              "taints": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "max_nodes": {
                "type": "number",
                "example": 0
              },
              "min_nodes": {
                "type": "number",
                "example": 0
              },
              "auto_scale": {
                "type": "boolean",
                "example": false
              }
            }
          }
        },
        "updated_at": {
          "type": "string",
          "example": "2018-11-15T16:00:11Z"
        },
        "auto_upgrade": {
          "type": "boolean",
          "example": false
        },
        "surge_upgrade": {
          "type": "boolean",
          "example": false
        },
        "cluster_subnet": {
          "type": "string",
          "example": "10.244.0.0/16"
        },
        "service_subnet": {
          "type": "string",
          "example": "10.245.0.0/16"
        },
        "registry_enabled": {
          "type": "boolean",
          "example": false
        },
        "maintenance_policy": {
          "type": "object",
          "properties": {
            "day": {
              "type": "string",
              "example": "any"
            },
            "duration": {
              "type": "string",
              "example": "4h0m0s"
            },
            "start_time": {
              "type": "string",
              "example": "00:00"
            }
          }
        }
      }
    },
    "kubernetes_clusters": {
      "type": "object",
      "properties": {
        "ha": {
          "type": "boolean",
          "example": false
        },
        "id": {
          "type": "string",
          "example": "bd5f5959-5e1e-4205-a714-a914373942af"
        },
        "ipv4": {
          "type": "string",
          "example": ""
        },
        "name": {
          "type": "string",
          "example": "prod-cluster-01"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string",
            "example": "production"
          }
        },
        "region": {
          "type": "string",
          "example": "nyc1"
        },
        "status": {
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "example": "provisioning"
            },
            "message": {
              "type": "string",
              "example": "provisioning"
            }
          }
        },
        "version": {
          "type": "string",
          "example": "1.18.6-do.0"
        },
        "endpoint": {
          "type": "string",
          "example": ""
        },
        "vpc_uuid": {
          "type": "string",
          "example": "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
        },
        "created_at": {
          "type": "string",
          "example": "2018-11-15T16:00:11Z"
        },
        "node_pools": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "example": "cdda885e-7663-40c8-bc74-3a036c66545d"
              },
              "name": {
                "type": "string",
                "example": "frontend-pool"
              },
              "size": {
                "type": "string",
                "example": "s-1vcpu-2gb"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string",
                  "example": "production"
                }
              },
              "count": {
                "type": "number",
                "example": 3
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "example": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f"
                    },
                    "name": {
                      "type": "string",
                      "example": ""
                    },
                    "status": {
                      "type": "object",
                      "properties": {
                        "state": {
                          "type": "string",
                          "example": "provisioning"
                        }
                      }
                    },
                    "created_at": {
                      "type": "string",
                      "example": "2018-11-15T16:00:11Z"
                    },
                    "droplet_id": {
                      "type": "string",
                      "example": ""
                    },
                    "updated_at": {
                      "type": "string",
                      "example": "2018-11-15T16:00:11Z"
                    }
                  }
                }
              },
              "labels": {
                "type": "object",
                "nullable": true,
                "properties": {
                  "service": {
                    "type": "string",
                    "example": "backend"
                  },
                  "priority": {
                    "type": "string",
                    "example": "high"
                  }
                }
              },
              "taints": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "max_nodes": {
                "type": "number",
                "example": 0
              },
              "min_nodes": {
                "type": "number",
                "example": 0
              },
              "auto_scale": {
                "type": "boolean",
                "example": false
              }
            }
          }
        },
        "updated_at": {
          "type": "string",
          "example": "2018-11-15T16:00:11Z"
        },
        "auto_upgrade": {
          "type": "boolean",
          "example": false
        },
        "surge_upgrade": {
          "type": "boolean",
          "example": false
        },
        "cluster_subnet": {
          "type": "string",
          "example": "10.244.0.0/16"
        },
        "service_subnet": {
          "type": "string",
          "example": "10.245.0.0/16"
        },
        "registry_enabled": {
          "type": "boolean",
          "example": false
        },
        "maintenance_policy": {
          "type": "object",
          "properties": {
            "day": {
              "type": "string",
              "example": "any"
            },
            "duration": {
              "type": "string",
              "example": "4h0m0s"
            },
            "start_time": {
              "type": "string",
              "example": "12:00"
            }
          }
        }
      }
    }
  }
}
object KubernetesGetAvailableUpgradesResponse
{
  "type": "object",
  "properties": {
    "available_upgrade_versions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/kubernetes_version"
      },
      "nullable": true
    }
  }
}
object KubernetesGetClusterInfoResponse
{
  "type": "object",
  "example": {
    "kubernetes_cluster": {
      "ha": false,
      "id": "bd5f5959-5e1e-4205-a714-a914373942afX",
      "ipv4": "68.183.121.157",
      "name": "prod-cluster-01",
      "tags": [
        "production",
        "web-team",
        "k8s",
        "k8s:bd5f5959-5e1e-4205-a714-a914373942af"
      ],
      "region": "nyc1",
      "status": {
        "state": "running"
      },
      "version": "1.18.6-do.0",
      "endpoint": "https://bd5f5959-5e1e-4205-a714-a914373942af.k8s.ondigitalocean.com",
      "vpc_uuid": "c33931f2-a26a-4e61-b85c-4e95a2ec431b",
      "created_at": "2018-11-15T16:00:11Z",
      "node_pools": [
        {
          "id": "cdda885e-7663-40c8-bc74-3a036c66545dX",
          "name": "frontend-pool",
          "size": "s-1vcpu-2gb",
          "tags": [
            "production",
            "web-team",
            "k8s",
            "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
            "k8s:worker"
          ],
          "count": 3,
          "nodes": [
            {
              "id": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8fX",
              "name": "adoring-newton-3niq",
              "status": {
                "state": "running"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "205545370",
              "updated_at": "2018-11-15T16:00:11Z"
            },
            {
              "id": "ad12e744-c2a9-473d-8aa9-be5680500eb1X",
              "name": "adoring-newton-3nim",
              "status": {
                "state": "running"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "205545371",
              "updated_at": "2018-11-15T16:00:11Z"
            },
            {
              "id": "e46e8d07-f58f-4ff1-9737-97246364400eX",
              "name": "adoring-newton-3ni7",
              "status": {
                "state": "running"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "205545372",
              "updated_at": "2018-11-15T16:00:11Z"
            }
          ],
          "labels": null,
          "taints": [],
          "max_nodes": 0,
          "min_nodes": 0,
          "auto_scale": false
        },
        {
          "id": "f49f4379-7e7f-4af5-aeb6-0354bd840778",
          "name": "backend-pool",
          "size": "g-4vcpu-16gb",
          "tags": [
            "production",
            "web-team",
            "k8s",
            "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
            "k8s:worker"
          ],
          "count": 2,
          "nodes": [
            {
              "id": "3385619f-8ec3-42ba-bb23-8d21b8ba7518",
              "name": "affectionate-nightingale-3nif",
              "status": {
                "state": "running"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "205545373",
              "updated_at": "2018-11-15T16:00:11Z"
            },
            {
              "id": "4b8f60ff-ba06-4523-a6a4-b8148244c7e6",
              "name": "affectionate-nightingale-3niy",
              "status": {
                "state": "running"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "205545374",
              "updated_at": "2018-11-15T16:00:11Z"
            }
          ],
          "labels": {
            "service": "backend",
            "priority": "high"
          },
          "taints": [],
          "max_nodes": 5,
          "min_nodes": 2,
          "auto_scale": true
        }
      ],
      "updated_at": "2018-11-15T16:00:11Z",
      "auto_upgrade": false,
      "surge_upgrade": false,
      "cluster_subnet": "10.244.0.0/16",
      "service_subnet": "10.245.0.0/16",
      "registry_enabled": false,
      "maintenance_policy": {
        "day": "any",
        "duration": "4h0m0s",
        "start_time": "00:00"
      }
    }
  },
  "properties": {
    "kubernetes_cluster": {
      "type": "object",
      "properties": {
        "ha": {
          "type": "boolean",
          "example": false
        },
        "id": {
          "type": "string",
          "example": "bd5f5959-5e1e-4205-a714-a914373942af"
        },
        "ipv4": {
          "type": "string",
          "example": "68.183.121.157"
        },
        "name": {
          "type": "string",
          "example": "prod-cluster-01"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string",
            "example": "production"
          }
        },
        "region": {
          "type": "string",
          "example": "nyc1"
        },
        "status": {
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "example": "running"
            }
          }
        },
        "version": {
          "type": "string",
          "example": "1.18.6-do.0"
        },
        "endpoint": {
          "type": "string",
          "example": "https://bd5f5959-5e1e-4205-a714-a914373942af.k8s.ondigitalocean.com"
        },
        "vpc_uuid": {
          "type": "string",
          "example": "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
        },
        "created_at": {
          "type": "string",
          "example": "2018-11-15T16:00:11Z"
        },
        "node_pools": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "example": "cdda885e-7663-40c8-bc74-3a036c66545d"
              },
              "name": {
                "type": "string",
                "example": "frontend-pool"
              },
              "size": {
                "type": "string",
                "example": "s-1vcpu-2gb"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string",
                  "example": "production"
                }
              },
              "count": {
                "type": "number",
                "example": 3
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "example": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f"
                    },
                    "name": {
                      "type": "string",
                      "example": "adoring-newton-3niq"
                    },
                    "status": {
                      "type": "object",
                      "properties": {
                        "state": {
                          "type": "string",
                          "example": "running"
                        }
                      }
                    },
                    "created_at": {
                      "type": "string",
                      "example": "2018-11-15T16:00:11Z"
                    },
                    "droplet_id": {
                      "type": "string",
                      "example": "205545370"
                    },
                    "updated_at": {
                      "type": "string",
                      "example": "2018-11-15T16:00:11Z"
                    }
                  }
                }
              },
              "labels": {
                "type": "object",
                "nullable": true,
                "properties": {
                  "service": {
                    "type": "string",
                    "example": "backend"
                  },
                  "priority": {
                    "type": "string",
                    "example": "high"
                  }
                }
              },
              "taints": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "max_nodes": {
                "type": "number",
                "example": 0
              },
              "min_nodes": {
                "type": "number",
                "example": 0
              },
              "auto_scale": {
                "type": "boolean",
                "example": false
              }
            }
          }
        },
        "updated_at": {
          "type": "string",
          "example": "2018-11-15T16:00:11Z"
        },
        "auto_upgrade": {
          "type": "boolean",
          "example": false
        },
        "surge_upgrade": {
          "type": "boolean",
          "example": false
        },
        "cluster_subnet": {
          "type": "string",
          "example": "10.244.0.0/16"
        },
        "service_subnet": {
          "type": "string",
          "example": "10.245.0.0/16"
        },
        "registry_enabled": {
          "type": "boolean",
          "example": false
        },
        "maintenance_policy": {
          "type": "object",
          "properties": {
            "day": {
              "type": "string",
              "example": "any"
            },
            "duration": {
              "type": "string",
              "example": "4h0m0s"
            },
            "start_time": {
              "type": "string",
              "example": "00:00"
            }
          }
        }
      }
    }
  }
}
object KubernetesGetNodePoolResponse
{
  "example": {
    "node_pool": {
      "id": "cdda885e-7663-40c8-bc74-3a036c66545dX",
      "name": "frontend-pool",
      "size": "s-1vcpu-2gb",
      "tags": [
        "production",
        "web-team",
        "k8s",
        "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
        "k8s:worker"
      ],
      "count": 3,
      "nodes": [
        {
          "id": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8fX",
          "name": "adoring-newton-3niq",
          "status": {
            "state": "running"
          },
          "created_at": "2018-11-15T16:00:11Z",
          "droplet_id": "205545370",
          "updated_at": "2018-11-15T16:00:11Z"
        },
        {
          "id": "ad12e744-c2a9-473d-8aa9-be5680500eb1X",
          "name": "adoring-newton-3nim",
          "status": {
            "state": "running"
          },
          "created_at": "2018-11-15T16:00:11Z",
          "droplet_id": "205545371",
          "updated_at": "2018-11-15T16:00:11Z"
        },
        {
          "id": "e46e8d07-f58f-4ff1-9737-97246364400eX",
          "name": "adoring-newton-3ni7",
          "status": {
            "state": "running"
          },
          "created_at": "2018-11-15T16:00:11Z",
          "droplet_id": "205545372",
          "updated_at": "2018-11-15T16:00:11Z"
        }
      ],
      "labels": {
        "service": "backend",
        "priority": "high"
      },
      "taints": [
        {
          "key": "priority",
          "value": "high",
          "effect": "NoSchedule"
        }
      ],
      "max_nodes": 0,
      "min_nodes": 0,
      "auto_scale": false
    }
  },
  "properties": {
    "node_pool": {
      "$ref": "#/components/schemas/kubernetes_node_pool"
    }
  }
}
object KubernetesListClustersResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "kubernetes_clusters": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/cluster"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object KubernetesListNodePoolsResponse
{
  "type": "object",
  "example": {
    "node_pools": [
      {
        "id": "cdda885e-7663-40c8-bc74-3a036c66545dX",
        "name": "frontend-pool",
        "size": "s-1vcpu-2gb",
        "tags": [
          "production",
          "web-team",
          "k8s",
          "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
          "k8s:worker"
        ],
        "count": 3,
        "nodes": [
          {
            "id": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8fX",
            "name": "adoring-newton-3niq",
            "status": {
              "state": "running"
            },
            "created_at": "2018-11-15T16:00:11Z",
            "droplet_id": "205545370",
            "updated_at": "2018-11-15T16:00:11Z"
          },
          {
            "id": "ad12e744-c2a9-473d-8aa9-be5680500eb1X",
            "name": "adoring-newton-3nim",
            "status": {
              "state": "running"
            },
            "created_at": "2018-11-15T16:00:11Z",
            "droplet_id": "205545371",
            "updated_at": "2018-11-15T16:00:11Z"
          },
          {
            "id": "e46e8d07-f58f-4ff1-9737-97246364400eX",
            "name": "adoring-newton-3ni7",
            "status": {
              "state": "running"
            },
            "created_at": "2018-11-15T16:00:11Z",
            "droplet_id": "205545372",
            "updated_at": "2018-11-15T16:00:11Z"
          }
        ],
        "labels": null,
        "max_nodes": 0,
        "min_nodes": 0,
        "auto_scale": false
      },
      {
        "id": "f49f4379-7e7f-4af5-aeb6-0354bd840778X",
        "name": "backend-pool",
        "size": "g-4vcpu-16gb",
        "tags": [
          "production",
          "web-team",
          "k8s",
          "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
          "k8s:worker"
        ],
        "count": 2,
        "nodes": [
          {
            "id": "3385619f-8ec3-42ba-bb23-8d21b8ba7518X",
            "name": "affectionate-nightingale-3nif",
            "status": {
              "state": "running"
            },
            "created_at": "2018-11-15T16:00:11Z",
            "droplet_id": "205545373",
            "updated_at": "2018-11-15T16:00:11Z"
          },
          {
            "id": "4b8f60ff-ba06-4523-a6a4-b8148244c7e6X",
            "name": "affectionate-nightingale-3niy",
            "status": {
              "state": "running"
            },
            "created_at": "2018-11-15T16:00:11Z",
            "droplet_id": "205545374",
            "updated_at": "2018-11-15T16:00:11Z"
          }
        ],
        "labels": {
          "service": "backend",
          "priority": "high"
        },
        "max_nodes": 5,
        "min_nodes": 2,
        "auto_scale": true
      }
    ]
  },
  "properties": {
    "node_pools": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cdda885e-7663-40c8-bc74-3a036c66545d"
          },
          "name": {
            "type": "string",
            "example": "frontend-pool"
          },
          "size": {
            "type": "string",
            "example": "s-1vcpu-2gb"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "example": "production"
            }
          },
          "count": {
            "type": "number",
            "example": 3
          },
          "nodes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "example": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f"
                },
                "name": {
                  "type": "string",
                  "example": "adoring-newton-3niq"
                },
                "status": {
                  "type": "object",
                  "properties": {
                    "state": {
                      "type": "string",
                      "example": "running"
                    }
                  }
                },
                "created_at": {
                  "type": "string",
                  "example": "2018-11-15T16:00:11Z"
                },
                "droplet_id": {
                  "type": "string",
                  "example": "205545370"
                },
                "updated_at": {
                  "type": "string",
                  "example": "2018-11-15T16:00:11Z"
                }
              }
            }
          },
          "labels": {
            "type": "object",
            "nullable": true,
            "properties": {
              "service": {
                "type": "string",
                "example": "backend"
              },
              "priority": {
                "type": "string",
                "example": "high"
              }
            }
          },
          "max_nodes": {
            "type": "number",
            "example": 0
          },
          "min_nodes": {
            "type": "number",
            "example": 0
          },
          "auto_scale": {
            "type": "boolean",
            "example": false
          }
        }
      }
    }
  }
}
object KubernetesRecycleNodePoolRequest
{
  "properties": {
    "nodes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "d8db5e1a-6103-43b5-a7b3-8a948210a9fc"
      ]
    }
  }
}
object KubernetesRunClusterlintChecksResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object KubernetesUpdateClusterResponse
{
  "type": "object",
  "example": {
    "kubernetes_cluster": {
      "ha": false,
      "id": "bd5f5959-5e1e-4205-a714-a914373942afX",
      "ipv4": "68.183.121.157",
      "name": "prod-cluster-01",
      "tags": [
        "production",
        "web-team",
        "k8s",
        "k8s:bd5f5959-5e1e-4205-a714-a914373942af"
      ],
      "region": "nyc1",
      "status": {
        "state": "running"
      },
      "version": "1.18.6-do.0",
      "endpoint": "https://bd5f5959-5e1e-4205-a714-a914373942af.k8s.ondigitalocean.com",
      "vpc_uuid": "c33931f2-a26a-4e61-b85c-4e95a2ec431b",
      "created_at": "2018-11-15T16:00:11Z",
      "node_pools": [
        {
          "id": "cdda885e-7663-40c8-bc74-3a036c66545dX",
          "name": "frontend-pool",
          "size": "s-1vcpu-2gb",
          "tags": [
            "production",
            "web-team",
            "k8s",
            "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
            "k8s:worker"
          ],
          "count": 3,
          "nodes": [
            {
              "id": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8fX",
              "name": "adoring-newton-3niq",
              "status": {
                "state": "running"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "205545370",
              "updated_at": "2018-11-15T16:00:11Z"
            },
            {
              "id": "ad12e744-c2a9-473d-8aa9-be5680500eb1X",
              "name": "adoring-newton-3nim",
              "status": {
                "state": "running"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "205545371",
              "updated_at": "2018-11-15T16:00:11Z"
            },
            {
              "id": "e46e8d07-f58f-4ff1-9737-97246364400eX",
              "name": "adoring-newton-3ni7",
              "status": {
                "state": "running"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "205545372",
              "updated_at": "2018-11-15T16:00:11Z"
            }
          ],
          "labels": null,
          "taints": [],
          "max_nodes": 0,
          "min_nodes": 0,
          "auto_scale": false
        },
        {
          "id": "f49f4379-7e7f-4af5-aeb6-0354bd840778X",
          "name": "backend-pool",
          "size": "g-4vcpu-16gb",
          "tags": [
            "production",
            "web-team",
            "k8s",
            "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
            "k8s:worker"
          ],
          "count": 2,
          "nodes": [
            {
              "id": "3385619f-8ec3-42ba-bb23-8d21b8ba7518X",
              "name": "affectionate-nightingale-3nif",
              "status": {
                "state": "running"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "205545373",
              "updated_at": "2018-11-15T16:00:11Z"
            },
            {
              "id": "4b8f60ff-ba06-4523-a6a4-b8148244c7e6X",
              "name": "affectionate-nightingale-3niy",
              "status": {
                "state": "running"
              },
              "created_at": "2018-11-15T16:00:11Z",
              "droplet_id": "205545374",
              "updated_at": "2018-11-15T16:00:11Z"
            }
          ],
          "labels": {
            "service": "backend",
            "priority": "high"
          },
          "taints": [],
          "max_nodes": 5,
          "min_nodes": 2,
          "auto_scale": true
        }
      ],
      "updated_at": "2018-11-15T16:00:11Z",
      "auto_upgrade": true,
      "surge_upgrade": true,
      "cluster_subnet": "10.244.0.0/16",
      "service_subnet": "10.245.0.0/16",
      "registry_enabled": false,
      "maintenance_policy": {
        "day": "any",
        "duration": "4h0m0s",
        "start_time": "00:00"
      }
    }
  },
  "properties": {
    "kubernetes_cluster": {
      "type": "object",
      "properties": {
        "ha": {
          "type": "boolean",
          "example": false
        },
        "id": {
          "type": "string",
          "example": "bd5f5959-5e1e-4205-a714-a914373942af"
        },
        "ipv4": {
          "type": "string",
          "example": "68.183.121.157"
        },
        "name": {
          "type": "string",
          "example": "prod-cluster-01"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string",
            "example": "production"
          }
        },
        "region": {
          "type": "string",
          "example": "nyc1"
        },
        "status": {
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "example": "running"
            }
          }
        },
        "version": {
          "type": "string",
          "example": "1.18.6-do.0"
        },
        "endpoint": {
          "type": "string",
          "example": "https://bd5f5959-5e1e-4205-a714-a914373942af.k8s.ondigitalocean.com"
        },
        "vpc_uuid": {
          "type": "string",
          "example": "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
        },
        "created_at": {
          "type": "string",
          "example": "2018-11-15T16:00:11Z"
        },
        "node_pools": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "example": "cdda885e-7663-40c8-bc74-3a036c66545d"
              },
              "name": {
                "type": "string",
                "example": "frontend-pool"
              },
              "size": {
                "type": "string",
                "example": "s-1vcpu-2gb"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string",
                  "example": "production"
                }
              },
              "count": {
                "type": "number",
                "example": 3
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "example": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f"
                    },
                    "name": {
                      "type": "string",
                      "example": "adoring-newton-3niq"
                    },
                    "status": {
                      "type": "object",
                      "properties": {
                        "state": {
                          "type": "string",
                          "example": "running"
                        }
                      }
                    },
                    "created_at": {
                      "type": "string",
                      "example": "2018-11-15T16:00:11Z"
                    },
                    "droplet_id": {
                      "type": "string",
                      "example": "205545370"
                    },
                    "updated_at": {
                      "type": "string",
                      "example": "2018-11-15T16:00:11Z"
                    }
                  }
                }
              },
              "labels": {
                "type": "object",
                "nullable": true,
                "properties": {
                  "service": {
                    "type": "string",
                    "example": "backend"
                  },
                  "priority": {
                    "type": "string",
                    "example": "high"
                  }
                }
              },
              "taints": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "max_nodes": {
                "type": "number",
                "example": 0
              },
              "min_nodes": {
                "type": "number",
                "example": 0
              },
              "auto_scale": {
                "type": "boolean",
                "example": false
              }
            }
          }
        },
        "updated_at": {
          "type": "string",
          "example": "2018-11-15T16:00:11Z"
        },
        "auto_upgrade": {
          "type": "boolean",
          "example": true
        },
        "surge_upgrade": {
          "type": "boolean",
          "example": true
        },
        "cluster_subnet": {
          "type": "string",
          "example": "10.244.0.0/16"
        },
        "service_subnet": {
          "type": "string",
          "example": "10.245.0.0/16"
        },
        "registry_enabled": {
          "type": "boolean",
          "example": false
        },
        "maintenance_policy": {
          "type": "object",
          "properties": {
            "day": {
              "type": "string",
              "example": "any"
            },
            "duration": {
              "type": "string",
              "example": "4h0m0s"
            },
            "start_time": {
              "type": "string",
              "example": "00:00"
            }
          }
        }
      }
    }
  }
}
object KubernetesUpdateNodePoolResponse
{
  "example": {
    "node_pool": {
      "id": "cdda885e-7663-40c8-bc74-3a036c66545dX",
      "name": "renamed-pool",
      "size": "s-1vcpu-2gb",
      "tags": [
        "production",
        "web-team",
        "front-end",
        "new-tag",
        "k8s",
        "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
        "k8s:worker"
      ],
      "count": 3,
      "nodes": [
        {
          "id": "478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8fX",
          "name": "adoring-newton-3niq",
          "status": {
            "state": "running"
          },
          "created_at": "2018-11-15T16:00:11Z",
          "droplet_id": "205545370",
          "updated_at": "2018-11-15T16:00:11Z"
        },
        {
          "id": "ad12e744-c2a9-473d-8aa9-be5680500eb1X",
          "name": "adoring-newton-3nim",
          "status": {
            "state": "running"
          },
          "created_at": "2018-11-15T16:00:11Z",
          "droplet_id": "205545371",
          "updated_at": "2018-11-15T16:00:11Z"
        },
        {
          "id": "e46e8d07-f58f-4ff1-9737-97246364400eX",
          "name": "adoring-newton-3ni7",
          "status": {
            "state": "running"
          },
          "created_at": "2018-11-15T16:00:11Z",
          "droplet_id": "205545372",
          "updated_at": "2018-11-15T16:00:11Z"
        }
      ],
      "labels": null,
      "taints": [],
      "max_nodes": 6,
      "min_nodes": 3,
      "auto_scale": true
    }
  },
  "properties": {
    "node_pool": {
      "$ref": "#/components/schemas/kubernetes_node_pool"
    }
  }
}
object KubernetesUpgradeClusterRequest
{
  "properties": {
    "version": {
      "type": "string",
      "example": "1.16.13-do.0",
      "description": "The slug identifier for the version of Kubernetes that the cluster will be upgraded to."
    }
  }
}
object LoadBalancersAddForwardingRulesRequest
{
  "required": [
    "forwarding_rules"
  ],
  "properties": {
    "forwarding_rules": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/forwarding_rule"
      },
      "minItems": 1
    }
  }
}
object LoadBalancersAssignDropletsRequest
{
  "required": [
    "droplet_ids"
  ],
  "properties": {
    "droplet_ids": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "example": [
        3164444,
        3164445
      ],
      "description": "An array containing the IDs of the Droplets assigned to the load balancer."
    }
  }
}
object LoadBalancersCreateResponse
{
  "type": "object",
  "example": {
    "load_balancer": {
      "id": "4de7ac8b-495b-4884-9a69-1050c6793cd6X",
      "ip": "104.131.186.241",
      "tag": "",
      "name": "example-lb-01",
      "size": "lb-small",
      "region": {
        "name": "New York 3",
        "slug": "nyc3",
        "sizes": [
          "s-1vcpu-1gb",
          "s-1vcpu-2gb",
          "s-1vcpu-3gb",
          "s-2vcpu-2gb",
          "s-3vcpu-1gb",
          "s-2vcpu-4gb",
          "s-4vcpu-8gb",
          "s-6vcpu-16gb",
          "s-8vcpu-32gb",
          "s-12vcpu-48gb",
          "s-16vcpu-64gb",
          "s-20vcpu-96gb",
          "s-24vcpu-128gb",
          "s-32vcpu-192gb"
        ],
        "features": [
          "private_networking",
          "backups",
          "ipv6",
          "metadata",
          "install_agent"
        ],
        "available": true
      },
      "status": "new",
      "firewall": {
        "deny": [
          "cidr:1.2.0.0/16",
          "ip:2.3.4.5"
        ],
        "allow": [
          "ip:1.2.3.4",
          "cidr:2.3.4.0/24"
        ]
      },
      "vpc_uuid": "c33931f2-a26a-4e61-b85c-4e95a2ec431b",
      "algorithm": "round_robin",
      "created_at": "2017-02-01T22:22:58Z",
      "project_id": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30",
      "droplet_ids": [
        3164444,
        3164445
      ],
      "health_check": {
        "path": "/",
        "port": 80,
        "protocol": "http",
        "healthy_threshold": 5,
        "unhealthy_threshold": 3,
        "check_interval_seconds": 10,
        "response_timeout_seconds": 5
      },
      "sticky_sessions": {
        "type": "none"
      },
      "forwarding_rules": [
        {
          "entry_port": 80,
          "target_port": 80,
          "certificate_id": "",
          "entry_protocol": "http",
          "target_protocol": "http",
          "tls_passthrough": false
        },
        {
          "entry_port": 443,
          "target_port": 443,
          "certificate_id": "",
          "entry_protocol": "https",
          "target_protocol": "https",
          "tls_passthrough": true
        }
      ],
      "enable_proxy_protocol": false,
      "redirect_http_to_https": false,
      "enable_backend_keepalive": false,
      "http_idle_timeout_seconds": 60,
      "disable_lets_encrypt_dns_records": false
    }
  },
  "properties": {
    "load_balancer": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "example": "4de7ac8b-495b-4884-9a69-1050c6793cd6"
        },
        "ip": {
          "type": "string",
          "example": "104.131.186.241"
        },
        "tag": {
          "type": "string",
          "example": ""
        },
        "name": {
          "type": "string",
          "example": "example-lb-01"
        },
        "size": {
          "type": "string",
          "example": "lb-small"
        },
        "region": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "example": "New York 3"
            },
            "slug": {
              "type": "string",
              "example": "nyc3"
            },
            "sizes": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "s-1vcpu-1gb"
              }
            },
            "features": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "private_networking"
              }
            },
            "available": {
              "type": "boolean",
              "example": true
            }
          }
        },
        "status": {
          "type": "string",
          "example": "new"
        },
        "firewall": {
          "type": "object",
          "properties": {
            "deny": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "cidr:1.2.0.0/16"
              }
            },
            "allow": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "ip:1.2.3.4"
              }
            }
          }
        },
        "vpc_uuid": {
          "type": "string",
          "example": "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
        },
        "algorithm": {
          "type": "string",
          "example": "round_robin"
        },
        "created_at": {
          "type": "string",
          "example": "2017-02-01T22:22:58Z"
        },
        "project_id": {
          "type": "string",
          "example": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30"
        },
        "droplet_ids": {
          "type": "array",
          "items": {
            "type": "number",
            "example": 3164444
          }
        },
        "health_check": {
          "type": "object",
          "properties": {
            "path": {
              "type": "string",
              "example": "/"
            },
            "port": {
              "type": "number",
              "example": 80
            },
            "protocol": {
              "type": "string",
              "example": "http"
            },
            "healthy_threshold": {
              "type": "number",
              "example": 5
            },
            "unhealthy_threshold": {
              "type": "number",
              "example": 3
            },
            "check_interval_seconds": {
              "type": "number",
              "example": 10
            },
            "response_timeout_seconds": {
              "type": "number",
              "example": 5
            }
          }
        },
        "sticky_sessions": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "example": "none"
            },
            "cookie_name": {
              "type": "string",
              "example": "LB_COOKIE"
            },
            "cookie_ttl_seconds": {
              "type": "number",
              "example": 300
            }
          }
        },
        "forwarding_rules": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entry_port": {
                "type": "number",
                "example": 80
              },
              "target_port": {
                "type": "number",
                "example": 80
              },
              "certificate_id": {
                "type": "string",
                "example": ""
              },
              "entry_protocol": {
                "type": "string",
                "example": "http"
              },
              "target_protocol": {
                "type": "string",
                "example": "http"
              },
              "tls_passthrough": {
                "type": "boolean",
                "example": false
              }
            }
          }
        },
        "enable_proxy_protocol": {
          "type": "boolean",
          "example": false
        },
        "redirect_http_to_https": {
          "type": "boolean",
          "example": false
        },
        "enable_backend_keepalive": {
          "type": "boolean",
          "example": false
        },
        "http_idle_timeout_seconds": {
          "type": "number",
          "example": 60
        },
        "disable_lets_encrypt_dns_records": {
          "type": "boolean",
          "example": false
        }
      }
    }
  }
}
object LoadBalancersGetResponse
{
  "type": "object",
  "example": {
    "load_balancer": {
      "id": "4de7ac8b-495b-4884-9a69-1050c6793cd6X",
      "ip": "104.131.186.241",
      "tag": "",
      "name": "example-lb-01",
      "size": "lb-small",
      "region": {
        "name": "New York 3",
        "slug": "nyc3",
        "sizes": [
          "s-1vcpu-1gb",
          "s-1vcpu-2gb",
          "s-1vcpu-3gb",
          "s-2vcpu-2gb",
          "s-3vcpu-1gb",
          "s-2vcpu-4gb",
          "s-4vcpu-8gb",
          "s-6vcpu-16gb",
          "s-8vcpu-32gb",
          "s-12vcpu-48gb",
          "s-16vcpu-64gb",
          "s-20vcpu-96gb",
          "s-24vcpu-128gb",
          "s-32vcpu-192gb"
        ],
        "features": [
          "private_networking",
          "backups",
          "ipv6",
          "metadata",
          "install_agent"
        ],
        "available": true
      },
      "status": "new",
      "firewall": {
        "deny": [
          "cidr:1.2.0.0/16",
          "ip:2.3.4.5"
        ],
        "allow": [
          "ip:1.2.3.4",
          "cidr:2.3.4.0/24"
        ]
      },
      "vpc_uuid": "c33931f2-a26a-4e61-b85c-4e95a2ec431b",
      "algorithm": "round_robin",
      "created_at": "2017-02-01T22:22:58Z",
      "project_id": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30",
      "droplet_ids": [
        3164444,
        3164445
      ],
      "health_check": {
        "path": "/",
        "port": 80,
        "protocol": "http",
        "healthy_threshold": 5,
        "unhealthy_threshold": 3,
        "check_interval_seconds": 10,
        "response_timeout_seconds": 5
      },
      "sticky_sessions": {
        "type": "none"
      },
      "forwarding_rules": [
        {
          "entry_port": 80,
          "target_port": 80,
          "certificate_id": "",
          "entry_protocol": "http",
          "target_protocol": "http",
          "tls_passthrough": false
        },
        {
          "entry_port": 443,
          "target_port": 443,
          "certificate_id": "",
          "entry_protocol": "https",
          "target_protocol": "https",
          "tls_passthrough": true
        }
      ],
      "enable_proxy_protocol": false,
      "redirect_http_to_https": false,
      "enable_backend_keepalive": false,
      "http_idle_timeout_seconds": 60,
      "disable_lets_encrypt_dns_records": false
    }
  },
  "properties": {
    "load_balancer": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "example": "4de7ac8b-495b-4884-9a69-1050c6793cd6"
        },
        "ip": {
          "type": "string",
          "example": "104.131.186.241"
        },
        "tag": {
          "type": "string",
          "example": ""
        },
        "name": {
          "type": "string",
          "example": "example-lb-01"
        },
        "size": {
          "type": "string",
          "example": "lb-small"
        },
        "region": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "example": "New York 3"
            },
            "slug": {
              "type": "string",
              "example": "nyc3"
            },
            "sizes": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "s-1vcpu-1gb"
              }
            },
            "features": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "private_networking"
              }
            },
            "available": {
              "type": "boolean",
              "example": true
            }
          }
        },
        "status": {
          "type": "string",
          "example": "new"
        },
        "firewall": {
          "type": "object",
          "properties": {
            "deny": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "cidr:1.2.0.0/16"
              }
            },
            "allow": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "ip:1.2.3.4"
              }
            }
          }
        },
        "vpc_uuid": {
          "type": "string",
          "example": "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
        },
        "algorithm": {
          "type": "string",
          "example": "round_robin"
        },
        "created_at": {
          "type": "string",
          "example": "2017-02-01T22:22:58Z"
        },
        "project_id": {
          "type": "string",
          "example": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30"
        },
        "droplet_ids": {
          "type": "array",
          "items": {
            "type": "number",
            "example": 3164444
          }
        },
        "health_check": {
          "type": "object",
          "properties": {
            "path": {
              "type": "string",
              "example": "/"
            },
            "port": {
              "type": "number",
              "example": 80
            },
            "protocol": {
              "type": "string",
              "example": "http"
            },
            "healthy_threshold": {
              "type": "number",
              "example": 5
            },
            "unhealthy_threshold": {
              "type": "number",
              "example": 3
            },
            "check_interval_seconds": {
              "type": "number",
              "example": 10
            },
            "response_timeout_seconds": {
              "type": "number",
              "example": 5
            }
          }
        },
        "sticky_sessions": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "example": "none"
            }
          }
        },
        "forwarding_rules": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entry_port": {
                "type": "number",
                "example": 80
              },
              "target_port": {
                "type": "number",
                "example": 80
              },
              "certificate_id": {
                "type": "string",
                "example": ""
              },
              "entry_protocol": {
                "type": "string",
                "example": "http"
              },
              "target_protocol": {
                "type": "string",
                "example": "http"
              },
              "tls_passthrough": {
                "type": "boolean",
                "example": false
              }
            }
          }
        },
        "enable_proxy_protocol": {
          "type": "boolean",
          "example": false
        },
        "redirect_http_to_https": {
          "type": "boolean",
          "example": false
        },
        "enable_backend_keepalive": {
          "type": "boolean",
          "example": false
        },
        "http_idle_timeout_seconds": {
          "type": "number",
          "example": 60
        },
        "disable_lets_encrypt_dns_records": {
          "type": "boolean",
          "example": false
        }
      }
    }
  }
}
object LoadBalancersListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "load_balancers": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/load_balancer"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object LoadBalancersRemoveDropletsRequest
{
  "required": [
    "droplet_ids"
  ],
  "properties": {
    "droplet_ids": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "example": [
        3164444,
        3164445
      ],
      "description": "An array containing the IDs of the Droplets assigned to the load balancer."
    }
  }
}
object LoadBalancersRemoveForwardingRulesRequest
{
  "required": [
    "forwarding_rules"
  ],
  "properties": {
    "forwarding_rules": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/forwarding_rule"
      },
      "minItems": 1
    }
  }
}
object LoadBalancersUpdateResponse
{
  "type": "object",
  "example": {
    "load_balancer": {
      "id": "4de7ac8b-495b-4884-9a69-1050c6793cd6X",
      "ip": "104.131.186.241",
      "tag": "",
      "name": "updated-example-lb-01",
      "size": "lb-small",
      "region": {
        "name": "New York 3",
        "slug": "nyc3",
        "sizes": [
          "s-1vcpu-1gb",
          "s-1vcpu-2gb",
          "s-1vcpu-3gb",
          "s-2vcpu-2gb",
          "s-3vcpu-1gb",
          "s-2vcpu-4gb",
          "s-4vcpu-8gb",
          "s-6vcpu-16gb",
          "s-8vcpu-32gb",
          "s-12vcpu-48gb",
          "s-16vcpu-64gb",
          "s-20vcpu-96gb",
          "s-24vcpu-128gb",
          "s-32vcpu-192gb"
        ],
        "features": [
          "private_networking",
          "backups",
          "ipv6",
          "metadata",
          "install_agent"
        ],
        "available": true
      },
      "status": "new",
      "firewall": {
        "deny": [
          "cidr:1.2.0.0/16",
          "ip:2.3.4.5"
        ],
        "allow": [
          "ip:1.2.3.4",
          "cidr:2.3.4.0/24"
        ]
      },
      "vpc_uuid": "c33931f2-a26a-4e61-b85c-4e95a2ec431b",
      "algorithm": "round_robin",
      "created_at": "2017-02-01T22:22:58Z",
      "project_id": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30",
      "droplet_ids": [
        3164444,
        3164445
      ],
      "health_check": {
        "path": "/",
        "port": 80,
        "protocol": "http",
        "healthy_threshold": 5,
        "unhealthy_threshold": 3,
        "check_interval_seconds": 10,
        "response_timeout_seconds": 5
      },
      "sticky_sessions": {
        "type": "none"
      },
      "forwarding_rules": [
        {
          "entry_port": 80,
          "target_port": 80,
          "certificate_id": "",
          "entry_protocol": "http",
          "target_protocol": "http",
          "tls_passthrough": false
        },
        {
          "entry_port": 443,
          "target_port": 443,
          "certificate_id": "",
          "entry_protocol": "https",
          "target_protocol": "https",
          "tls_passthrough": true
        }
      ],
      "enable_proxy_protocol": true,
      "redirect_http_to_https": false,
      "enable_backend_keepalive": true,
      "http_idle_timeout_seconds": 60,
      "disable_lets_encrypt_dns_records": false
    }
  },
  "properties": {
    "load_balancer": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "example": "4de7ac8b-495b-4884-9a69-1050c6793cd6"
        },
        "ip": {
          "type": "string",
          "example": "104.131.186.241"
        },
        "tag": {
          "type": "string",
          "example": ""
        },
        "name": {
          "type": "string",
          "example": "updated-example-lb-01"
        },
        "size": {
          "type": "string",
          "example": "lb-small"
        },
        "region": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "example": "New York 3"
            },
            "slug": {
              "type": "string",
              "example": "nyc3"
            },
            "sizes": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "s-1vcpu-1gb"
              }
            },
            "features": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "private_networking"
              }
            },
            "available": {
              "type": "boolean",
              "example": true
            }
          }
        },
        "status": {
          "type": "string",
          "example": "new"
        },
        "firewall": {
          "type": "object",
          "properties": {
            "deny": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "cidr:1.2.0.0/16"
              }
            },
            "allow": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "ip:1.2.3.4"
              }
            }
          }
        },
        "vpc_uuid": {
          "type": "string",
          "example": "c33931f2-a26a-4e61-b85c-4e95a2ec431b"
        },
        "algorithm": {
          "type": "string",
          "example": "round_robin"
        },
        "created_at": {
          "type": "string",
          "example": "2017-02-01T22:22:58Z"
        },
        "project_id": {
          "type": "string",
          "example": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30"
        },
        "droplet_ids": {
          "type": "array",
          "items": {
            "type": "number",
            "example": 3164444
          }
        },
        "health_check": {
          "type": "object",
          "properties": {
            "path": {
              "type": "string",
              "example": "/"
            },
            "port": {
              "type": "number",
              "example": 80
            },
            "protocol": {
              "type": "string",
              "example": "http"
            },
            "healthy_threshold": {
              "type": "number",
              "example": 5
            },
            "unhealthy_threshold": {
              "type": "number",
              "example": 3
            },
            "check_interval_seconds": {
              "type": "number",
              "example": 10
            },
            "response_timeout_seconds": {
              "type": "number",
              "example": 5
            }
          }
        },
        "sticky_sessions": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "example": "none"
            }
          }
        },
        "forwarding_rules": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entry_port": {
                "type": "number",
                "example": 80
              },
              "target_port": {
                "type": "number",
                "example": 80
              },
              "certificate_id": {
                "type": "string",
                "example": ""
              },
              "entry_protocol": {
                "type": "string",
                "example": "http"
              },
              "target_protocol": {
                "type": "string",
                "example": "http"
              },
              "tls_passthrough": {
                "type": "boolean",
                "example": false
              }
            }
          }
        },
        "enable_proxy_protocol": {
          "type": "boolean",
          "example": true
        },
        "redirect_http_to_https": {
          "type": "boolean",
          "example": false
        },
        "enable_backend_keepalive": {
          "type": "boolean",
          "example": true
        },
        "http_idle_timeout_seconds": {
          "type": "number",
          "example": 60
        },
        "disable_lets_encrypt_dns_records": {
          "type": "boolean",
          "example": false
        }
      }
    }
  }
}
object MonitoringCreateAlertPolicyResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object MonitoringListAlertPoliciesResponse
{
  "allOf": [
    {
      "$ref": "#/components/schemas/list_alert_policy"
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 50
    },
    "links": {
      "last": "https//api.digitalocean.com/v2/monitoring/alerts?page=5&per_page=10",
      "next": "https//api.digitalocean.com/v2/monitoring/alerts?page=4&per_page=10",
      "prev": "https//api.digitalocean.com/v2/monitoring/alerts?page=2&per_page=10",
      "first": "https//api.digitalocean.com/v2/monitoring/alerts?page=1&per_page=10"
    },
    "policies": [
      {
        "tags": [
          "production_droplets"
        ],
        "type": "v1/insights/droplet/cpu",
        "uuid": "78b3da62-27e5-49ba-ac70-5db0b5935c64",
        "value": 80,
        "alerts": {
          "email": [
            "bob@example.com"
          ],
          "slack": [
            {
              "url": "https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ\"",
              "channel": "Production Alerts"
            }
          ]
        },
        "window": "5m",
        "compare": "GreaterThan",
        "enabled": true,
        "entities": [
          192018292
        ],
        "description": "CPU Alert"
      }
    ]
  }
}
object OneClicksListResponse
{
  "type": "object",
  "example": {
    "1_clicks": [
      {
        "slug": "monitoring",
        "type": "kubernetes"
      },
      {
        "slug": "wordpress-18-04",
        "type": "droplet"
      }
    ]
  },
  "properties": {
    "1_clicks": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "example": "monitoring"
          },
          "type": {
            "type": "string",
            "example": "kubernetes"
          }
        }
      }
    }
  }
}
object ProjectResourcesAssignToProjectResponse
{
  "type": "object",
  "example": {
    "resources": [
      {
        "urn": "do:droplet:13457723",
        "links": {
          "self": "https://api.digitalocean.com/v2/droplets/13457723"
        },
        "status": "ok",
        "assigned_at": "2018-09-28T19:26:37Z"
      },
      {
        "urn": "do:domain:example.com",
        "links": {
          "self": "https://api.digitalocean.com/v2/domains/example.com"
        },
        "status": "ok",
        "assigned_at": "2019-03-31T16:24:14Z"
      }
    ]
  },
  "properties": {
    "resources": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/resource"
      }
    }
  }
}
object ProjectResourcesListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "resources": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/resource"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 2
    },
    "links": {
      "pages": {
        "last": "https://api.digitalocean.com/v2/projects/4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679/resources?page=1",
        "first": "https://api.digitalocean.com/v2/projects/4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679/resources?page=1"
      }
    },
    "resources": [
      {
        "urn": "do:droplet:13457723",
        "links": {
          "self": "https://api.digitalocean.com/v2/droplets/13457723"
        },
        "status": "ok",
        "assigned_at": "2018-09-28T19:26:37Z"
      },
      {
        "urn": "do:domain:example.com",
        "links": {
          "self": "https://api.digitalocean.com/v2/domains/example.com"
        },
        "status": "ok",
        "assigned_at": "2019-03-31T16:24:14Z"
      }
    ]
  }
}
object ProjectsCreateResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object ProjectsGetDefaultProjectResponse
{
  "example": {
    "project": {
      "id": "addb4547-6bab-419a-8542-76263a033cf6X",
      "name": "Default",
      "purpose": "Just trying out DigitalOcean",
      "owner_id": 258992,
      "created_at": "2017-10-19T21:44:20Z",
      "is_default": true,
      "owner_uuid": "99525febec065ca37b2ffe4f852fd2b2581895e7",
      "updated_at": "2019-11-05T18:50:03Z",
      "description": "Default project",
      "environment": "Development"
    }
  },
  "properties": {
    "project": {
      "$ref": "#/components/schemas/project"
    }
  }
}
object ProjectsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "projects": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/project"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 2
    },
    "links": {
      "pages": {
        "last": "https://api.digitalocean.com/v2/projects?page=1",
        "first": "https://api.digitalocean.com/v2/projects?page=1"
      }
    },
    "projects": [
      {
        "id": "4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679",
        "name": "my-web-api",
        "purpose": "Service or API",
        "owner_id": 258992,
        "created_at": "2018-09-27T20:10:35Z",
        "is_default": false,
        "owner_uuid": "99525febec065ca37b2ffe4f852fd2b2581895e7",
        "updated_at": "2018-09-27T20:10:35Z",
        "description": "My website API",
        "environment": "Production"
      },
      {
        "id": "addb4547-6bab-419a-8542-76263a033cf6",
        "name": "Default",
        "purpose": "Just trying out DigitalOcean",
        "owner_id": 258992,
        "created_at": "2017-10-19T21:44:20Z",
        "is_default": true,
        "owner_uuid": "99525febec065ca37b2ffe4f852fd2b2581895e7",
        "updated_at": "2019-11-05T18:50:03Z",
        "description": "Default project",
        "environment": "Development"
      }
    ]
  }
}
object RegionsListResponse
{
  "allOf": [
    {
      "type": "object",
      "required": [
        "regions"
      ],
      "properties": {
        "regions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/region"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 13
    },
    "links": {
      "pages": {
        "last": "https://api.digitalocean.com/v2/regions?page=13&per_page=1",
        "next": "https://api.digitalocean.com/v2/regions?page=2&per_page=1"
      }
    },
    "regions": [
      {
        "name": "New York 3",
        "slug": "nyc3",
        "sizes": [
          "s-1vcpu-1gb",
          "s-1vcpu-2gb",
          "s-1vcpu-3gb",
          "s-2vcpu-2gb",
          "s-3vcpu-1gb",
          "s-2vcpu-4gb",
          "s-4vcpu-8gb",
          "s-6vcpu-16gb",
          "s-8vcpu-32gb",
          "s-12vcpu-48gb",
          "s-16vcpu-64gb",
          "s-20vcpu-96gb",
          "s-24vcpu-128gb",
          "s-32vcpu-192g"
        ],
        "features": [
          "private_networking",
          "backups",
          "ipv6",
          "metadata",
          "install_agent",
          "storage",
          "image_transfer"
        ],
        "available": true
      }
    ]
  }
}
object RegistryGetResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object ReservedIPsActionsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "actions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/action"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "links": {},
    "actions": [
      {
        "id": 72531856,
        "type": "reserve_ip",
        "region": {
          "name": "New York 3",
          "slug": "nyc3",
          "sizes": [
            "s-1vcpu-1gb",
            "s-1vcpu-2gb",
            "s-1vcpu-3gb",
            "s-2vcpu-2gb",
            "s-3vcpu-1gb",
            "s-2vcpu-4gb",
            "s-4vcpu-8gb",
            "s-6vcpu-16gb",
            "s-8vcpu-32gb",
            "s-12vcpu-48gb",
            "s-16vcpu-64gb",
            "s-20vcpu-96gb",
            "s-24vcpu-128gb",
            "s-32vcpu-192gb"
          ],
          "features": [
            "private_networking",
            "backups",
            "ipv6",
            "metadata"
          ],
          "available": true
        },
        "status": "completed",
        "started_at": "2015-11-21T21:51:09Z",
        "region_slug": "nyc3",
        "resource_id": 758604197,
        "completed_at": "2015-11-21T21:51:09Z",
        "resource_type": "reserved_ip"
      }
    ]
  }
}
object ReservedIPsActionsPostRequest
{
  "anyOf": [
    {
      "$ref": "#/components/schemas/reserved_ip_action_unassign"
    },
    {
      "$ref": "#/components/schemas/reserved_ip_action_assign"
    }
  ],
  "discriminator": {
    "mapping": {
      "assign": "#/components/schemas/reserved_ip_action_assign",
      "unassign": "#/components/schemas/reserved_ip_action_unassign"
    },
    "propertyName": "type"
  }
}
object ReservedIPsActionsPostResponse
{
  "example": {
    "action": {
      "id": 72531856,
      "type": "assign_ip",
      "region": {
        "name": "New York 3",
        "slug": "nyc3",
        "sizes": [
          "s-1vcpu-1gb",
          "s-1vcpu-2gb",
          "s-1vcpu-3gb",
          "s-2vcpu-2gb",
          "s-3vcpu-1gb",
          "s-2vcpu-4gb",
          "s-4vcpu-8gb",
          "s-6vcpu-16gb",
          "s-8vcpu-32gb",
          "s-12vcpu-48gb",
          "s-16vcpu-64gb",
          "s-20vcpu-96gb",
          "s-24vcpu-128gb",
          "s-32vcpu-192gb"
        ],
        "features": [
          "private_networking",
          "backups",
          "ipv6",
          "metadata"
        ],
        "available": true
      },
      "status": "completed",
      "project_id": "746c6152-2fa2-11ed-92d3-27aaa54e4988",
      "started_at": "2015-11-12T17:51:03Z",
      "region_slug": "nyc3",
      "resource_id": 758604968,
      "completed_at": "2015-11-12T17:51:14Z",
      "resource_type": "reserved_ip"
    }
  },
  "properties": {
    "action": {
      "allOf": [
        {
          "$ref": "#/components/schemas/action"
        },
        {
          "type": "object",
          "properties": {
            "project_id": {
              "type": "string",
              "format": "uuid",
              "example": "746c6152-2fa2-11ed-92d3-27aaa54e4988",
              "description": "The UUID of the project to which the reserved IP currently belongs."
            }
          }
        }
      ]
    }
  }
}
object ReservedIPsCreateResponse
{
  "type": "object",
  "properties": {
    "links": {
      "type": "object",
      "properties": {
        "actions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/action_link"
          }
        },
        "droplets": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/action_link"
          }
        }
      }
    },
    "reserved_ip": {
      "$ref": "#/components/schemas/reserved_ip"
    }
  }
}
object ReservedIPsGetResponse
{
  "type": "object",
  "properties": {
    "reserved_ip": {
      "$ref": "#/components/schemas/reserved_ip"
    }
  }
}
object ReservedIPsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "reserved_ips": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/reserved_ip"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "links": {},
    "reserved_ips": [
      {
        "ip": "45.55.96.47",
        "locked": false,
        "region": {
          "name": "New York 3",
          "slug": "nyc3",
          "sizes": [
            "s-1vcpu-1gb",
            "s-1vcpu-2gb",
            "s-1vcpu-3gb",
            "s-2vcpu-2gb",
            "s-3vcpu-1gb",
            "s-2vcpu-4gb",
            "s-4vcpu-8gb",
            "s-6vcpu-16gb",
            "s-8vcpu-32gb",
            "s-12vcpu-48gb",
            "s-16vcpu-64gb",
            "s-20vcpu-96gb",
            "s-24vcpu-128gb",
            "s-32vcpu-192g"
          ],
          "features": [
            "private_networking",
            "backups",
            "ipv6",
            "metadata",
            "install_agent",
            "storage",
            "image_transfer"
          ],
          "available": true
        },
        "droplet": null,
        "project_id": "746c6152-2fa2-11ed-92d3-27aaa54e4988"
      }
    ]
  }
}
object SizesListResponse
{
  "allOf": [
    {
      "type": "object",
      "required": [
        "sizes"
      ],
      "properties": {
        "sizes": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/size"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 64
    },
    "links": {
      "pages": {
        "last": "https://api.digitalocean.com/v2/sizes?page=64&per_page=1",
        "next": "https://api.digitalocean.com/v2/sizes?page=2&per_page=1"
      }
    },
    "sizes": [
      {
        "disk": 25,
        "slug": "s-1vcpu-1gb",
        "vcpus": 1,
        "memory": 1024,
        "regions": [
          "ams2",
          "ams3",
          "blr1",
          "fra1",
          "lon1",
          "nyc1",
          "nyc2",
          "nyc3",
          "sfo1",
          "sfo2",
          "sfo3",
          "sgp1",
          "tor1"
        ],
        "transfer": 1,
        "available": true,
        "description": "Basic",
        "price_hourly": 0.00743999984115362,
        "price_monthly": 5
      }
    ]
  }
}
object SnapshotsGetResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object SnapshotsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "snapshots": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/snapshots"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object SshKeysCreateResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object SshKeysGetResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object SshKeysListResponse
{
  "allOf": [
    {
      "properties": {
        "ssh_keys": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/sshKeys"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "links": {},
    "ssh_keys": [
      {
        "id": 289794,
        "name": "Other Public Key",
        "public_key": "ssh-rsa ANOTHEREXAMPLEaC1yc2EAAAADAQABAAAAQQDDHr/jh2Jy4yALcK4JyWbVkPRaWmhck3IgCoeOO3z1e2dBowLh64QAM+Qb72pxekALga2oi4GvT+TlWNhzPH4V anotherexample",
        "fingerprint": "3b:16:e4:bf:8b:00:8b:b8:59:8c:a9:d3:f0:19:fa:45"
      }
    ]
  }
}
object SshKeysUpdateRequest
{
  "type": "object",
  "properties": {
    "name": {
      "$ref": "#/components/schemas/ssh_key_name"
    }
  }
}
object TagsCreateResponse
{
  "example": {
    "tag": {
      "name": "extra-awesome",
      "resources": {
        "count": 0,
        "images": {
          "count": 0
        },
        "volumes": {
          "count": 0
        },
        "droplets": {
          "count": 0
        },
        "databases": {
          "count": 0
        },
        "volume_snapshots": {
          "count": 0
        }
      }
    }
  },
  "properties": {
    "tag": {
      "$ref": "#/components/schemas/tags"
    }
  }
}
object TagsGetResponse
{
  "type": "object",
  "example": {
    "tag": {
      "tag": {
        "name": "extra-awesome",
        "resources": {
          "count": 5,
          "images": {
            "count": 1,
            "last_tagged_uri": "https://api.digitalocean.com/v2/images/7555620"
          },
          "volumes": {
            "count": 1,
            "last_tagged_uri": "https://api.digitalocean.com/v2/volumes/3d80cb72-342b-4aaa-b92e-4e4abb24a933"
          },
          "droplets": {
            "count": 1,
            "last_tagged_uri": "https://api.digitalocean.com/v2/droplets/3164444"
          },
          "databases": {
            "count": 1,
            "last_tagged_uri": "https://api.digitalocean.com/v2/databases/b92438f6-ba03-416c-b642-e9236db91976"
          },
          "last_tagged_uri": "https://api.digitalocean.com/v2/images/7555620",
          "volume_snapshots": {
            "count": 1,
            "last_tagged_uri": "https://api.digitalocean.com/v2/snapshots/1f6f46e8-6b60-11e9-be4e-0a58ac144519"
          }
        }
      }
    }
  },
  "properties": {
    "tag": {
      "$ref": "#/components/schemas/tags"
    }
  }
}
object TagsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/tags"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "tags": [
      {
        "name": "extra-awesome",
        "resources": {
          "count": 5,
          "images": {
            "count": 1,
            "last_tagged_uri": "https://api.digitalocean.com/v2/images/7555620"
          },
          "volumes": {
            "count": 1,
            "last_tagged_uri": "https://api.digitalocean.com/v2/volumes/3d80cb72-342b-4aaa-b92e-4e4abb24a933"
          },
          "droplets": {
            "count": 1,
            "last_tagged_uri": "https://api.digitalocean.com/v2/droplets/3164444"
          },
          "databases": {
            "count": 1,
            "last_tagged_uri": "https://api.digitalocean.com/v2/databases/b92438f6-ba03-416c-b642-e9236db91976"
          },
          "last_tagged_uri": "https://api.digitalocean.com/v2/images/7555620",
          "volume_snapshots": {
            "count": 1,
            "last_tagged_uri": "https://api.digitalocean.com/v2/snapshots/1f6f46e8-6b60-11e9-be4e-0a58ac144519"
          }
        }
      }
    ],
    "links": {}
  }
}
object UptimeCreateCheckResponse
{
  "type": "object",
  "properties": {
    "check": {
      "$ref": "#/components/schemas/check"
    }
  }
}
object UptimeCreateNewAlertResponse
{
  "type": "object",
  "properties": {
    "alert": {
      "$ref": "#/components/schemas/alert"
    }
  }
}
object UptimeGetCheckStateResponse
{
  "type": "object",
  "properties": {
    "state": {
      "$ref": "#/components/schemas/state"
    }
  }
}
object UptimeListAllAlertsResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "alerts": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/alert"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object UptimeListChecksResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "checks": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/check"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object VolumeActionsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "actions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/volumeAction"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "links": {},
    "actions": [
      {
        "id": 72531856,
        "type": "attach_volume",
        "region": {
          "name": "New York 1",
          "slug": "nyc1",
          "sizes": [
            "s-1vcpu-1gb",
            "s-1vcpu-2gb",
            "s-1vcpu-3gb",
            "s-2vcpu-2gb",
            "s-3vcpu-1gb",
            "s-2vcpu-4gb",
            "s-4vcpu-8gb",
            "s-6vcpu-16gb",
            "s-8vcpu-32gb",
            "s-12vcpu-48gb",
            "s-16vcpu-64gb",
            "s-20vcpu-96gb",
            "s-24vcpu-128gb",
            "s-32vcpu-192gb"
          ],
          "features": [
            "private_networking",
            "backups",
            "ipv6",
            "metadata"
          ],
          "available": true
        },
        "status": "completed",
        "started_at": "2020-11-21T21:51:09Z",
        "region_slug": "nyc1",
        "completed_at": "2020-11-21T21:51:09Z",
        "resource_type": "volume"
      }
    ]
  }
}
object VolumeActionsPostRequest
{
  "anyOf": [
    {
      "$ref": "#/components/schemas/volume_action_post_attach"
    },
    {
      "$ref": "#/components/schemas/volume_action_post_detach"
    }
  ],
  "discriminator": {
    "mapping": {
      "attach": "#/components/schemas/volume_action_post_attach",
      "detach": "#/components/schemas/volume_action_post_detach"
    },
    "propertyName": "type"
  }
}
object VolumeActionsPostResponse
{
  "type": "object",
  "example": {
    "action": {
      "id": 72531856,
      "type": "attach_volume",
      "region": {
        "name": "New York 1",
        "slug": "nyc1",
        "sizes": [
          "s-1vcpu-1gb",
          "s-1vcpu-2gb",
          "s-1vcpu-3gb",
          "s-2vcpu-2gb",
          "s-3vcpu-1gb",
          "s-2vcpu-4gb",
          "s-4vcpu-8gb",
          "s-6vcpu-16gb",
          "s-8vcpu-32gb",
          "s-12vcpu-48gb",
          "s-16vcpu-64gb",
          "s-20vcpu-96gb",
          "s-24vcpu-128gb",
          "s-32vcpu-192gb"
        ],
        "features": [
          "private_networking",
          "backups",
          "ipv6",
          "metadata"
        ],
        "available": true
      },
      "status": "completed",
      "started_at": "2020-11-12T17:51:03Z",
      "region_slug": "nyc1",
      "completed_at": "2020-11-12T17:51:14Z",
      "resource_type": "volume"
    }
  },
  "properties": {
    "action": {
      "type": "object",
      "properties": {
        "id": {
          "type": "number",
          "example": 72531856
        },
        "type": {
          "type": "string",
          "example": "attach_volume"
        },
        "region": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "example": "New York 1"
            },
            "slug": {
              "type": "string",
              "example": "nyc1"
            },
            "sizes": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "s-1vcpu-1gb"
              }
            },
            "features": {
              "type": "array",
              "items": {
                "type": "string",
                "example": "private_networking"
              }
            },
            "available": {
              "type": "boolean",
              "example": true
            }
          }
        },
        "status": {
          "type": "string",
          "example": "completed"
        },
        "started_at": {
          "type": "string",
          "example": "2020-11-12T17:51:03Z"
        },
        "region_slug": {
          "type": "string",
          "example": "nyc1"
        },
        "resource_id": {
          "type": "string",
          "nullable": true,
          "x-konfig-null-placeholder": true
        },
        "completed_at": {
          "type": "string",
          "example": "2020-11-12T17:51:14Z",
          "nullable": true
        },
        "resource_type": {
          "type": "string",
          "example": "volume"
        }
      }
    }
  }
}
object VolumeSnapshotsCreateRequest
{
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "big-data-snapshot1475261774",
      "description": "A human-readable name for the volume snapshot."
    },
    "tags": {
      "$ref": "#/components/schemas/tags_array"
    }
  }
}
object VolumeSnapshotsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "snapshots": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/snapshots"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 1
    },
    "links": {},
    "snapshots": [
      {
        "id": "8eb4d51a-873f-11e6-96bf-000f53315a41",
        "name": "big-data-snapshot1475261752",
        "tags": null,
        "regions": [
          "nyc1"
        ],
        "created_at": "2020-09-30T18:56:12Z",
        "resource_id": "82a48a18-873f-11e6-96bf-000f53315a41",
        "min_disk_size": 10,
        "resource_type": "volume",
        "size_gigabytes": 0
      }
    ]
  }
}
object VolumesCreateRequest
{
  "anyOf": [
    {
      "$ref": "#/components/schemas/volumes_ext4"
    },
    {
      "$ref": "#/components/schemas/volumes_xfs"
    }
  ]
}
object VolumesCreateResponse
{
  "example": {
    "volume": {
      "id": "506f78a4-e098-11e5-ad9f-000f53306ae1",
      "name": "example",
      "region": {
        "name": "New York 1",
        "slug": "nyc1",
        "sizes": [
          "s-1vcpu-1gb",
          "s-1vcpu-2gb",
          "s-1vcpu-3gb",
          "s-2vcpu-2gb",
          "s-3vcpu-1gb",
          "s-2vcpu-4gb",
          "s-4vcpu-8gb",
          "s-6vcpu-16gb",
          "s-8vcpu-32gb",
          "s-12vcpu-48gb",
          "s-16vcpu-64gb",
          "s-20vcpu-96gb",
          "s-24vcpu-128gb",
          "s-32vcpu-192gb"
        ],
        "features": [
          "private_networking",
          "backups",
          "ipv6",
          "metadata"
        ],
        "available": true
      },
      "created_at": "2020-03-02T17:00:49Z",
      "description": "Block store for examples",
      "droplet_ids": [],
      "size_gigabytes": 10,
      "filesystem_type": "ext4",
      "filesystem_label": "example"
    }
  },
  "properties": {
    "volume": {
      "$ref": "#/components/schemas/volume_full"
    }
  }
}
object VolumesListResponse
{
  "allOf": [
    {
      "type": "object",
      "required": [
        "volumes"
      ],
      "properties": {
        "volumes": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/volume_full"
          },
          "description": "Array of volumes."
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object VpCsListMembersResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "members": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/vpc_member"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 4
    },
    "links": {},
    "members": [
      {
        "urn": "do:loadbalancer:fb294d78-d193-4cb2-8737-ea620993591b",
        "name": "nyc1-load-balancer-01",
        "created_at": "2020-03-13T19:30:48Z"
      },
      {
        "urn": "do:dbaas:13f7a2f6-43df-4c4a-8129-8733267ddeea",
        "name": "db-postgresql-nyc1-55986",
        "created_at": "2020-03-13T19:30:18Z"
      },
      {
        "urn": "do:kubernetes:da39d893-96e1-4e4d-971d-1fdda33a46b1",
        "name": "k8s-nyc1-1584127772221",
        "created_at": "2020-03-13T19:30:16Z"
      },
      {
        "urn": "do:droplet:86e29982-03a7-4946-8a07-a0114dff8754",
        "name": "ubuntu-s-1vcpu-1gb-nyc1-01",
        "created_at": "2020-03-13T19:29:20Z"
      }
    ]
  }
}
object VpcsCreateRequest
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/vpc_updatable"
    },
    {
      "$ref": "#/components/schemas/vpc_create"
    }
  ],
  "required": [
    "name",
    "region"
  ]
}
object VpcsCreateResponse
{
  "type": "object",
  "properties": {
    "vpc": {
      "$ref": "#/components/schemas/vpc"
    }
  }
}
object VpcsListResponse
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "vpcs": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/vpc"
          }
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ],
  "example": {
    "meta": {
      "total": 3
    },
    "vpcs": [
      {
        "id": "5a4981aa-9653-4bd1-bef5-d6bff52042e4",
        "urn": "do:vpc:5a4981aa-9653-4bd1-bef5-d6bff52042e4",
        "name": "env.prod-vpc",
        "region": "nyc1",
        "default": false,
        "ip_range": "10.10.10.0/24",
        "created_at": "2020-03-13T19:20:47.442049222Z",
        "description": "VPC for production environment"
      },
      {
        "id": "e0fe0f4d-596a-465e-a902-571ce57b79fa",
        "urn": "do:vpc:e0fe0f4d-596a-465e-a902-571ce57b79fa",
        "name": "default-nyc1",
        "region": "nyc1",
        "default": true,
        "ip_range": "10.102.0.0/20",
        "created_at": "2020-03-13T19:29:20Z",
        "description": ""
      },
      {
        "id": "d455e75d-4858-4eec-8c95-da2f0a5f93a7",
        "urn": "do:vpc:d455e75d-4858-4eec-8c95-da2f0a5f93a7",
        "name": "default-nyc3",
        "region": "nyc3",
        "default": true,
        "ip_range": "10.100.0.0/20",
        "created_at": "2019-11-19T22:19:35Z",
        "description": ""
      }
    ],
    "links": {}
  }
}
object VpcsPatchRequest
{
  "allOf": [
    {
      "$ref": "#/components/schemas/vpc_updatable"
    },
    {
      "$ref": "#/components/schemas/vpc_default"
    }
  ]
}
object VpcsUpdateRequest
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/vpc_updatable"
    },
    {
      "$ref": "#/components/schemas/vpc_default"
    }
  ],
  "required": [
    "name"
  ]
}
object account
{
  "type": "object",
  "required": [
    "droplet_limit",
    "floating_ip_limit",
    "email",
    "uuid",
    "email_verified",
    "status",
    "status_message"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "Sammy the Shark",
      "description": "The display name for the current user."
    },
    "team": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "example": "My Team",
          "description": "The name for the current team."
        },
        "uuid": {
          "type": "string",
          "example": "5df3e3004a17e242b7c20ca6c9fc25b701a47ece",
          "description": "The unique universal identifier for the current team."
        }
      },
      "description": "When authorized in a team context, includes information about the current team."
    },
    "uuid": {
      "type": "string",
      "example": "b6fr89dbf6d9156cace5f3c78dc9851d957381ef",
      "description": "The unique universal identifier for the current user."
    },
    "email": {
      "type": "string",
      "example": "sammy@digitalocean.com",
      "description": "The email address used by the current user to register for DigitalOcean."
    },
    "status": {
      "enum": [
        "active",
        "warning",
        "locked"
      ],
      "type": "string",
      "default": "active",
      "example": "active",
      "description": "This value is one of \"active\", \"warning\" or \"locked\"."
    },
    "droplet_limit": {
      "type": "integer",
      "example": 25,
      "description": "The total number of Droplets current user or team may have active at one time."
    },
    "email_verified": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "If true, the user has verified their account via email. False otherwise."
    },
    "status_message": {
      "type": "string",
      "example": " ",
      "description": "A human-readable message giving more details about the status of the account."
    },
    "floating_ip_limit": {
      "type": "integer",
      "example": 5,
      "description": "The total number of Floating IPs the current user or team may have."
    }
  }
}
object action
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "example": 36804636,
      "description": "A unique numeric ID that can be used to identify and reference an action."
    },
    "type": {
      "type": "string",
      "example": "create",
      "description": "This is the type of action that the object represents. For example, this could be \"transfer\" to represent the state of an image transfer action."
    },
    "region": {
      "$ref": "#/components/schemas/region"
    },
    "status": {
      "enum": [
        "in-progress",
        "completed",
        "errored"
      ],
      "type": "string",
      "default": "in-progress",
      "example": "completed",
      "description": "The current status of the action. This can be \"in-progress\", \"completed\", or \"errored\"."
    },
    "started_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-11-14T16:29:21Z",
      "description": "A time value given in ISO8601 combined date and time format that represents when the action was initiated."
    },
    "region_slug": {
      "allOf": [
        {
          "$ref": "#/components/schemas/slug"
        },
        {
          "type": "string",
          "nullable": true
        }
      ]
    },
    "resource_id": {
      "type": "integer",
      "example": 3164444,
      "nullable": true,
      "description": "A unique identifier for the resource that the action is associated with."
    },
    "completed_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-11-14T16:30:06Z",
      "nullable": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the action was completed."
    },
    "resource_type": {
      "type": "string",
      "example": "droplet",
      "description": "The type of resource that the action is associated with."
    }
  }
}
object action_link
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "example": 7515,
      "description": "A unique numeric ID that can be used to identify and reference an action."
    },
    "rel": {
      "type": "string",
      "example": "create",
      "description": "A string specifying the type of the related action."
    },
    "href": {
      "type": "string",
      "format": "uri",
      "example": "https://api.digitalocean.com/v2/actions/7515",
      "description": "A URL that can be used to access the action."
    }
  },
  "description": "The linked actions can be used to check the status of a Droplet's create event."
}
object alert
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/alert_base"
    },
    {
      "$ref": "#/components/schemas/alert_updatable"
    }
  ]
}
object alert_base
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "5a4981aa-9653-4bd1-bef5-d6bff52042e4",
      "readOnly": true,
      "description": "A unique ID that can be used to identify and reference the alert."
    }
  }
}
object alert_policy
{
  "type": "object",
  "required": [
    "uuid",
    "type",
    "description",
    "compare",
    "value",
    "window",
    "entities",
    "tags",
    "alerts",
    "enabled"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "droplet_tag"
      ]
    },
    "type": {
      "enum": [
        "v1/insights/droplet/load_1",
        "v1/insights/droplet/load_5",
        "v1/insights/droplet/load_15",
        "v1/insights/droplet/memory_utilization_percent",
        "v1/insights/droplet/disk_utilization_percent",
        "v1/insights/droplet/cpu",
        "v1/insights/droplet/disk_read",
        "v1/insights/droplet/disk_write",
        "v1/insights/droplet/public_outbound_bandwidth",
        "v1/insights/droplet/public_inbound_bandwidth",
        "v1/insights/droplet/private_outbound_bandwidth",
        "v1/insights/droplet/private_inbound_bandwidth",
        "v1/insights/lbaas/avg_cpu_utilization_percent",
        "v1/insights/lbaas/connection_utilization_percent",
        "v1/insights/lbaas/droplet_health",
        "v1/insights/lbaas/tls_connections_per_second_utilization_percent",
        "v1/insights/lbaas/increase_in_http_error_rate_percentage_5xx",
        "v1/insights/lbaas/increase_in_http_error_rate_percentage_4xx",
        "v1/insights/lbaas/increase_in_http_error_rate_count_5xx",
        "v1/insights/lbaas/increase_in_http_error_rate_count_4xx",
        "v1/insights/lbaas/high_http_request_response_time",
        "v1/insights/lbaas/high_http_request_response_time_50p",
        "v1/insights/lbaas/high_http_request_response_time_95p",
        "v1/insights/lbaas/high_http_request_response_time_99p",
        "v1/dbaas/alerts/load_15_alerts",
        "v1/dbaas/alerts/memory_utilization_alerts",
        "v1/dbaas/alerts/disk_utilization_alerts",
        "v1/dbaas/alerts/cpu_alerts"
      ],
      "type": "string",
      "example": "v1/insights/droplet/cpu"
    },
    "uuid": {
      "type": "string",
      "example": "78b3da62-27e5-49ba-ac70-5db0b5935c64"
    },
    "value": {
      "type": "number",
      "format": "float",
      "example": 80
    },
    "alerts": {
      "$ref": "#/components/schemas/alerts"
    },
    "window": {
      "enum": [
        "5m",
        "10m",
        "30m",
        "1h"
      ],
      "type": "string",
      "example": "5m"
    },
    "compare": {
      "enum": [
        "GreaterThan",
        "LessThan"
      ],
      "type": "string",
      "example": "GreaterThan"
    },
    "enabled": {
      "type": "boolean",
      "example": true
    },
    "entities": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "192018292"
      ]
    },
    "description": {
      "type": "string",
      "example": "CPU Alert"
    }
  }
}
object alert_policy_request
{
  "type": "object",
  "required": [
    "type",
    "description",
    "compare",
    "value",
    "window",
    "entities",
    "tags",
    "alerts",
    "enabled"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "droplet_tag"
      ]
    },
    "type": {
      "enum": [
        "v1/insights/droplet/load_1",
        "v1/insights/droplet/load_5",
        "v1/insights/droplet/load_15",
        "v1/insights/droplet/memory_utilization_percent",
        "v1/insights/droplet/disk_utilization_percent",
        "v1/insights/droplet/cpu",
        "v1/insights/droplet/disk_read",
        "v1/insights/droplet/disk_write",
        "v1/insights/droplet/public_outbound_bandwidth",
        "v1/insights/droplet/public_inbound_bandwidth",
        "v1/insights/droplet/private_outbound_bandwidth",
        "v1/insights/droplet/private_inbound_bandwidth",
        "v1/insights/lbaas/avg_cpu_utilization_percent",
        "v1/insights/lbaas/connection_utilization_percent",
        "v1/insights/lbaas/droplet_health",
        "v1/insights/lbaas/tls_connections_per_second_utilization_percent",
        "v1/insights/lbaas/increase_in_http_error_rate_percentage_5xx",
        "v1/insights/lbaas/increase_in_http_error_rate_percentage_4xx",
        "v1/insights/lbaas/increase_in_http_error_rate_count_5xx",
        "v1/insights/lbaas/increase_in_http_error_rate_count_4xx",
        "v1/insights/lbaas/high_http_request_response_time",
        "v1/insights/lbaas/high_http_request_response_time_50p",
        "v1/insights/lbaas/high_http_request_response_time_95p",
        "v1/insights/lbaas/high_http_request_response_time_99p",
        "v1/dbaas/alerts/load_15_alerts",
        "v1/dbaas/alerts/memory_utilization_alerts",
        "v1/dbaas/alerts/disk_utilization_alerts",
        "v1/dbaas/alerts/cpu_alerts"
      ],
      "type": "string",
      "example": "v1/insights/droplet/cpu"
    },
    "value": {
      "type": "number",
      "format": "float",
      "example": 80
    },
    "alerts": {
      "$ref": "#/components/schemas/alerts"
    },
    "window": {
      "enum": [
        "5m",
        "10m",
        "30m",
        "1h"
      ],
      "type": "string",
      "example": "5m"
    },
    "compare": {
      "enum": [
        "GreaterThan",
        "LessThan"
      ],
      "type": "string",
      "example": "GreaterThan"
    },
    "enabled": {
      "type": "boolean",
      "example": true
    },
    "entities": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "192018292"
      ]
    },
    "description": {
      "type": "string",
      "example": "CPU Alert"
    }
  }
}
object alert_updatable
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "Landing page degraded performance",
      "description": "A human-friendly display name."
    },
    "type": {
      "enum": [
        "latency",
        "down",
        "down_global",
        "ssl_expiry"
      ],
      "type": "string",
      "example": "latency",
      "description": "The type of alert."
    },
    "period": {
      "enum": [
        "2m",
        "3m",
        "5m",
        "10m",
        "15m",
        "30m",
        "1h"
      ],
      "type": "string",
      "example": "2m",
      "description": "Period of time the threshold must be exceeded to trigger the alert."
    },
    "threshold": {
      "type": "integer",
      "example": 300,
      "description": "The threshold at which the alert will enter a trigger state. The specific threshold is dependent on the alert type."
    },
    "comparison": {
      "enum": [
        "greater_than",
        "less_than"
      ],
      "type": "string",
      "example": "greater_than",
      "description": "The comparison operator used against the alert's threshold."
    },
    "notifications": {
      "$ref": "#/components/schemas/notification"
    }
  }
}
object alerts
{
  "type": "object",
  "required": [
    "slack",
    "email"
  ],
  "properties": {
    "email": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "bob@exmaple.com"
      ],
      "description": "An email to notify on an alert trigger."
    },
    "slack": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/slack_details"
      },
      "description": "Slack integration details."
    }
  }
}
object app
{
  "type": "object",
  "required": [
    "spec"
  ],
  "properties": {
    "id": {
      "type": "string",
      "title": "The ID of the application",
      "example": "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf",
      "readOnly": true
    },
    "spec": {
      "$ref": "#/components/schemas/app_spec"
    },
    "region": {
      "$ref": "#/components/schemas/apps_region"
    },
    "domains": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_domain"
      },
      "title": "Contains all domains for the app",
      "readOnly": true
    },
    "live_url": {
      "type": "string",
      "title": "The live URL of the app",
      "example": "google.com",
      "readOnly": true
    },
    "tier_slug": {
      "type": "string",
      "title": "The current pricing tier slug of the app",
      "example": "basic",
      "readOnly": true
    },
    "created_at": {
      "type": "string",
      "title": "The creation time of the app",
      "format": "date-time",
      "example": "2020-11-19T20:27:18Z",
      "readOnly": true
    },
    "owner_uuid": {
      "type": "string",
      "title": "The ID of the account to which the application belongs",
      "example": "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf",
      "readOnly": true
    },
    "project_id": {
      "type": "string",
      "title": "The ID of the project the app is assigned to. This will be empty if there is a lookup failure.",
      "example": "88b72d1a-b78a-4d9f-9090-b53c4399073f",
      "readOnly": true
    },
    "updated_at": {
      "type": "string",
      "title": "Time of the app's last configuration update",
      "format": "date-time",
      "example": "2020-12-01T00:42:16Z",
      "readOnly": true
    },
    "live_domain": {
      "type": "string",
      "title": "The live domain of the app",
      "example": "live_domain",
      "readOnly": true
    },
    "live_url_base": {
      "type": "string",
      "title": "The live URL base of the app, the URL excluding the path",
      "example": "digitalocean.com",
      "readOnly": true
    },
    "default_ingress": {
      "type": "string",
      "title": "The default hostname on which the app is accessible",
      "example": "digitalocean.com",
      "readOnly": true
    },
    "active_deployment": {
      "$ref": "#/components/schemas/apps_deployment"
    },
    "pinned_deployment": {
      "allOf": [
        {
          "description": "The deployment that the app is pinned to."
        },
        {
          "$ref": "#/components/schemas/apps_deployment"
        }
      ]
    },
    "pending_deployment": {
      "allOf": [
        {
          "description": "The most recent pending deployment. For CreateApp and UpdateApp transactions this is guaranteed to reflect the associated deployment."
        },
        {
          "$ref": "#/components/schemas/apps_deployment"
        }
      ]
    },
    "in_progress_deployment": {
      "$ref": "#/components/schemas/apps_deployment"
    },
    "last_deployment_created_at": {
      "type": "string",
      "title": "The creation time of the last deployment",
      "format": "date-time",
      "example": "2020-11-19T20:27:18Z",
      "readOnly": true
    }
  },
  "description": "An application's configuration and status."
}
object app_alert
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "title": "The ID of the alert",
      "example": "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf",
      "readOnly": true
    },
    "spec": {
      "$ref": "#/components/schemas/app_alert_spec"
    },
    "phase": {
      "$ref": "#/components/schemas/app_alert_phase"
    },
    "emails": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_alert_email"
      },
      "title": "Emails for alerts to go to",
      "example": [
        "sammy@digitalocean.com"
      ]
    },
    "progress": {
      "$ref": "#/components/schemas/app_alert_progress"
    },
    "component_name": {
      "type": "string",
      "title": "Name of component the alert belongs to",
      "example": "backend"
    },
    "slack_webhooks": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_alert_slack_webhook"
      },
      "title": "Slack Webhooks to send alerts to"
    }
  }
}
string app_alert_email
{
  "type": "string",
  "default": "",
  "example": "sammy@digitalocean.com"
}
string app_alert_phase
{
  "enum": [
    "UNKNOWN",
    "PENDING",
    "CONFIGURING",
    "ACTIVE",
    "ERROR"
  ],
  "type": "string",
  "default": "UNKNOWN",
  "example": "ACTIVE"
}
object app_alert_progress
{
  "type": "object",
  "properties": {
    "steps": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_alert_progress_step"
      },
      "title": "Steps of an alert's progress."
    }
  }
}
object app_alert_progress_step
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "title": "The name of this step",
      "example": "example_step"
    },
    "reason": {
      "$ref": "#/components/schemas/app_alert_progress_step_reason"
    },
    "status": {
      "$ref": "#/components/schemas/app_alert_progress_step_status"
    },
    "ended_at": {
      "type": "string",
      "title": "The start time of this step",
      "format": "date-time",
      "example": "2020-11-19T20:27:18Z"
    },
    "started_at": {
      "type": "string",
      "title": "The start time of this step",
      "format": "date-time",
      "example": "2020-11-19T20:27:18Z"
    }
  }
}
object app_alert_progress_step_reason
{
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "title": "The error code",
      "example": "Title of Error"
    },
    "message": {
      "type": "string",
      "title": "The error message",
      "example": "This is an error"
    }
  }
}
string app_alert_progress_step_status
{
  "enum": [
    "UNKNOWN",
    "PENDING",
    "RUNNING",
    "ERROR",
    "SUCCESS"
  ],
  "type": "string",
  "default": "UNKNOWN",
  "example": "SUCCESS"
}
object app_alert_slack_webhook
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "title": "URL of the Slack webhook",
      "example": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
    },
    "channel": {
      "type": "string",
      "title": "Name of the Slack Webhook Channel",
      "example": "Channel Name"
    }
  }
}
object app_alert_spec
{
  "type": "object",
  "properties": {
    "rule": {
      "$ref": "#/components/schemas/app_alert_spec_rule"
    },
    "value": {
      "type": "number",
      "format": "float",
      "example": 2.32,
      "description": "Threshold value for alert"
    },
    "window": {
      "$ref": "#/components/schemas/app_alert_spec_window"
    },
    "disabled": {
      "type": "boolean",
      "example": false,
      "description": "Is the alert disabled?"
    },
    "operator": {
      "$ref": "#/components/schemas/app_alert_spec_operator"
    }
  }
}
string app_alert_spec_operator
{
  "enum": [
    "UNSPECIFIED_OPERATOR",
    "GREATER_THAN",
    "LESS_THAN"
  ],
  "type": "string",
  "default": "UNSPECIFIED_OPERATOR",
  "example": "GREATER_THAN"
}
string app_alert_spec_rule
{
  "enum": [
    "UNSPECIFIED_RULE",
    "CPU_UTILIZATION",
    "MEM_UTILIZATION",
    "RESTART_COUNT",
    "DEPLOYMENT_FAILED",
    "DEPLOYMENT_LIVE",
    "DOMAIN_FAILED",
    "DOMAIN_LIVE",
    "FUNCTIONS_ACTIVATION_COUNT",
    "FUNCTIONS_AVERAGE_DURATION_MS",
    "FUNCTIONS_ERROR_RATE_PER_MINUTE",
    "FUNCTIONS_AVERAGE_WAIT_TIME_MS",
    "FUNCTIONS_ERROR_COUNT",
    "FUNCTIONS_GB_RATE_PER_SECOND"
  ],
  "type": "string",
  "default": "UNSPECIFIED_RULE",
  "example": "CPU_UTILIZATION"
}
string app_alert_spec_window
{
  "enum": [
    "UNSPECIFIED_WINDOW",
    "FIVE_MINUTES",
    "TEN_MINUTES",
    "THIRTY_MINUTES",
    "ONE_HOUR"
  ],
  "type": "string",
  "default": "UNSPECIFIED_WINDOW",
  "example": "FIVE_MINUTES"
}
object app_component_base
{
  "type": "object",
  "properties": {
    "git": {
      "$ref": "#/components/schemas/apps_git_source_spec"
    },
    "envs": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_variable_definition"
      },
      "description": "A list of environment variables made available to the component."
    },
    "name": {
      "type": "string",
      "example": "api",
      "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$",
      "maxLength": 32,
      "minLength": 2,
      "description": "The name. Must be unique across all components within the same app."
    },
    "image": {
      "$ref": "#/components/schemas/apps_image_source_spec"
    },
    "github": {
      "$ref": "#/components/schemas/apps_github_source_spec"
    },
    "gitlab": {
      "$ref": "#/components/schemas/apps_gitlab_source_spec"
    },
    "source_dir": {
      "type": "string",
      "example": "path/to/dir",
      "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo."
    },
    "run_command": {
      "type": "string",
      "example": "bin/api",
      "description": "An optional run command to override the component's default."
    },
    "build_command": {
      "type": "string",
      "example": "npm run build",
      "description": "An optional build command to run while building this component from source."
    },
    "dockerfile_path": {
      "type": "string",
      "example": "path/to/Dockerfile",
      "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks."
    },
    "environment_slug": {
      "type": "string",
      "example": "node-js",
      "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://www.digitalocean.com/docs/app-platform/)."
    },
    "log_destinations": {
      "$ref": "#/components/schemas/app_log_destination_definition"
    }
  }
}
object app_component_instance_base
{
  "type": "object",
  "properties": {
    "autoscaling": {
      "type": "object",
      "properties": {
        "metrics": {
          "type": "object",
          "properties": {
            "cpu": {
              "type": "object",
              "properties": {
                "percent": {
                  "type": "integer",
                  "format": "uint32",
                  "default": 80,
                  "example": 75,
                  "maximum": 100,
                  "minimum": 1,
                  "description": "The average target CPU utilization for the component."
                }
              },
              "description": "Settings for scaling the component based on CPU utilization."
            }
          },
          "description": "The metrics that the component is scaled on."
        },
        "max_instance_count": {
          "type": "integer",
          "format": "uint32",
          "example": 3,
          "minimum": 1,
          "description": "The maximum amount of instances for this component. Must be more than min_instance_count."
        },
        "min_instance_count": {
          "type": "integer",
          "format": "uint32",
          "example": 2,
          "minimum": 1,
          "description": "The minimum amount of instances for this component. Must be less than max_instance_count."
        }
      },
      "description": "Configuration for automatically scaling this component based on metrics."
    },
    "instance_count": {
      "type": "integer",
      "format": "int64",
      "default": 1,
      "example": 2,
      "minimum": 1,
      "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used."
    },
    "instance_size_slug": {
      "enum": [
        "basic-xxs",
        "basic-xs",
        "basic-s",
        "basic-m",
        "professional-xs",
        "professional-s",
        "professional-m",
        "professional-1l",
        "professional-l",
        "professional-xl"
      ],
      "type": "string",
      "default": "basic-xxs",
      "example": "basic-xxs",
      "description": "The instance size to use for this component. Default: `basic-xxs`"
    }
  }
}
object app_database_spec
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "prod-db",
      "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$",
      "maxLength": 32,
      "minLength": 2,
      "description": "The name. Must be unique across all components within the same app."
    },
    "engine": {
      "enum": [
        "UNSET",
        "MYSQL",
        "PG",
        "REDIS"
      ],
      "type": "string",
      "default": "UNSET",
      "example": "PG",
      "description": "- MYSQL: MySQL\n- PG: PostgreSQL\n- REDIS: Redis"
    },
    "db_name": {
      "type": "string",
      "example": "my_db",
      "description": "The name of the MySQL or PostgreSQL database to configure."
    },
    "db_user": {
      "type": "string",
      "example": "superuser",
      "description": "The name of the MySQL or PostgreSQL user to configure."
    },
    "version": {
      "type": "string",
      "example": "12",
      "description": "The version of the database engine"
    },
    "production": {
      "type": "boolean",
      "example": true,
      "description": "Whether this is a production or dev database."
    },
    "cluster_name": {
      "type": "string",
      "example": "cluster_name",
      "description": "The name of the underlying DigitalOcean DBaaS cluster. This is required for production databases. For dev databases, if cluster_name is not set, a new cluster will be provisioned."
    }
  }
}
object app_domain_spec
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "type": {
      "enum": [
        "UNSPECIFIED",
        "DEFAULT",
        "PRIMARY",
        "ALIAS"
      ],
      "type": "string",
      "default": "UNSPECIFIED",
      "example": "DEFAULT",
      "description": "- DEFAULT: The default `.ondigitalocean.app` domain assigned to this app\n- PRIMARY: The primary domain for this app that is displayed as the default in the control panel, used in bindable environment variables, and any other places that reference an app's live URL. Only one domain may be set as primary.\n- ALIAS: A non-primary domain"
    },
    "zone": {
      "type": "string",
      "format": "hostname",
      "example": "example.com",
      "description": "Optional. If the domain uses DigitalOcean DNS and you would like App\nPlatform to automatically manage it for you, set this to the name of the\ndomain on your account.\n\nFor example, If the domain you are adding is `app.domain.com`, the zone\ncould be `domain.com`."
    },
    "domain": {
      "type": "string",
      "example": "app.example.com",
      "pattern": "^((xn--)?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\\.)+[a-zA-Z]{2,}\\.?$",
      "maxLength": 253,
      "minLength": 4,
      "description": "The hostname for the domain"
    },
    "wildcard": {
      "type": "boolean",
      "example": true,
      "description": "Indicates whether the domain includes all sub-domains, in addition to the given domain"
    },
    "minimum_tls_version": {
      "enum": [
        "1.2",
        "1.3"
      ],
      "type": "string",
      "example": "1.3",
      "maxLength": 3,
      "minLength": 3,
      "description": "The minimum version of TLS a client application can use to access resources for the domain.  Must be one of the following values wrapped within quotations: `\"1.2\"` or `\"1.3\"`."
    }
  }
}
object app_domain_validation
{
  "properties": {
    "txt_name": {
      "type": "string",
      "title": "TXT record name",
      "example": "_acme-challenge.app.example.com",
      "readOnly": true
    },
    "txt_value": {
      "type": "string",
      "title": "TXT record value",
      "example": "lXLOcN6cPv0nproViNcUHcahD9TrIPlNgdwesj0pYpk",
      "readOnly": true
    }
  }
}
object app_functions_spec
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "git": {
      "$ref": "#/components/schemas/apps_git_source_spec"
    },
    "cors": {
      "allOf": [
        {
          "$ref": "#/components/schemas/apps_cors_policy"
        },
        {
          "description": "(Deprecated - Use Ingress Rules instead)."
        },
        {
          "deprecated": true
        }
      ]
    },
    "envs": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_variable_definition"
      },
      "description": "A list of environment variables made available to the component."
    },
    "name": {
      "type": "string",
      "example": "api",
      "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$",
      "maxLength": 32,
      "minLength": 2,
      "description": "The name. Must be unique across all components within the same app."
    },
    "alerts": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_alert_spec"
      }
    },
    "github": {
      "$ref": "#/components/schemas/apps_github_source_spec"
    },
    "gitlab": {
      "$ref": "#/components/schemas/apps_gitlab_source_spec"
    },
    "routes": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_route_spec"
      },
      "deprecated": true,
      "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component."
    },
    "source_dir": {
      "type": "string",
      "example": "path/to/dir",
      "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo."
    },
    "log_destinations": {
      "$ref": "#/components/schemas/app_log_destination_definition"
    }
  }
}
object app_ingress_spec
{
  "type": "object",
  "properties": {
    "rules": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_ingress_spec_rule"
      },
      "description": "Rules for configuring HTTP ingress for component routes, CORS, rewrites, and redirects."
    }
  },
  "description": "Specification for app ingress configurations."
}
object app_ingress_spec_rule
{
  "type": "object",
  "properties": {
    "cors": {
      "$ref": "#/components/schemas/apps_cors_policy"
    },
    "match": {
      "$ref": "#/components/schemas/app_ingress_spec_rule_match"
    },
    "redirect": {
      "$ref": "#/components/schemas/app_ingress_spec_rule_routing_redirect"
    },
    "component": {
      "$ref": "#/components/schemas/app_ingress_spec_rule_routing_component"
    }
  }
}
object app_ingress_spec_rule_match
{
  "type": "object",
  "required": [
    "path"
  ],
  "properties": {
    "path": {
      "$ref": "#/components/schemas/app_ingress_spec_rule_string_match"
    }
  },
  "description": "The match configuration for the rule."
}
object app_ingress_spec_rule_routing_component
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "web",
      "description": "The name of the component to route to."
    },
    "rewrite": {
      "type": "string",
      "example": "/api/v1/",
      "description": "An optional field that will rewrite the path of the component to be what is specified here. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If you specified the rewrite to be `/v1/`, requests to `/api/list` would be rewritten to `/v1/list`. Note: this is mutually exclusive with `preserve_path_prefix`."
    },
    "preserve_path_prefix": {
      "type": "string",
      "example": "true",
      "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`. Note: this is not applicable for Functions Components and is mutually exclusive with `rewrite`."
    }
  },
  "description": "The component to route to. Only one of `component` or `redirect` may be set."
}
object app_ingress_spec_rule_routing_redirect
{
  "type": "object",
  "properties": {
    "uri": {
      "type": "string",
      "example": "/about",
      "description": "An optional URI path to redirect to. Note: if this is specified the whole URI of the original request will be overwritten to this value, irrespective of the original request URI being matched."
    },
    "port": {
      "type": "integer",
      "format": "int64",
      "example": 443,
      "description": "The port to redirect to."
    },
    "scheme": {
      "type": "string",
      "example": "https",
      "description": "The scheme to redirect to. Supported values are `http` or `https`. Default: `https`."
    },
    "authority": {
      "type": "string",
      "example": "example.com",
      "description": "The authority/host to redirect to. This can be a hostname or IP address. Note: use `port` to set the port."
    },
    "redirect_code": {
      "type": "integer",
      "format": "int64",
      "example": 302,
      "description": "The redirect code to use. Defaults to `302`. Supported values are 300, 301, 302, 303, 304, 307, 308."
    }
  },
  "description": "The redirect configuration for the rule. Only one of `component` or `redirect` may be set."
}
object app_ingress_spec_rule_string_match
{
  "type": "object",
  "required": [
    "prefix"
  ],
  "properties": {
    "prefix": {
      "type": "string",
      "example": "/api",
      "maxLength": 256,
      "description": "Prefix-based match. For example, `/api` will match `/api`, `/api/`, and any nested paths such as `/api/v1/endpoint`."
    }
  },
  "description": "The path to match on."
}
object app_job_spec
{
  "allOf": [
    {
      "$ref": "#/components/schemas/app_component_base"
    },
    {
      "$ref": "#/components/schemas/app_component_instance_base"
    },
    {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "kind": {
          "enum": [
            "UNSPECIFIED",
            "PRE_DEPLOY",
            "POST_DEPLOY",
            "FAILED_DEPLOY"
          ],
          "type": "string",
          "default": "UNSPECIFIED",
          "example": "PRE_DEPLOY",
          "description": "- UNSPECIFIED: Default job type, will auto-complete to POST_DEPLOY kind.\n- PRE_DEPLOY: Indicates a job that runs before an app deployment.\n- POST_DEPLOY: Indicates a job that runs after an app deployment.\n- FAILED_DEPLOY: Indicates a job that runs after a component fails to deploy."
        }
      }
    }
  ]
}
object app_log_destination_datadog_spec
{
  "type": "object",
  "required": [
    "api_key"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "example": "abcdefghijklmnopqrstuvwxyz0123456789",
      "description": "Datadog API key."
    },
    "endpoint": {
      "type": "string",
      "example": "https://mydatadogendpoint.com",
      "description": "Datadog HTTP log intake endpoint."
    }
  },
  "description": "DataDog configuration."
}
object app_log_destination_definition
{
  "type": "object",
  "title": "Configurations for external logging.",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "my_log_destination",
      "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$",
      "maxLength": 42,
      "minLength": 2
    },
    "datadog": {
      "$ref": "#/components/schemas/app_log_destination_datadog_spec"
    },
    "logtail": {
      "$ref": "#/components/schemas/app_log_destination_logtail_spec"
    },
    "papertrail": {
      "$ref": "#/components/schemas/app_log_destination_papertrail_spec"
    }
  }
}
object app_log_destination_logtail_spec
{
  "type": "object",
  "required": [
    "endpoint"
  ],
  "properties": {
    "token": {
      "type": "string",
      "example": "abcdefghijklmnopqrstuvwxyz0123456789",
      "description": "Logtail token."
    }
  },
  "description": "Logtail configuration."
}
object app_log_destination_papertrail_spec
{
  "type": "object",
  "required": [
    "endpoint"
  ],
  "properties": {
    "endpoint": {
      "type": "string",
      "example": "https://mypapertrailendpoint.com",
      "description": "Papertrail syslog endpoint."
    }
  },
  "description": "Papertrail configuration."
}
object app_metrics_bandwidth_usage
{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "format": "date-time",
      "example": "2023-01-17T00:00:00Z",
      "description": "The date for the metrics data."
    },
    "app_bandwidth_usage": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_metrics_bandwidth_usage_details"
      },
      "description": "A list of bandwidth usage details by app."
    }
  }
}
object app_metrics_bandwidth_usage_details
{
  "type": "object",
  "properties": {
    "app_id": {
      "type": "string",
      "example": "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf",
      "description": "The ID of the app."
    },
    "bandwidth_bytes": {
      "type": "string",
      "format": "uint64",
      "example": "513668",
      "description": "The used bandwidth amount in bytes."
    }
  },
  "description": "Bandwidth usage for an app."
}
object app_metrics_bandwidth_usage_request
{
  "type": "object",
  "required": [
    "app_ids"
  ],
  "properties": {
    "date": {
      "type": "string",
      "format": "date-time",
      "example": "2023-01-17T00:00:00Z",
      "description": "Optional day to query. Only the date component of the timestamp will be considered. Default: yesterday."
    },
    "app_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf",
        "c2a93513-8d9b-4223-9d61-5e7272c81cf5"
      ],
      "maxItems": 100,
      "description": "A list of app IDs to query bandwidth metrics for."
    }
  }
}
object app_propose
{
  "type": "object",
  "required": [
    "spec"
  ],
  "properties": {
    "spec": {
      "$ref": "#/components/schemas/app_spec"
    },
    "app_id": {
      "type": "string",
      "example": "b6bdf840-2854-4f87-a36c-5f231c617c84",
      "description": "An optional ID of an existing app. If set, the spec will be treated as a proposed update to the specified app. The existing app is not modified using this method."
    }
  }
}
object app_propose_response
{
  "type": "object",
  "properties": {
    "spec": {
      "$ref": "#/components/schemas/app_spec"
    },
    "app_cost": {
      "type": "integer",
      "format": "int32",
      "example": 5,
      "description": "The monthly cost of the proposed app in USD using the next pricing plan tier. For example, if you propose an app that uses the Basic tier, the `app_tier_upgrade_cost` field displays the monthly cost of the app if it were to use the Professional tier. If the proposed app already uses the most expensive tier, the field is empty."
    },
    "app_is_static": {
      "type": "boolean",
      "example": true,
      "description": "Indicates whether the app is a static app."
    },
    "app_name_available": {
      "type": "boolean",
      "example": true,
      "description": "Indicates whether the app name is available."
    },
    "app_name_suggestion": {
      "type": "string",
      "example": "newName",
      "description": "The suggested name if the proposed app name is unavailable."
    },
    "existing_static_apps": {
      "type": "string",
      "example": "2",
      "description": "The maximum number of free static apps the account can have. We will charge you for any additional static apps."
    },
    "app_tier_downgrade_cost": {
      "type": "integer",
      "format": "int32",
      "example": 17,
      "description": "The monthly cost of the proposed app in USD using the previous pricing plan tier. For example, if you propose an app that uses the Professional tier, the `app_tier_downgrade_cost` field displays the monthly cost of the app if it were to use the Basic tier. If the proposed app already uses the lest expensive tier, the field is empty."
    }
  }
}
object app_response
{
  "type": "object",
  "properties": {
    "app": {
      "$ref": "#/components/schemas/app"
    }
  }
}
object app_rollback_validation_condition
{
  "type": "object",
  "properties": {
    "code": {
      "enum": [
        "incompatible_phase",
        "incompatible_result",
        "exceeded_revision_limit",
        "app_pinned",
        "database_config_conflict",
        "region_conflict",
        "static_site_requires_rebuild",
        "image_source_missing_digest"
      ],
      "type": "string",
      "example": "exceeded_revision_limit",
      "description": "A code identifier that represents the failing condition.\n\nFailing conditions:\n  - `incompatible_phase` - indicates that the deployment's phase is not suitable for rollback.\n  - `incompatible_result` - indicates that the deployment's result is not suitable for rollback.\n  - `exceeded_revision_limit` - indicates that the app has exceeded the rollback revision limits for its tier.\n  - `app_pinned` - indicates that there is already a rollback in progress and the app is pinned.\n  - `database_config_conflict` - indicates that the deployment's database config is different than the current config.\n  - `region_conflict` - indicates that the deployment's region differs from the current app region.\n  \nWarning conditions:\n  - `static_site_requires_rebuild` - indicates that the deployment contains at least one static site that will require a rebuild.\n  - `image_source_missing_digest` - indicates that the deployment contains at least one component with an image source that is missing a digest.\n"
    },
    "message": {
      "type": "string",
      "example": "the deployment is past the maximum historical revision limit of 0 for the \"starter\" app tier",
      "description": "A human-readable message describing the failing condition."
    },
    "components": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "If applicable, a list of components that are failing the condition."
      },
      "example": [
        "www"
      ]
    }
  }
}
object app_route_spec
{
  "type": "object",
  "title": "A criterion for routing HTTP traffic to a component.",
  "properties": {
    "path": {
      "type": "string",
      "example": "/api",
      "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app."
    },
    "preserve_path_prefix": {
      "type": "boolean",
      "example": true,
      "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`."
    }
  }
}
object app_service_spec
{
  "allOf": [
    {
      "$ref": "#/components/schemas/app_component_base"
    },
    {
      "$ref": "#/components/schemas/app_component_instance_base"
    },
    {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "cors": {
          "allOf": [
            {
              "$ref": "#/components/schemas/apps_cors_policy"
            },
            {
              "description": "(Deprecated - Use Ingress Rules instead)."
            },
            {
              "deprecated": true
            }
          ]
        },
        "routes": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/app_route_spec"
          },
          "deprecated": true,
          "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component."
        },
        "http_port": {
          "type": "integer",
          "format": "int64",
          "example": 3000,
          "maximum": 65535,
          "minimum": 1,
          "description": "The internal port on which this service's run command will listen. Default: 8080\nIf there is not an environment variable with the name `PORT`, one will be automatically added with its value set to the value of this field."
        },
        "health_check": {
          "$ref": "#/components/schemas/app_service_spec_health_check"
        },
        "internal_ports": {
          "type": "array",
          "items": {
            "type": "integer",
            "format": "int64"
          },
          "example": [
            80,
            443
          ],
          "description": "The ports on which this service will listen for internal traffic."
        }
      }
    }
  ]
}
object app_service_spec_health_check
{
  "type": "object",
  "properties": {
    "port": {
      "type": "integer",
      "format": "int64",
      "example": 80,
      "maximum": 65535,
      "minimum": 1,
      "description": "The port on which the health check will be performed. If not set, the health check will be performed on the component's http_port."
    },
    "http_path": {
      "type": "string",
      "example": "/health",
      "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead."
    },
    "period_seconds": {
      "type": "integer",
      "format": "int32",
      "example": 60,
      "description": "The number of seconds to wait between health checks."
    },
    "timeout_seconds": {
      "type": "integer",
      "format": "int32",
      "example": 45,
      "description": "The number of seconds after which the check times out."
    },
    "failure_threshold": {
      "type": "integer",
      "format": "int32",
      "example": 2,
      "description": "The number of failed health checks before considered unhealthy."
    },
    "success_threshold": {
      "type": "integer",
      "format": "int32",
      "example": 3,
      "description": "The number of successful health checks before considered healthy."
    },
    "initial_delay_seconds": {
      "type": "integer",
      "format": "int32",
      "example": 30,
      "description": "The number of seconds to wait before beginning health checks."
    }
  }
}
object app_spec
{
  "type": "object",
  "title": "AppSpec",
  "required": [
    "name"
  ],
  "properties": {
    "jobs": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_job_spec"
      },
      "description": "Pre and post deployment workloads which do not expose publicly-accessible HTTP routes."
    },
    "name": {
      "type": "string",
      "example": "web-app-01",
      "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$",
      "maxLength": 32,
      "minLength": 2,
      "description": "The name of the app. Must be unique across all apps in the same account."
    },
    "region": {
      "enum": [
        "ams",
        "nyc",
        "fra",
        "sfo",
        "sgp",
        "blr",
        "tor",
        "lon",
        "syd"
      ],
      "type": "string",
      "example": "nyc",
      "description": "The slug form of the geographical origin of the app. Default: `nearest available`"
    },
    "domains": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_domain_spec"
      },
      "description": "A set of hostnames where the application will be available."
    },
    "ingress": {
      "$ref": "#/components/schemas/app_ingress_spec"
    },
    "workers": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_worker_spec"
      },
      "description": "Workloads which do not expose publicly-accessible HTTP services."
    },
    "services": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_service_spec"
      },
      "description": "Workloads which expose publicly-accessible HTTP services."
    },
    "databases": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_database_spec"
      },
      "description": "Database instances which can provide persistence to workloads within the\napplication."
    },
    "functions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_functions_spec"
      },
      "description": "Workloads which expose publicly-accessible HTTP services via Functions Components."
    },
    "static_sites": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_static_site_spec"
      },
      "description": "Content which can be rendered to static web assets."
    }
  },
  "description": "The desired configuration of an application."
}
object app_static_site_spec
{
  "allOf": [
    {
      "$ref": "#/components/schemas/app_component_base"
    },
    {
      "type": "object",
      "properties": {
        "cors": {
          "allOf": [
            {
              "$ref": "#/components/schemas/apps_cors_policy"
            },
            {
              "description": "(Deprecated - Use Ingress Rules instead)."
            },
            {
              "deprecated": true
            }
          ]
        },
        "routes": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/app_route_spec"
          },
          "deprecated": true,
          "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component."
        },
        "output_dir": {
          "type": "string",
          "example": "dist/",
          "description": "An optional path to where the built assets will be located, relative to the build context. If not set, App Platform will automatically scan for these directory names: `_static`, `dist`, `public`, `build`."
        },
        "error_document": {
          "type": "string",
          "default": "404.html",
          "example": "error.html",
          "description": "The name of the error document to use when serving this static site. Default: 404.html. If no such file exists within the built assets, App Platform will supply one."
        },
        "index_document": {
          "type": "string",
          "default": "index.html",
          "example": "main.html",
          "description": "The name of the index document to use when serving this static site. Default: index.html"
        },
        "catchall_document": {
          "type": "string",
          "example": "index.html",
          "description": "The name of the document to use as the fallback for any requests to documents that are not found when serving this static site. Only 1 of `catchall_document` or `error_document` can be set."
        }
      }
    }
  ],
  "required": [
    "name"
  ]
}
object app_variable_definition
{
  "type": "object",
  "required": [
    "key"
  ],
  "properties": {
    "key": {
      "type": "string",
      "example": "BASE_URL",
      "pattern": "^[_A-Za-z][_A-Za-z0-9]*$",
      "description": "The variable name"
    },
    "type": {
      "enum": [
        "GENERAL",
        "SECRET"
      ],
      "type": "string",
      "default": "GENERAL",
      "example": "GENERAL",
      "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable"
    },
    "scope": {
      "enum": [
        "UNSET",
        "RUN_TIME",
        "BUILD_TIME",
        "RUN_AND_BUILD_TIME"
      ],
      "type": "string",
      "default": "RUN_AND_BUILD_TIME",
      "example": "BUILD_TIME",
      "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time"
    },
    "value": {
      "type": "string",
      "example": "http://example.com",
      "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used."
    }
  }
}
object app_worker_spec
{
  "allOf": [
    {
      "$ref": "#/components/schemas/app_component_base"
    },
    {
      "$ref": "#/components/schemas/app_component_instance_base"
    }
  ],
  "required": [
    "name"
  ]
}
object apps_alert_response
{
  "type": "object",
  "properties": {
    "alert": {
      "$ref": "#/components/schemas/app_alert"
    }
  }
}
object apps_assign_app_alert_destinations_request
{
  "type": "object",
  "properties": {
    "emails": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_alert_email"
      },
      "example": [
        "sammy@digitalocean.com"
      ]
    },
    "slack_webhooks": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_alert_slack_webhook"
      }
    }
  }
}
object apps_cors_policy
{
  "type": "object",
  "properties": {
    "max_age": {
      "type": "string",
      "example": "5h30m",
      "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header."
    },
    "allow_headers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "Content-Type",
        "X-Custom-Header"
      ],
      "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header."
    },
    "allow_methods": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "GET",
        "OPTIONS",
        "POST",
        "PUT",
        "PATCH",
        "DELETE"
      ],
      "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header."
    },
    "allow_origins": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_string_match"
      },
      "example": [
        {
          "exact": "https://www.example.com"
        },
        {
          "regex": "^.*example.com"
        }
      ],
      "description": "The set of allowed CORS origins."
    },
    "expose_headers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "Content-Encoding",
        "X-Custom-Header"
      ],
      "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header."
    },
    "allow_credentials": {
      "type": "boolean",
      "example": false,
      "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header."
    }
  }
}
object apps_create_app_request
{
  "type": "object",
  "required": [
    "spec"
  ],
  "properties": {
    "spec": {
      "$ref": "#/components/schemas/app_spec"
    },
    "project_id": {
      "type": "string",
      "description": "The ID of the project the app should be assigned to. If omitted, it will be assigned to your default project."
    }
  }
}
object apps_create_deployment_request
{
  "type": "object",
  "properties": {
    "force_build": {
      "type": "boolean",
      "title": "Indicates whether to force a build of app from source even if an existing cached build is suitable for re-use",
      "example": true
    }
  }
}
object apps_delete_app_response
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "title": "The ID of the app that was deleted",
      "example": "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf"
    }
  }
}
object apps_deployment
{
  "type": "object",
  "title": "An app deployment",
  "properties": {
    "id": {
      "type": "string",
      "title": "The ID of the deployment",
      "example": "b6bdf840-2854-4f87-a36c-5f231c617c84"
    },
    "jobs": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_deployment_job"
      },
      "title": "Job components that are part of this deployment"
    },
    "spec": {
      "$ref": "#/components/schemas/app_spec"
    },
    "cause": {
      "type": "string",
      "title": "What caused this deployment to be created",
      "example": "commit 9a4df0b pushed to github/digitalocean/sample-golang"
    },
    "phase": {
      "$ref": "#/components/schemas/apps_deployment_phase"
    },
    "workers": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_deployment_worker"
      },
      "title": "Worker components that are part of this deployment"
    },
    "progress": {
      "$ref": "#/components/schemas/apps_deployment_progress"
    },
    "services": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_deployment_service"
      },
      "title": "Service components that are part of this deployment"
    },
    "functions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_deployment_functions"
      },
      "title": "Functions components that are part of this deployment"
    },
    "tier_slug": {
      "type": "string",
      "title": "The current pricing tier slug of the deployment",
      "example": "basic",
      "readOnly": true
    },
    "created_at": {
      "type": "string",
      "title": "The creation time of the deployment",
      "format": "date-time",
      "example": "2020-07-28T18:00:00Z"
    },
    "updated_at": {
      "type": "string",
      "title": "When the deployment was last updated",
      "format": "date-time",
      "example": "2020-07-28T18:00:00Z"
    },
    "cloned_from": {
      "type": "string",
      "title": "The ID of a previous deployment that this deployment was cloned from",
      "example": "3aa4d20e-5527-4c00-b496-601fbd22520a"
    },
    "static_sites": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_deployment_static_site"
      },
      "title": "Static Site components that are part of this deployment"
    },
    "phase_last_updated_at": {
      "type": "string",
      "title": "When the deployment phase was last updated",
      "format": "date-time",
      "example": "0001-01-01T00:00:00Z"
    }
  }
}
object apps_deployment_functions
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "title": "The name of this functions component",
      "example": "my-functions-component"
    },
    "namespace": {
      "type": "string",
      "example": "ap-b2a93513-8d9b-4223-9d61-5e7272c81c32",
      "description": "The namespace where the functions are deployed."
    },
    "source_commit_hash": {
      "type": "string",
      "example": "54d4a727f457231062439895000d45437c7bb405",
      "description": "The commit hash of the repository that was used to build this functions component."
    }
  }
}
object apps_deployment_job
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "title": "The name of this job",
      "example": "migrate-db"
    },
    "source_commit_hash": {
      "type": "string",
      "title": "The commit hash of the repository that was used to build this job",
      "example": "54d4a727f457231062439895000d45437c7bb405"
    }
  }
}
string apps_deployment_phase
{
  "enum": [
    "UNKNOWN",
    "PENDING_BUILD",
    "BUILDING",
    "PENDING_DEPLOY",
    "DEPLOYING",
    "ACTIVE",
    "SUPERSEDED",
    "ERROR",
    "CANCELED"
  ],
  "type": "string",
  "default": "UNKNOWN",
  "example": "ACTIVE"
}
object apps_deployment_progress
{
  "type": "object",
  "properties": {
    "steps": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_deployment_progress_step"
      },
      "title": "The deployment's steps"
    },
    "error_steps": {
      "type": "integer",
      "title": "Number of unsuccessful steps",
      "format": "int32",
      "example": 3
    },
    "total_steps": {
      "type": "integer",
      "title": "Total number of steps",
      "format": "int32",
      "example": 5
    },
    "pending_steps": {
      "type": "integer",
      "title": "Number of pending steps",
      "format": "int32",
      "example": 2
    },
    "running_steps": {
      "type": "integer",
      "title": "Number of currently running steps",
      "format": "int32",
      "example": 2
    },
    "success_steps": {
      "type": "integer",
      "title": "Number of successful steps",
      "format": "int32",
      "example": 4
    },
    "summary_steps": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_deployment_progress_step"
      },
      "title": "A flattened summary of the steps"
    }
  }
}
object apps_deployment_progress_step
{
  "type": "object",
  "title": "A step that is run as part of the deployment's lifecycle",
  "properties": {
    "name": {
      "type": "string",
      "title": "The name of this step",
      "example": "example_step"
    },
    "steps": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "title": "Child steps of this step"
    },
    "reason": {
      "$ref": "#/components/schemas/apps_deployment_progress_step_reason"
    },
    "status": {
      "$ref": "#/components/schemas/apps_deployment_progress_step_status"
    },
    "ended_at": {
      "type": "string",
      "title": "The end time of this step",
      "format": "date-time",
      "example": "2020-11-19T20:27:18Z"
    },
    "started_at": {
      "type": "string",
      "title": "The start time of this step",
      "format": "date-time",
      "example": "2020-11-19T20:27:18Z"
    },
    "message_base": {
      "type": "string",
      "example": "Building service",
      "description": "The base of a human-readable description of the step intended to be combined with the component name for presentation. For example:\n\n`message_base` = \"Building service\"\n`component_name` = \"api\""
    },
    "component_name": {
      "type": "string",
      "title": "The component name that this step is associated with",
      "example": "component"
    }
  }
}
object apps_deployment_progress_step_reason
{
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "title": "The error code",
      "example": "Title of Error"
    },
    "message": {
      "type": "string",
      "title": "The error message",
      "example": "This is an error"
    }
  }
}
string apps_deployment_progress_step_status
{
  "enum": [
    "UNKNOWN",
    "PENDING",
    "RUNNING",
    "ERROR",
    "SUCCESS"
  ],
  "type": "string",
  "default": "UNKNOWN",
  "example": "SUCCESS"
}
object apps_deployment_response
{
  "type": "object",
  "properties": {
    "deployment": {
      "$ref": "#/components/schemas/apps_deployment"
    }
  }
}
object apps_deployment_service
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "title": "The name of this service",
      "example": "web"
    },
    "source_commit_hash": {
      "type": "string",
      "title": "The commit hash of the repository that was used to build this service",
      "example": "54d4a727f457231062439895000d45437c7bb405"
    }
  }
}
object apps_deployment_static_site
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "title": "The name of this static site",
      "example": "web"
    },
    "source_commit_hash": {
      "type": "string",
      "title": "The commit hash of the repository that was used to build this static site",
      "example": "54d4a727f457231062439895000d45437c7bb405"
    }
  }
}
object apps_deployment_worker
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "title": "The name of this worker",
      "example": "queue-runner"
    },
    "source_commit_hash": {
      "type": "string",
      "title": "The commit hash of the repository that was used to build this worker",
      "example": "54d4a727f457231062439895000d45437c7bb405"
    }
  }
}
object apps_deployments_response
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "deployments": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/apps_deployment"
          },
          "title": "A list of deployments"
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object apps_domain
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "title": "The ID of the domain",
      "example": "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf"
    },
    "spec": {
      "$ref": "#/components/schemas/app_domain_spec"
    },
    "phase": {
      "$ref": "#/components/schemas/apps_domain_phase"
    },
    "progress": {
      "$ref": "#/components/schemas/apps_domain_progress"
    },
    "validations": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_domain_validation"
      },
      "title": "List of TXT validation records"
    },
    "certificate_expires_at": {
      "type": "string",
      "title": "Current SSL certificate expiration time",
      "format": "date-time",
      "example": "2024-01-29T23:59:59Z",
      "readOnly": true
    },
    "rotate_validation_records": {
      "type": "boolean",
      "title": "Validation values have changed and require manual intervention",
      "readOnly": true
    }
  }
}
string apps_domain_phase
{
  "enum": [
    "UNKNOWN",
    "PENDING",
    "CONFIGURING",
    "ACTIVE",
    "ERROR"
  ],
  "type": "string",
  "default": "UNKNOWN",
  "example": "ACTIVE"
}
object apps_domain_progress
{
  "type": "object",
  "properties": {
    "steps": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "title": "The steps of the domain's progress"
    }
  }
}
object apps_get_instance_size_response
{
  "type": "object",
  "properties": {
    "instance_size": {
      "$ref": "#/components/schemas/apps_instance_size"
    }
  }
}
object apps_get_logs_response
{
  "type": "object",
  "properties": {
    "live_url": {
      "type": "string",
      "example": "ws://logs/build",
      "description": "A URL of the real-time live logs. This URL may use either the `https://` or `wss://` protocols and will keep pushing live logs as they become available."
    },
    "historic_urls": {
      "type": "array",
      "items": {
        "type": "string",
        "example": "https://logs/build.log"
      },
      "title": "A list of URLs to archived log files"
    }
  }
}
object apps_get_tier_response
{
  "type": "object",
  "properties": {
    "tier": {
      "$ref": "#/components/schemas/apps_tier"
    }
  }
}
object apps_git_source_spec
{
  "type": "object",
  "properties": {
    "branch": {
      "type": "string",
      "example": "main",
      "description": "The name of the branch to use"
    },
    "repo_clone_url": {
      "type": "string",
      "example": "https://github.com/digitalocean/sample-golang.git",
      "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`"
    }
  }
}
object apps_github_source_spec
{
  "type": "object",
  "properties": {
    "repo": {
      "type": "string",
      "example": "digitalocean/sample-golang",
      "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`"
    },
    "branch": {
      "type": "string",
      "example": "main",
      "description": "The name of the branch to use"
    },
    "deploy_on_push": {
      "type": "boolean",
      "example": true,
      "description": "Whether to automatically deploy new commits made to the repo"
    }
  }
}
object apps_gitlab_source_spec
{
  "type": "object",
  "properties": {
    "repo": {
      "type": "string",
      "example": "digitalocean/sample-golang",
      "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`"
    },
    "branch": {
      "type": "string",
      "example": "main",
      "description": "The name of the branch to use"
    },
    "deploy_on_push": {
      "type": "boolean",
      "example": true,
      "description": "Whether to automatically deploy new commits made to the repo"
    }
  }
}
object apps_image_source_spec
{
  "type": "object",
  "properties": {
    "tag": {
      "type": "string",
      "default": "latest",
      "example": "latest",
      "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided."
    },
    "digest": {
      "type": "string",
      "example": "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac",
      "description": "The image digest. Cannot be specified if tag is provided."
    },
    "registry": {
      "type": "string",
      "example": "registry.hub.docker.com",
      "description": "The registry name. Must be left empty for the `DOCR` registry type."
    },
    "repository": {
      "type": "string",
      "example": "origin/master",
      "description": "The repository name."
    },
    "registry_type": {
      "enum": [
        "DOCKER_HUB",
        "DOCR",
        "GHCR"
      ],
      "type": "string",
      "example": "DOCR",
      "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type."
    },
    "deploy_on_push": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean",
          "example": true,
          "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest."
        }
      }
    },
    "registry_credentials": {
      "type": "string",
      "example": "my-dockerhub-username:dckr_pat_the_access_token",
      "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`."
    }
  }
}
object apps_instance_size
{
  "type": "object",
  "properties": {
    "cpus": {
      "type": "string",
      "title": "The number of allotted vCPU cores",
      "format": "int64",
      "example": "3"
    },
    "name": {
      "type": "string",
      "title": "A human-readable name of the instance size",
      "example": "name"
    },
    "slug": {
      "type": "string",
      "title": "The slug of the instance size",
      "example": "basic"
    },
    "cpu_type": {
      "$ref": "#/components/schemas/instance_size_cpu_type"
    },
    "tier_slug": {
      "type": "string",
      "title": "The slug of the tier to which this instance size belongs",
      "example": "basic"
    },
    "memory_bytes": {
      "type": "string",
      "title": "The allotted memory in bytes",
      "format": "int64",
      "example": "1048"
    },
    "usd_per_month": {
      "type": "string",
      "title": "The cost of this instance size in USD per month",
      "example": "23"
    },
    "usd_per_second": {
      "type": "string",
      "title": "The cost of this instance size in USD per second",
      "example": "0.00000001232"
    },
    "tier_upgrade_to": {
      "type": "string",
      "title": "The slug of the corresponding upgradable instance size on the higher tier",
      "example": "basic"
    },
    "tier_downgrade_to": {
      "type": "string",
      "title": "The slug of the corresponding downgradable instance size on the lower tier",
      "example": "basic"
    }
  }
}
object apps_list_alerts_response
{
  "type": "object",
  "properties": {
    "alerts": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/app_alert"
      }
    }
  }
}
object apps_list_instance_sizes_response
{
  "type": "object",
  "properties": {
    "instance_sizes": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_instance_size"
      }
    },
    "discount_percent": {
      "type": "number",
      "format": "float",
      "example": 2.32
    }
  }
}
object apps_list_regions_response
{
  "type": "object",
  "properties": {
    "regions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_region"
      }
    }
  }
}
object apps_list_tiers_response
{
  "type": "object",
  "properties": {
    "tiers": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/apps_tier"
      }
    }
  }
}
object apps_region
{
  "type": "object",
  "title": "Geographical information about an app origin",
  "properties": {
    "flag": {
      "type": "string",
      "title": "The flag of this region",
      "example": "ams",
      "readOnly": true
    },
    "slug": {
      "type": "string",
      "title": "The slug form of the region name",
      "example": "basic",
      "readOnly": true
    },
    "label": {
      "type": "string",
      "title": "A human-readable name of the region",
      "example": "ams",
      "readOnly": true
    },
    "reason": {
      "type": "string",
      "title": "Reason that this region is not available",
      "example": "to crowded",
      "readOnly": true
    },
    "default": {
      "type": "boolean",
      "example": true,
      "readOnly": true,
      "description": "Whether or not the region is presented as the default."
    },
    "disabled": {
      "type": "boolean",
      "title": "Whether or not the region is open for new apps",
      "example": true,
      "readOnly": true
    },
    "continent": {
      "type": "string",
      "title": "The continent that this region is in",
      "example": "europe",
      "readOnly": true
    },
    "data_centers": {
      "type": "array",
      "items": {
        "type": "string",
        "example": "ams"
      },
      "title": "Data centers that are in this region",
      "example": [
        "ams"
      ],
      "readOnly": true
    }
  }
}
object apps_response
{
  "allOf": [
    {
      "type": "object",
      "properties": {
        "apps": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/app"
          },
          "title": "A list of apps"
        }
      }
    },
    {
      "$ref": "#/components/schemas/pagination"
    },
    {
      "$ref": "#/components/schemas/meta"
    }
  ]
}
object apps_rollback_app_request
{
  "type": "object",
  "properties": {
    "skip_pin": {
      "type": "boolean",
      "example": false,
      "description": "Whether to skip pinning the rollback deployment. If false, the rollback deployment will be pinned and any new deployments including Auto Deploy on Push hooks will be disabled until the rollback is either manually committed or reverted via the CommitAppRollback or RevertAppRollback endpoints respectively. If true, the rollback will be immediately committed and the app will remain unpinned."
    },
    "deployment_id": {
      "type": "string",
      "example": "3aa4d20e-5527-4c00-b496-601fbd22520a",
      "description": "The ID of the deployment to rollback to."
    }
  }
}
object apps_string_match
{
  "type": "object",
  "properties": {
    "exact": {
      "type": "string",
      "example": "https://www.example.com",
      "maxLength": 256,
      "minLength": 1,
      "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set."
    },
    "regex": {
      "type": "string",
      "example": "^.*example.com",
      "maxLength": 256,
      "minLength": 1,
      "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: https://github.com/google/re2/wiki/Syntax"
    },
    "prefix": {
      "type": "string",
      "example": "https://www.example.com",
      "maxLength": 256,
      "minLength": 1,
      "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set."
    }
  }
}
object apps_tier
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "title": "A human-readable name of the tier",
      "example": "test"
    },
    "slug": {
      "type": "string",
      "title": "The slug of the tier",
      "example": "test"
    },
    "build_seconds": {
      "type": "string",
      "title": "The amount of included build time in seconds",
      "format": "int64",
      "example": "233"
    },
    "storage_bytes": {
      "type": "string",
      "title": "The allotted disk space in bytes",
      "format": "int64",
      "example": "10000000"
    },
    "egress_bandwidth_bytes": {
      "type": "string",
      "title": "The amount of included outbound bandwidth in bytes",
      "format": "int64",
      "example": "123"
    }
  }
}
object apps_update_app_request
{
  "type": "object",
  "required": [
    "spec"
  ],
  "properties": {
    "spec": {
      "$ref": "#/components/schemas/app_spec"
    }
  }
}
object associated_kubernetes_resource
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "example": "edb0478d-7436-11ea-86e6-0a58ac144b91",
      "description": "The ID of a resource associated with a Kubernetes cluster."
    },
    "name": {
      "type": "string",
      "example": "volume-001",
      "description": "The name of a resource associated with a Kubernetes cluster."
    }
  }
}
object associated_kubernetes_resources
{
  "type": "object",
  "properties": {
    "volumes": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/associated_kubernetes_resource"
      },
      "example": [
        {
          "id": "ba49449a-7435-11ea-b89e-0a58ac14480f",
          "name": "volume-001"
        }
      ],
      "description": "A list of names and IDs for associated volumes that can be destroyed along with the cluster."
    },
    "load_balancers": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/associated_kubernetes_resource"
      },
      "example": [
        {
          "id": "4de7ac8b-495b-4884-9a69-1050c6793cd6",
          "name": "lb-001"
        }
      ],
      "description": "A list of names and IDs for associated load balancers that can be destroyed along with the cluster."
    },
    "volume_snapshots": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/associated_kubernetes_resource"
      },
      "example": [
        {
          "id": "edb0478d-7436-11ea-86e6-0a58ac144b91",
          "name": "snapshot-001"
        }
      ],
      "description": "A list of names and IDs for associated volume snapshots that can be destroyed along with the cluster."
    }
  },
  "description": "An object containing the IDs of resources associated with a Kubernetes cluster."
}
object associated_resource
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "example": "61486916",
      "description": "The unique identifier for the resource associated with the Droplet."
    },
    "cost": {
      "type": "string",
      "example": "0.05",
      "description": "The cost of the resource in USD per month if the resource is retained after the Droplet is destroyed."
    },
    "name": {
      "type": "string",
      "example": "ubuntu-s-1vcpu-1gb-nyc1-01-1585758823330",
      "description": "The name of the resource associated with the Droplet."
    }
  },
  "description": "An objects containing information about a resource associated with a Droplet."
}
object associated_resource_status
{
  "type": "object",
  "properties": {
    "droplet": {
      "$ref": "#/components/schemas/destroyed_associated_resource"
    },
    "failures": {
      "type": "integer",
      "example": 0,
      "description": "A count of the associated resources that failed to be destroyed, if any."
    },
    "resources": {
      "type": "object",
      "properties": {
        "volumes": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/destroyed_associated_resource"
          }
        },
        "snapshots": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/destroyed_associated_resource"
          }
        },
        "floating_ips": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/destroyed_associated_resource"
          }
        },
        "reserved_ips": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/destroyed_associated_resource"
          }
        },
        "volume_snapshots": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/destroyed_associated_resource"
          }
        }
      },
      "description": "An object containing additional information about resource related to a Droplet requested to be destroyed."
    },
    "completed_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-04-01T18:11:49Z",
      "description": "A time value given in ISO8601 combined date and time format indicating when the requested action was completed."
    }
  },
  "description": "An objects containing information about a resources scheduled for deletion."
}
object backup
{
  "type": "object",
  "required": [
    "created_at",
    "size_gigabytes"
  ],
  "properties": {
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2019-01-31T19:25:22Z",
      "description": "A time value given in ISO8601 combined date and time format at which the backup was created."
    },
    "size_gigabytes": {
      "type": "number",
      "example": 0.03364864,
      "description": "The size of the database backup in GBs."
    }
  }
}
object backward_links
{
  "allOf": [
    {
      "$ref": "#/components/schemas/link_to_first_page"
    },
    {
      "$ref": "#/components/schemas/link_to_prev_page"
    }
  ]
}
object balance
{
  "type": "object",
  "properties": {
    "generated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2019-07-09T15:01:12Z",
      "description": "The time at which balances were most recently generated."
    },
    "account_balance": {
      "type": "string",
      "example": "12.23",
      "description": "Current balance of the customer's most recent billing activity.  Does not reflect `month_to_date_usage`."
    },
    "month_to_date_usage": {
      "type": "string",
      "example": "11.21",
      "description": "Amount used in the current billing period as of the `generated_at` time."
    },
    "month_to_date_balance": {
      "type": "string",
      "example": "23.44",
      "description": "Balance as of the `generated_at` time.  This value includes the `account_balance` and `month_to_date_usage`."
    }
  }
}
object billing_address
{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "example": "Atlantis",
      "description": "City"
    },
    "region": {
      "type": "string",
      "example": "OC",
      "description": "Region"
    },
    "created_at": {
      "type": "string",
      "example": "2019-09-03T16:34:46.000+00:00",
      "description": "Timestamp billing address was created"
    },
    "updated_at": {
      "type": "string",
      "example": "2019-09-03T16:34:46.000+00:00",
      "description": "Timestamp billing address was updated"
    },
    "postal_code": {
      "type": "string",
      "example": "12345",
      "description": "Postal code"
    },
    "address_line1": {
      "type": "string",
      "example": "101 Shark Row",
      "description": "Street address line 1"
    },
    "address_line2": {
      "type": "string",
      "example": " ",
      "description": "Street address line 2"
    },
    "country_iso2_code": {
      "type": "string",
      "example": "US",
      "description": "Country (ISO2) code"
    }
  }
}
object billing_history
{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "format": "date-time",
      "example": "2018-06-01T08:44:38Z",
      "description": "Time the billing history entry occurred."
    },
    "type": {
      "enum": [
        "ACHFailure",
        "Adjustment",
        "AttemptFailed",
        "Chargeback",
        "Credit",
        "CreditExpiration",
        "Invoice",
        "Payment",
        "Refund",
        "Reversal"
      ],
      "type": "string",
      "example": "Invoice",
      "description": "Type of billing history entry."
    },
    "amount": {
      "type": "string",
      "example": "12.34",
      "description": "Amount of the billing history entry."
    },
    "invoice_id": {
      "type": "string",
      "example": "123",
      "description": "ID of the invoice associated with the billing history entry, if  applicable."
    },
    "description": {
      "type": "string",
      "example": "Invoice for May 2018",
      "description": "Description of the billing history entry."
    },
    "invoice_uuid": {
      "type": "string",
      "example": "example-uuid",
      "description": "UUID of the invoice associated with the billing history entry, if  applicable."
    }
  }
}
object ca
{
  "type": "object",
  "required": [
    "certificate"
  ],
  "properties": {
    "certificate": {
      "type": "string",
      "example": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVRVENDQXFtZ0F3SUJBZ0lVRUZZWTdBWFZQS0Raam9jb1lpMk00Y0dvcU0wd0RRWUpLb1pJaHZjTkFRRU0KQlFBd09qRTRNRFlHQTFVRUF3d3ZOek0zT1RaaE1XRXRaamhrTUMwME9HSmpMV0V4Wm1NdFpqbGhNVFZsWXprdwpORGhsSUZCeWIycGxZM1FnUTBFd0hoY05NakF3TnpFM01UVTFNREEyV2hjTk16QXdOekUxTVRVMU1EQTJXakE2Ck1UZ3dOZ1lEVlFRRERDODNNemM1Tm1FeFlTMW1PR1F3TFRRNFltTXRZVEZtWXkxbU9XRXhOV1ZqT1RBME9HVWcKVUhKdmFtVmpkQ0JEUVRDQ0FhSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnR1BBRENDQVlvQ2dnR0JBTVdScXhycwpMZnpNdHZyUmxKVEw4MldYMVBLZkhKbitvYjNYcmVBY3FZd1dBUUp2Q3IycmhxSXZieVZzMGlaU0NzOHI4c3RGClljQ0R1bkxJNmUwTy9laERZYTBIT2RrMkFFRzE1ckVOVmNha2NSczcyQWlHVHNrdkNXS2VkUjFTUWswVWt0WCsKQUg4S1ExS3F5bzNtZ2Y2cVV1WUpzc3JNTXFselk3YTN1RVpEb2ZqTjN5Q3MvM21pTVJKcVcyNm1JV0IrUUlEbAo5YzdLRVF5MTZvdCtjeHVnd0lLMm9oZHMzaFY1bjBKMFVBM0I3QWRBdXY5aUl5L3JHaHlTNm5CNTdaWm9JZnAyCnFybXdOY0UrVjlIdXhQSGtRVjFOQjUwOFFudWZ4Z0E5VCtqU2VrdGVUbWFORkxqNjFXL3BtcndrTytOaWFXUTIKaGgzVXBKOEozY1BoNkErbHRnUmpSV2NEb2lsYVNwRVVpU09WemNNYVFvalZKYVJlNk9NbnZYc29NaSs3ZzdneApWcittQ0lUcGcvck9DaXpBWWQ2UFAxLzdYTjk1ZXNmU2tBQnM5c3hJakpjTUFqbDBYTEFzRmtGZVdyeHNIajlVCmJnaDNWYXdtcnpUeXhZT0RQcXV1cS9JcGlwc0RRT3Fpb2ZsUStkWEJJL3NUT0NNbVp6K0pNcG5HYXdJREFRQUIKb3o4d1BUQWRCZ05WSFE0RUZnUVVSekdDRlE3WEtUdHRDN3JzNS8ydFlQcExTZGN3RHdZRFZSMFRCQWd3QmdFQgovd0lCQURBTEJnTlZIUThFQkFNQ0FRWXdEUVlKS29aSWh2Y05BUUVNQlFBRGdnR0JBSWFKQ0dSVVNxUExtcmcvCmk3MW10b0NHUDdzeG1BVXVCek1oOEdrU25uaVdaZnZGMTRwSUtqTlkwbzVkWmpHKzZqK1VjalZtK0RIdGE1RjYKOWJPeEk5S0NFeEI1blBjRXpMWjNZYitNOTcrellxbm9zUm85S21DVFJBb2JrNTZ0WU1FS1h1aVJja2tkMm1yUQo4cGw2N2xxdThjM1V4c0dHZEZVT01wMkk3ZTNpdUdWVm5UR0ZWM3JQZUdaQ0J3WGVyUUQyY0F4UjkzS3BnWVZ2ClhUUzk5dnpSbm1HOHhhUm9EVy9FbEdXZ2xWd0Q5a1JrbXhUUkdoYTdDWVZCcjFQVWY2dVVFVjhmVFIxc1hFZnIKLytMR1JoSVVsSUhWT3l2Yzk3YnZYQURPbWF1MWZDVE5lWGtRdTNyZnZFSlBmaFlLeVIwT0V3eWVvdlhRNzl0LwpTV2ZGTjBreU1Pc1UrNVNIdHJKSEh1eWNWcU0yQlVVK083VjM1UnNwOU9MZGRZMFFVbTZldFpEVEhhSUhYYzRRCnl1Rm1OL1NhSFZtNE0wL3BTVlJQdVd6TmpxMnZyRllvSDRtbGhIZk95TUNJMjc2elE2aWhGNkdDSHlkOUJqajcKUm1UWGEyNHM3NWhmSi9YTDV2bnJSdEtpVHJlVHF6V21EOVhnUmNMQ0gyS1hJaVRtSWc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",
      "readOnly": true,
      "description": "base64 encoding of the certificate used to secure database connections"
    }
  }
}
object cdn_endpoint
{
  "type": "object",
  "required": [
    "origin"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "892071a0-bb95-49bc-8021-3afd67a210bf",
      "readOnly": true,
      "description": "A unique ID that can be used to identify and reference a CDN endpoint."
    },
    "ttl": {
      "enum": [
        60,
        600,
        3600,
        86400,
        604800
      ],
      "type": "integer",
      "default": 3600,
      "example": 3600,
      "description": "The amount of time the content is cached by the CDN's edge servers in seconds. TTL must be one of 60, 600, 3600, 86400, or 604800. Defaults to 3600 (one hour) when excluded."
    },
    "origin": {
      "type": "string",
      "format": "hostname",
      "example": "static-images.nyc3.digitaloceanspaces.com",
      "description": "The fully qualified domain name (FQDN) for the origin server which provides the content for the CDN. This is currently restricted to a Space."
    },
    "endpoint": {
      "type": "string",
      "format": "hostname",
      "example": "static-images.nyc3.cdn.digitaloceanspaces.com",
      "readOnly": true,
      "description": "The fully qualified domain name (FQDN) from which the CDN-backed content is served."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2018-03-21T16:02:37Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the CDN endpoint was created."
    },
    "custom_domain": {
      "type": "string",
      "format": "hostname",
      "example": "static.example.com",
      "description": "The fully qualified domain name (FQDN) of the custom subdomain used with the CDN endpoint."
    },
    "certificate_id": {
      "type": "string",
      "format": "uuid",
      "example": "892071a0-bb95-49bc-8021-3afd67a210bf",
      "description": "The ID of a DigitalOcean managed TLS certificate used for SSL when a custom subdomain is provided."
    }
  }
}
object certificate
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "892071a0-bb95-49bc-8021-3afd67a210bf",
      "readOnly": true,
      "description": "A unique ID that can be used to identify and reference a certificate."
    },
    "name": {
      "type": "string",
      "example": "web-cert-01",
      "description": "A unique human-readable name referring to a certificate."
    },
    "type": {
      "enum": [
        "custom",
        "lets_encrypt"
      ],
      "type": "string",
      "example": "lets_encrypt",
      "description": "A string representing the type of the certificate. The value will be `custom` for a user-uploaded certificate or `lets_encrypt` for one automatically generated with Let's Encrypt."
    },
    "state": {
      "enum": [
        "pending",
        "verified",
        "error"
      ],
      "type": "string",
      "example": "verified",
      "readOnly": true,
      "description": "A string representing the current state of the certificate. It may be `pending`, `verified`, or `error`."
    },
    "dns_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "www.example.com",
        "example.com"
      ],
      "description": "An array of fully qualified domain names (FQDNs) for which the certificate was issued."
    },
    "not_after": {
      "type": "string",
      "format": "date-time",
      "example": "2017-02-22T00:23:00Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents the certificate's expiration date."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2017-02-08T16:02:37Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the certificate was created."
    },
    "sha1_fingerprint": {
      "type": "string",
      "example": "dfcc9f57d86bf58e321c2c6c31c7a971be244ac7",
      "readOnly": true,
      "description": "A unique identifier generated from the SHA-1 fingerprint of the certificate."
    }
  }
}
object certificate_create_base
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "web-cert-01",
      "description": "A unique human-readable name referring to a certificate."
    },
    "type": {
      "enum": [
        "custom",
        "lets_encrypt"
      ],
      "type": "string",
      "example": "lets_encrypt",
      "description": "A string representing the type of the certificate. The value will be `custom` for a user-uploaded certificate or `lets_encrypt` for one automatically generated with Let's Encrypt."
    }
  }
}
object certificate_request_custom
{
  "allOf": [
    {
      "$ref": "#/components/schemas/certificate_create_base"
    },
    {
      "type": "object",
      "required": [
        "private_key",
        "leaf_certificate"
      ],
      "properties": {
        "private_key": {
          "type": "string",
          "example": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBIZMz8pnK6V52\nSVf+CYssOfCQHAx5f0Ou5rYbq3xNh8VHAIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1\nDwGb8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86X\nwrE4oFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3w\nZ2mzZ03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1F\nZRnak/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFX\nfqqbQwuRAgMBAAECggEBAILLmkW0JzOkmLTDNzR0giyRkLoIROqDpfLtjKdwm95l\n9NUBJcU4vCvXQITKt/NhtnNTexcowg8pInb0ksJpg3UGE+4oMNBXVi2UW5MQZ5cm\ncVkQqgXkBF2YAY8FMaB6EML+0En2+dGR/3gIAr221xsFiXe1kHbB8Nb2c/d5HpFt\neRpLVJnK+TxSr78PcZA8DDGlSgwvgimdAaFUNO2OqB9/0E9UPyKk2ycdff/Z6ldF\n0hkCLtdYTTl8Kf/OwjcuTgmA2O3Y8/CoQX/L+oP9Rvt9pWCEfuebiOmHJVPO6Y6x\ngtQVEXwmF1pDHH4Qtz/e6UZTdYeMl9G4aNO2CawwcaYECgYEA57imgSOG4XsJLRh\nGGncV9R/xhy4AbDWLtAMzQRX4ktvKCaHWyQV2XK2we/cu29NLv2Y89WmerTNPOU+\nP8+pB31uty2ELySVn15QhKpQClVEAlxCnnNjXYrii5LOM80+lVmxvQwxVd8Yz8nj\nIntyioXNBEnYS7V2RxxFGgFun1cCgYEA1V3W+Uyamhq8JS5EY0FhyGcXdHd70K49\nW1ou7McIpncf9tM9acLS1hkI98rd2T69Zo8mKoV1V2hjFaKUYfNys6tTkYWeZCcJ\n3rW44j9DTD+FmmjcX6b8DzfybGLehfNbCw6n67/r45DXIV/fk6XZfkx6IEGO4ODt\nNfnvx4TuI1cCgYBACDiKqwSUvmkUuweOo4IuCxyb5Ee8v98P5JIE/VRDxlCbKbpx\npxEam6aBBQVcDi+n8o0H3WjjlKc6UqbW/01YMoMrvzotxNBLz8Y0QtQHZvR6KoCG\nRKCKstxTcWflzKuknbqN4RapAhNbKBDJ8PMSWfyDWNyaXzSmBdvaidbF1QKBgDI0\no4oD0Xkjg1QIYAUu9FBQmb9JAjRnW36saNBEQS/SZg4RRKknM683MtoDvVIKJk0E\nsAlfX+4SXQZRPDMUMtA+Jyrd0xhj6zmhbwClvDMr20crF3fWdgcqtft1BEFmsuyW\nJUMe5OWmRkjPI2+9ncDPRAllA7a8lnSV/Crph5N/AoGBAIK249temKrGe9pmsmAo\nQbNuYSmwpnMoAqdHTrl70HEmK7ob6SIVmsR8QFAkH7xkYZc4Bxbx4h1bdpozGB+/\nAangbiaYJcAOD1QyfiFbflvI1RFeHgrk7VIafeSeQv6qu0LLMi2zUbpgVzxt78Wg\neTuK2xNR0PIM8OI7pRpgyj1I\n-----END PRIVATE KEY-----",
          "description": "The contents of a PEM-formatted private-key corresponding to the SSL certificate."
        },
        "leaf_certificate": {
          "type": "string",
          "example": "-----BEGIN CERTIFICATE-----\nMIIFFjCCA/6gAwIBAgISA0AznUJmXhu08/89ZuSPC/kRMA0GCSqGSIb3DQEBCwUA\nMEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD\nExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjExMjQwMDIzMDBaFw0x\nNzAyMjIwMDIzMDBaMCQxIjAgBgNVBAMTGWNsb3VkLmFuZHJld3NvbWV0aGluZy5j\nb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBIZMz8pnK6V52SVf+\nCYssOfCQHAx5f0Ou5rYbq3xNh8VWHIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1DwGb\n8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86XwrE4\noFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3wZ2mz\nZ03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1FZRna\nk/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFXfqqb\nQwuRAgMBAAGjggIaMIICFjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB\nBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLsAFcxAhFX1\nMbCnzr9hEO5rL4jqMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAG\nCCsGAQUFBwEBBGQwYjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgzLmxl\ndHNlbmNyeXB0Lm9yZy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5s\nZXRzZW5jcnlwdC5vcmcvMCQGA1UdEQQdMBuCGWNsb3VkLmFuZHJld3NvbWV0aGlu\nZy5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgWrgeYGCysGAQQBgt8TAQEBMIHW\nMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYB\nBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1\ncG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSQ2ziBhY2NvcmRhbmNlIHdp\ndGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNl\nbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAOZVQvrjM\nPKXLARTjB5XsgfyDN3/qwLl7SmwGkPe+B+9FJpfScYG1JzVuCj/SoaPaK34G4x/e\niXwlwOXtMOtqjQYzNu2Pr2C+I+rVmaxIrCUXFmC205IMuUBEeWXG9Y/HvXQLPabD\nD3Gdl5+Feink9SDRP7G0HaAwq13hI7ARxkL9p+UIY39X0dV3WOboW2Re8nrkFXJ7\nq9Z6shK5QgpBfsLjtjNsQzaGV3ve1gOg25aTJGearBWOvEjJNA1wGMoKVXOtYwm/\nWyWoVdCQ8HmconcbJB6xc0UZ1EjvzRr5ZIvSa5uHZD0L3m7/kpPWlAlFJ7hHASPu\nUlF1zblDmg2Iaw==\n-----END CERTIFICATE-----",
          "description": "The contents of a PEM-formatted public SSL certificate."
        },
        "certificate_chain": {
          "type": "string",
          "example": "-----BEGIN CERTIFICATE-----\nMIIFFjCCA/6gAwIBAgISA0AznUJmXhu08/89ZuSPC/kRMA0GCSqGSIb3DQEBCwUA\nMEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD\nExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjExMjQwMDIzMDBaFw0x\nNzAyMjIwMDIzMDBaMCQxIjAgBgNVBAMTGWNsb3VkLmFuZHJld3NvbWV0aGluZy5j\nb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBIZMz7tnK6V52SVf+\nCYssOfCQHAx5f0Ou5rYbq3xNh8VHAIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1DwGb\n8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86XwrE4\noFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3wZ2mz\nZ03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1FZRna\nk/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFXfqqb\nQwuRAgMBAAGjggIaMIICFjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB\nBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLsAFcxAhFX1\nMbCnzr9hEO5rL4jqMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAG\nCCsGAQUFBwEBBGQwYjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgzLmxl\ndHNlbmNyeXB0Lm9yZy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5s\nZXRzZW5jcnlwdC5vcmcvMCQGA1UdEQQdMBuCGWNsb3VkLmFuZHJld3NvbWV0aGlu\nZy5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeWECysGAQQBgt8TAQEBMIHW\nMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYB\nBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1\ncG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSQ2ziBhY2NvcmRhbmNlIHdp\ndGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBsdHRwczovL2xldHNl\nbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAOZVQvrjM\nPKXLARTjB5XsgfyDN3/qwLl7SmwGkPe+B+9FJpfScYG1JzVuCj/SoaPaK34G4x/e\niXwlwOXtMOtqjQYzNu2Pr2C+I+rVmaxIrCUXFmC205IMuUBEeWXG9Y/HvXQLPabD\nD3Gdl5+Feink9SDRP7G0HaAwq13hI7ARxkL3o+UIY39X0dV3WOboW2Re8nrkFXJ7\nq9Z6shK5QgpBfsLjtjNsQzaGV3ve1gOg25aTJGearBWOvEjJNA1wGMoKVXOtYwm/\nWyWoVdCQ8HmconcbJB6xc0UZ1EjvzRr5ZIvSa5uHZD0L3m7/kpPWlAlFJ7hHASPu\nUlF1zblDmg2Iaw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\nMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\nDkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\nSjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\nGkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\nAQ8AMIIBCgKCAQEAnNMM8FrlLsd3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\nq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\nSMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\nZ8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\na6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIPOIUo4IBfTCCAXkwEgYDVR0T\nAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\nCCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\nbTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\nc3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\nVAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\nARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\nMDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\nY3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\nAAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\nuM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\nwApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\nX4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\nPfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\nKOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n-----END CERTIFICATE-----",
          "description": "The full PEM-formatted trust chain between the certificate authority's certificate and your domain's SSL certificate."
        }
      }
    }
  ],
  "title": "Custom Certificate Request"
}
object certificate_request_lets_encrypt
{
  "allOf": [
    {
      "$ref": "#/components/schemas/certificate_create_base"
    },
    {
      "type": "object",
      "required": [
        "dns_names"
      ],
      "properties": {
        "dns_names": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "www.example.com",
            "example.com"
          ],
          "description": "An array of fully qualified domain names (FQDNs) for which the certificate was issued. A certificate covering all subdomains can be issued using a wildcard (e.g. `*.example.com`)."
        }
      }
    }
  ],
  "title": "Let's Encrypt Certificate Request"
}
object check
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/check_base"
    },
    {
      "$ref": "#/components/schemas/check_updatable"
    }
  ]
}
object check_base
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "5a4981aa-9653-4bd1-bef5-d6bff52042e4",
      "readOnly": true,
      "description": "A unique ID that can be used to identify and reference the check."
    }
  }
}
object check_updatable
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "Landing page check",
      "description": "A human-friendly display name."
    },
    "type": {
      "enum": [
        "ping",
        "http",
        "https"
      ],
      "type": "string",
      "example": "https",
      "description": "The type of health check to perform."
    },
    "target": {
      "type": "string",
      "format": "url",
      "example": "https://www.landingpage.com",
      "description": "The endpoint to perform healthchecks on."
    },
    "enabled": {
      "type": "boolean",
      "default": true,
      "example": true,
      "description": "A boolean value indicating whether the check is enabled/disabled."
    },
    "regions": {
      "type": "array",
      "items": {
        "enum": [
          "us_east",
          "us_west",
          "eu_west",
          "se_asia"
        ],
        "type": "string"
      },
      "example": [
        "us_east",
        "eu_west"
      ],
      "description": "An array containing the selected regions to perform healthchecks from."
    }
  }
}
object cluster
{
  "type": "object",
  "required": [
    "name",
    "region",
    "version",
    "node_pools"
  ],
  "properties": {
    "ha": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean value indicating whether the control plane is run in a highly available configuration in the cluster. Highly available control planes incur less downtime. The property cannot be disabled."
    },
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "bd5f5959-5e1e-4205-a714-a914373942af",
      "readOnly": true,
      "description": "A unique ID that can be used to identify and reference a Kubernetes cluster."
    },
    "ipv4": {
      "type": "string",
      "example": "68.183.121.157",
      "readOnly": true,
      "description": "The public IPv4 address of the Kubernetes master node. This will not be set if high availability is configured on the cluster (v1.21+)"
    },
    "name": {
      "type": "string",
      "example": "prod-cluster-01",
      "description": "A human-readable name for a Kubernetes cluster."
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "k8s",
        "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
        "production",
        "web-team"
      ],
      "description": "An array of tags applied to the Kubernetes cluster. All clusters are automatically tagged `k8s` and `k8s:$K8S_CLUSTER_ID`."
    },
    "region": {
      "type": "string",
      "example": "nyc1",
      "description": "The slug identifier for the region where the Kubernetes cluster is located."
    },
    "status": {
      "type": "object",
      "readOnly": true,
      "properties": {
        "state": {
          "enum": [
            "running",
            "provisioning",
            "degraded",
            "error",
            "deleted",
            "upgrading",
            "deleting"
          ],
          "type": "string",
          "example": "provisioning",
          "description": "A string indicating the current status of the cluster."
        },
        "message": {
          "type": "string",
          "example": "provisioning",
          "description": "An optional message providing additional information about the current cluster state."
        }
      },
      "description": "An object containing a `state` attribute whose value is set to a string indicating the current status of the cluster."
    },
    "version": {
      "type": "string",
      "example": "1.18.6-do.0",
      "description": "The slug identifier for the version of Kubernetes used for the cluster. If set to a minor version (e.g. \"1.14\"), the latest version within it will be used (e.g. \"1.14.6-do.1\"); if set to \"latest\", the latest published version will be used. See the `/v2/kubernetes/options` endpoint to find all currently available versions."
    },
    "endpoint": {
      "type": "string",
      "example": "https://bd5f5959-5e1e-4205-a714-a914373942af.k8s.ondigitalocean.com",
      "readOnly": true,
      "description": "The base URL of the API server on the Kubernetes master node."
    },
    "vpc_uuid": {
      "type": "string",
      "format": "uuid",
      "example": "c33931f2-a26a-4e61-b85c-4e95a2ec431b",
      "description": "A string specifying the UUID of the VPC to which the Kubernetes cluster is assigned."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2018-11-15T16:00:11Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the Kubernetes cluster was created."
    },
    "node_pools": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/kubernetes_node_pool"
      },
      "description": "An object specifying the details of the worker nodes available to the Kubernetes cluster."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2018-11-15T16:00:11Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the Kubernetes cluster was last updated."
    },
    "auto_upgrade": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean value indicating whether the cluster will be automatically upgraded to new patch releases during its maintenance window."
    },
    "surge_upgrade": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean value indicating whether surge upgrade is enabled/disabled for the cluster. Surge upgrade makes cluster upgrades fast and reliable by bringing up new nodes before destroying the outdated nodes."
    },
    "cluster_subnet": {
      "type": "string",
      "format": "cidr",
      "example": "10.244.0.0/16",
      "readOnly": true,
      "description": "The range of IP addresses in the overlay network of the Kubernetes cluster in CIDR notation."
    },
    "service_subnet": {
      "type": "string",
      "example": "10.245.0.0/16",
      "readOnly": true,
      "description": "The range of assignable IP addresses for services running in the Kubernetes cluster in CIDR notation."
    },
    "registry_enabled": {
      "type": "boolean",
      "example": true,
      "readOnly": true,
      "description": "A read-only boolean value indicating if a container registry is integrated with the cluster."
    },
    "maintenance_policy": {
      "$ref": "#/components/schemas/maintenance_policy"
    }
  }
}
object cluster_registries
{
  "type": "object",
  "properties": {
    "cluster_uuids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "bd5f5959-5e1e-4205-a714-a914373942af",
        "50c2f44c-011d-493e-aee5-361a4a0d1844"
      ],
      "description": "An array containing the UUIDs of Kubernetes clusters."
    }
  }
}
object cluster_update
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "ha": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean value indicating whether the control plane is run in a highly available configuration in the cluster. Highly available control planes incur less downtime. The property cannot be disabled."
    },
    "name": {
      "type": "string",
      "example": "prod-cluster-01",
      "description": "A human-readable name for a Kubernetes cluster."
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "k8s",
        "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
        "production",
        "web-team"
      ],
      "description": "An array of tags applied to the Kubernetes cluster. All clusters are automatically tagged `k8s` and `k8s:$K8S_CLUSTER_ID`."
    },
    "auto_upgrade": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean value indicating whether the cluster will be automatically upgraded to new patch releases during its maintenance window."
    },
    "surge_upgrade": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean value indicating whether surge upgrade is enabled/disabled for the cluster. Surge upgrade makes cluster upgrades fast and reliable by bringing up new nodes before destroying the outdated nodes."
    },
    "maintenance_policy": {
      "$ref": "#/components/schemas/maintenance_policy"
    }
  }
}
object clusterlint_request
{
  "type": "object",
  "properties": {
    "exclude_checks": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "default-namespace"
      ],
      "description": "An array of checks that will be run when clusterlint executes checks."
    },
    "exclude_groups": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "workload-health"
      ],
      "description": "An array of check groups that will be omitted when clusterlint executes checks."
    },
    "include_checks": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "bare-pods",
        "resource-requirements"
      ],
      "description": "An array of checks that will be run when clusterlint executes checks."
    },
    "include_groups": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "basic",
        "doks",
        "security"
      ],
      "description": "An array of check groups that will be run when clusterlint executes checks."
    }
  }
}
object clusterlint_results
{
  "type": "object",
  "properties": {
    "run_id": {
      "type": "string",
      "example": "50c2f44c-011d-493e-aee5-361a4a0d1844",
      "description": "Id of the clusterlint run that can be used later to fetch the diagnostics."
    },
    "diagnostics": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "object": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "example": "config map",
                "description": "The kind of Kubernetes API object"
              },
              "name": {
                "type": "string",
                "example": "foo",
                "description": "Name of the object"
              },
              "namespace": {
                "type": "string",
                "example": "kube-system",
                "description": "The namespace the object resides in the cluster."
              }
            },
            "description": "Metadata about the Kubernetes API object the diagnostic is reported on."
          },
          "message": {
            "type": "string",
            "example": "Unused config map",
            "description": "Feedback about the object for users to fix."
          },
          "severity": {
            "type": "string",
            "example": "warning",
            "description": "Can be one of error, warning or suggestion."
          },
          "check_name": {
            "type": "string",
            "example": "unused-config-map",
            "description": "The clusterlint check that resulted in the diagnostic."
          }
        }
      },
      "description": "An array of diagnostics reporting potential problems for the given cluster."
    },
    "completed_at": {
      "type": "string",
      "format": "date-time",
      "example": "2019-10-30T05:34:11Z",
      "description": "A time value given in ISO8601 combined date and time format that represents when the schedule clusterlint run request was completed."
    },
    "requested_at": {
      "type": "string",
      "format": "date-time",
      "example": "2019-10-30T05:34:07Z",
      "description": "A time value given in ISO8601 combined date and time format that represents when the schedule clusterlint run request was made."
    }
  }
}
object connection_pool
{
  "type": "object",
  "required": [
    "name",
    "mode",
    "size",
    "db"
  ],
  "properties": {
    "db": {
      "type": "string",
      "example": "defaultdb",
      "description": "The database for use with the connection pool."
    },
    "mode": {
      "type": "string",
      "example": "transaction",
      "description": "The PGBouncer transaction mode for the connection pool. The allowed values are session, transaction, and statement."
    },
    "name": {
      "type": "string",
      "example": "backend-pool",
      "description": "A unique name for the connection pool. Must be between 3 and 60 characters."
    },
    "size": {
      "type": "integer",
      "format": "int32",
      "example": 10,
      "description": "The desired size of the PGBouncer connection pool. The maximum allowed size is determined by the size of the cluster's primary node. 25 backend server connections are allowed for every 1GB of RAM. Three are reserved for maintenance. For example, a primary node with 1 GB of RAM allows for a maximum of 22 backend server connections while one with 4 GB would allow for 97. Note that these are shared across all connection pools in a cluster."
    },
    "user": {
      "type": "string",
      "example": "doadmin",
      "description": "The name of the user for use with the connection pool. When excluded, all sessions connect to the database as the inbound user."
    },
    "connection": {
      "allOf": [
        {
          "$ref": "#/components/schemas/database_connection"
        },
        {
          "readOnly": true
        }
      ]
    },
    "private_connection": {
      "allOf": [
        {
          "$ref": "#/components/schemas/database_connection"
        },
        {
          "readOnly": true
        }
      ]
    },
    "standby_connection": {
      "allOf": [
        {
          "$ref": "#/components/schemas/database_connection"
        },
        {
          "readOnly": true
        }
      ]
    },
    "standby_private_connection": {
      "allOf": [
        {
          "$ref": "#/components/schemas/database_connection"
        },
        {
          "readOnly": true
        }
      ]
    }
  }
}
object connection_pool_update
{
  "type": "object",
  "required": [
    "mode",
    "size",
    "db"
  ],
  "properties": {
    "db": {
      "type": "string",
      "example": "defaultdb",
      "description": "The database for use with the connection pool."
    },
    "mode": {
      "type": "string",
      "example": "transaction",
      "description": "The PGBouncer transaction mode for the connection pool. The allowed values are session, transaction, and statement."
    },
    "size": {
      "type": "integer",
      "format": "int32",
      "example": 10,
      "description": "The desired size of the PGBouncer connection pool. The maximum allowed size is determined by the size of the cluster's primary node. 25 backend server connections are allowed for every 1GB of RAM. Three are reserved for maintenance. For example, a primary node with 1 GB of RAM allows for a maximum of 22 backend server connections while one with 4 GB would allow for 97. Note that these are shared across all connection pools in a cluster."
    },
    "user": {
      "type": "string",
      "example": "doadmin",
      "description": "The name of the user for use with the connection pool. When excluded, all sessions connect to the database as the inbound user."
    }
  }
}
object connection_pools
{
  "type": "object",
  "properties": {
    "pools": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/connection_pool"
      },
      "readOnly": true,
      "description": "An array of connection pool objects."
    }
  }
}
object create_namespace
{
  "type": "object",
  "required": [
    "region",
    "label"
  ],
  "properties": {
    "label": {
      "type": "string",
      "example": "my namespace",
      "description": "The namespace's unique name."
    },
    "region": {
      "type": "string",
      "example": "nyc1",
      "description": "The [datacenter region](https://docs.digitalocean.com/products/platform/availability-matrix/#available-datacenters) in which to create the namespace."
    }
  }
}
object create_trigger
{
  "type": "object",
  "required": [
    "name",
    "function",
    "type",
    "is_enabled",
    "scheduled_details"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "my trigger",
      "description": "The trigger's unique name within the namespace."
    },
    "type": {
      "type": "string",
      "example": "SCHEDULED",
      "description": "One of different type of triggers. Currently only SCHEDULED is supported."
    },
    "function": {
      "type": "string",
      "example": "hello",
      "description": "Name of function(action) that exists in the given namespace."
    },
    "is_enabled": {
      "type": "boolean",
      "example": true,
      "description": "Indicates weather the trigger is paused or unpaused."
    },
    "scheduled_details": {
      "$ref": "#/components/schemas/scheduled_details"
    }
  }
}
object credentials
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "example": "$DIGITALOCEAN_TOKEN",
      "description": "An access token used to authenticate with the cluster. This is only returned for clusters with support for token-based authentication."
    },
    "server": {
      "type": "string",
      "format": "uri",
      "example": "https://bd5f5959-5e1e-4205-a714-a914373942af.k8s.ondigitalocean.com",
      "description": "The URL used to access the cluster API server."
    },
    "expires_at": {
      "type": "string",
      "format": "date-time",
      "example": "2019-11-09T11:50:28.889080521Z",
      "description": "A time value given in ISO8601 combined date and time format that represents when the access token expires."
    },
    "client_key_data": {
      "type": "string",
      "format": "byte",
      "example": null,
      "nullable": true,
      "deprecated": true,
      "description": "A base64 encoding of bytes representing the x509 client key\ndata for access the cluster. This is only returned for clusters without\nsupport for token-based authentication.\n\nNewly created Kubernetes clusters do not return credentials using\ncertificate-based authentication. For additional information,\n[see here](https://www.digitalocean.com/docs/kubernetes/how-to/connect-to-cluster/#authenticate).\n"
    },
    "client_certificate_data": {
      "type": "string",
      "format": "byte",
      "example": null,
      "nullable": true,
      "deprecated": true,
      "description": "A base64 encoding of bytes representing the x509 client\ncertificate data for access the cluster. This is only returned for clusters\nwithout support for token-based authentication.\n\nNewly created Kubernetes clusters do not return credentials using\ncertificate-based authentication. For additional information,\n[see here](https://www.digitalocean.com/docs/kubernetes/how-to/connect-to-cluster/#authenticate).\n"
    },
    "certificate_authority_data": {
      "type": "string",
      "format": "byte",
      "example": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURKekNDQWcrZ0F3SUJBZ0lDQm5Vd0RRWUpLb1pJaHZjTkFRRUxCUUF3TXpFVk1CTUdBMVVFQ2hNTVJHbG4KYVhSaGJFOWpaV0Z1TVJvd0dBWURWUVFERXhGck9ITmhZWE1nUTJ4MWMzUmxjaUJEUVRBZUZ3MHlNREE0TURNeApOVEkxTWpoYUZ3MDBNREE0TURNeE5USTFNamhhTURNeEZUQVRCZ05WQkFvVERFUnBaMmwwWVd4UFkyVmhiakVhCk1CZ0dBMVVFQXhNUmF6aHpZV0Z6SUVOc2RYTjBaWElnUTBFd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUIKRHdBd2dnRUtBb0lCQVFDc21oa2JrSEpUcGhZQlN0R05VVE1ORVZTd2N3bmRtajArelQvcUZaNGsrOVNxUnYrSgpBd0lCaGpBU0JnTlZIUk1CQWY4RUNEQUdBUUgvQWdFQU1CMEdBMVVkRGdRV0JCUlRzazhhZ1hCUnFyZXdlTXJxClhwa3E1NXg5dVRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQXB6V2F6bXNqYWxXTEx3ZjVpbWdDblNINDlKcGkKYWkvbzFMdEJvVEpleGdqZzE1ZVppaG5BMUJMc0lWNE9BZGM3UEFsL040L0hlbENrTDVxandjamRnNVdaYnMzYwozcFVUQ0g5bVVwMFg1SVdhT1VKV292Q1hGUlM1R2VKYXlkSDVPUXhqTURzR2N2UlNvZGQrVnQ2MXE3aWdFZ2I1CjBOZ1l5RnRnc2p0MHpJN3hURzZFNnlsOVYvUmFoS3lIQks2eExlM1RnUGU4SXhWa2RwT3QzR0FhSDRaK0pLR3gKYisyMVZia1NnRE1QQTlyR0VKNVZwVXlBV0FEVXZDRVFHV0hmNGpQN2ZGZlc3T050S0JWY3h3YWFjcVBVdUhzWApwRG5DZVR3V1NuUVp6L05xNmQxWUtsMFdtbkwzTEowemJzRVFGbEQ4MkkwL09MY2dZSDVxMklOZHhBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
      "description": "A base64 encoding of bytes representing the certificate authority data for accessing the cluster."
    }
  }
}
object database
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "alpha",
      "description": "The name of the database."
    }
  }
}
object database_backup
{
  "type": "object",
  "required": [
    "database_name"
  ],
  "properties": {
    "database_name": {
      "type": "string",
      "example": "backend",
      "description": "The name of an existing database cluster from which the backup will be restored."
    },
    "backup_created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2019-01-31T19:25:22Z",
      "description": "The timestamp of an existing database cluster backup in ISO8601 combined date and time format. The most recent backup will be used if excluded."
    }
  }
}
object database_cluster
{
  "type": "object",
  "required": [
    "name",
    "engine",
    "num_nodes",
    "size",
    "region"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30",
      "readOnly": true,
      "description": "A unique ID that can be used to identify and reference a database cluster."
    },
    "name": {
      "type": "string",
      "example": "backend",
      "description": "A unique, human-readable name referring to a database cluster."
    },
    "size": {
      "type": "string",
      "example": "db-s-2vcpu-4gb",
      "description": "The slug identifier representing the size of the nodes in the database cluster."
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "production"
      ],
      "nullable": true,
      "description": "An array of tags that have been applied to the database cluster."
    },
    "rules": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/firewall_rule"
      }
    },
    "users": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/database_user"
      },
      "nullable": true,
      "readOnly": true
    },
    "engine": {
      "enum": [
        "pg",
        "mysql",
        "redis",
        "mongodb",
        "kafka",
        "opensearch"
      ],
      "type": "string",
      "example": "mysql",
      "description": "A slug representing the database engine used for the cluster. The possible values are: \"pg\" for PostgreSQL, \"mysql\" for MySQL, \"redis\" for Redis, \"mongodb\" for MongoDB, \"kafka\" for Kafka and \"opensearch\" for Opensearch."
    },
    "region": {
      "type": "string",
      "example": "nyc3",
      "description": "The slug identifier for the region where the database cluster is located."
    },
    "status": {
      "enum": [
        "creating",
        "online",
        "resizing",
        "migrating",
        "forking"
      ],
      "type": "string",
      "example": "creating",
      "readOnly": true,
      "description": "A string representing the current status of the database cluster."
    },
    "version": {
      "type": "string",
      "example": "8",
      "description": "A string representing the version of the database engine in use for the cluster."
    },
    "db_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "doadmin"
      ],
      "nullable": true,
      "readOnly": true,
      "description": "An array of strings containing the names of databases created in the database cluster."
    },
    "num_nodes": {
      "type": "integer",
      "example": 2,
      "description": "The number of nodes in the database cluster."
    },
    "connection": {
      "allOf": [
        {
          "$ref": "#/components/schemas/database_connection"
        },
        {
          "readOnly": true
        }
      ]
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2019-01-11T18:37:36Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the database cluster was created."
    },
    "project_id": {
      "type": "string",
      "format": "uuid",
      "example": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30",
      "description": "The ID of the project that the database cluster is assigned to. If excluded when creating a new database cluster, it will be assigned to your default project."
    },
    "ui_connection": {
      "allOf": [
        {
          "$ref": "#/components/schemas/opensearch_connection"
        },
        {
          "readOnly": true
        }
      ],
      "description": "The connection details for OpenSearch dashboard. "
    },
    "semantic_version": {
      "type": "string",
      "example": "8.0.28",
      "readOnly": true,
      "description": "A string representing the semantic version of the database engine in use for the cluster."
    },
    "storage_size_mib": {
      "type": "integer",
      "example": 61440,
      "description": "Additional storage added to the cluster, in MiB. If null, no additional storage is added to the cluster, beyond what is provided as a base amount from the 'size' and any previously added additional storage."
    },
    "metrics_endpoints": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/database_service_endpoint"
      },
      "readOnly": true,
      "description": "Public hostname and port of the cluster's metrics endpoint(s). Includes one record for the cluster's primary node and a second entry for the cluster's standby node(s)."
    },
    "maintenance_window": {
      "allOf": [
        {
          "$ref": "#/components/schemas/database_maintenance_window"
        },
        {
          "readOnly": true
        }
      ]
    },
    "private_connection": {
      "allOf": [
        {
          "$ref": "#/components/schemas/database_connection"
        },
        {
          "readOnly": true
        }
      ]
    },
    "standby_connection": {
      "allOf": [
        {
          "$ref": "#/components/schemas/database_connection"
        },
        {
          "readOnly": true
        }
      ]
    },
    "version_end_of_life": {
      "type": "string",
      "example": "2023-11-09T00:00:00Z",
      "readOnly": true,
      "description": "A timestamp referring to the date when the particular version will no longer be supported. If null, the version does not have an end of life timeline."
    },
    "private_network_uuid": {
      "type": "string",
      "example": "d455e75d-4858-4eec-8c95-da2f0a5f93a7",
      "pattern": "^$|[0-9a-f]{8}\\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\\b[0-9a-f]{12}",
      "description": "A string specifying the UUID of the VPC to which the database cluster will be assigned. If excluded, the cluster when creating a new database cluster, it will be assigned to your account's default VPC for the region."
    },
    "standby_private_connection": {
      "allOf": [
        {
          "$ref": "#/components/schemas/database_connection"
        },
        {
          "readOnly": true
        }
      ]
    },
    "version_end_of_availability": {
      "type": "string",
      "example": "2023-05-09T00:00:00Z",
      "readOnly": true,
      "description": "A timestamp referring to the date when the particular version will no longer be available for creating new clusters. If null, the version does not have an end of availability timeline."
    }
  }
}
object database_cluster_resize
{
  "type": "object",
  "required": [
    "size",
    "num_nodes"
  ],
  "properties": {
    "size": {
      "type": "string",
      "example": "db-s-4vcpu-8gb",
      "description": "A slug identifier representing desired the size of the nodes in the database cluster."
    },
    "num_nodes": {
      "type": "integer",
      "format": "int32",
      "example": 3,
      "description": "The number of nodes in the database cluster. Valid values are are 1-3. In addition to the primary node, up to two standby nodes may be added for highly available configurations."
    },
    "storage_size_mib": {
      "type": "integer",
      "example": 61440,
      "description": "Additional storage added to the cluster, in MiB. If null, no additional storage is added to the cluster, beyond what is provided as a base amount from the 'size' and any previously added additional storage."
    }
  }
}
object database_config
{
  "type": "object",
  "properties": {
    "config": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/mysql"
        },
        {
          "$ref": "#/components/schemas/postgres"
        },
        {
          "$ref": "#/components/schemas/redis"
        },
        {
          "$ref": "#/components/schemas/mongo"
        },
        {
          "$ref": "#/components/schemas/kafka"
        }
      ]
    }
  }
}
object database_connection
{
  "type": "object",
  "properties": {
    "ssl": {
      "type": "boolean",
      "example": true,
      "readOnly": true,
      "description": "A boolean value indicating if the connection should be made over SSL."
    },
    "uri": {
      "type": "string",
      "example": "postgres://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require",
      "readOnly": true,
      "description": "A connection string in the format accepted by the `psql` command. This is provided as a convenience and should be able to be constructed by the other attributes."
    },
    "host": {
      "type": "string",
      "example": "backend-do-user-19081923-0.db.ondigitalocean.com",
      "readOnly": true,
      "description": "The FQDN pointing to the database cluster's current primary node."
    },
    "port": {
      "type": "integer",
      "example": 25060,
      "readOnly": true,
      "description": "The port on which the database cluster is listening."
    },
    "user": {
      "type": "string",
      "example": "doadmin",
      "readOnly": true,
      "description": "The default user for the database."
    },
    "database": {
      "type": "string",
      "example": "defaultdb",
      "readOnly": true,
      "description": "The name of the default database."
    },
    "password": {
      "type": "string",
      "example": "wv78n3zpz42xezdk",
      "readOnly": true,
      "description": "The randomly generated password for the default user."
    }
  }
}
object database_layout_option
{
  "type": "object",
  "properties": {
    "sizes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "db-s-1vcpu-1gb",
        "db-s-1vcpu-2gb"
      ],
      "readOnly": true,
      "description": "An array of objects containing the slugs available with various node counts"
    },
    "num_nodes": {
      "type": "integer",
      "example": 1
    }
  }
}
object database_layout_options
{
  "type": "object",
  "properties": {
    "layouts": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/database_layout_option"
      },
      "readOnly": true,
      "description": "An array of objects, each indicating the node sizes (otherwise referred to as slugs) that are available with various numbers of nodes in the database cluster. Each slugs denotes the node's identifier, CPU, and RAM (in that order)."
    }
  }
}
object database_maintenance_window
{
  "type": "object",
  "nullable": true,
  "required": [
    "day",
    "hour"
  ],
  "properties": {
    "day": {
      "type": "string",
      "example": "tuesday",
      "description": "The day of the week on which to apply maintenance updates."
    },
    "hour": {
      "type": "string",
      "example": "14:00",
      "description": "The hour in UTC at which maintenance updates will be applied in 24 hour format."
    },
    "pending": {
      "type": "boolean",
      "example": true,
      "readOnly": true,
      "description": "A boolean value indicating whether any maintenance is scheduled to be performed in the next window."
    },
    "description": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "Update TimescaleDB to version 1.2.1",
        "Upgrade to PostgreSQL 11.2 and 10.7 bugfix releases"
      ],
      "readOnly": true,
      "description": "A list of strings, each containing information about a pending maintenance update."
    }
  }
}
object database_metrics_credentials
{
  "type": "object",
  "properties": {
    "credentials": {
      "$ref": "#/components/schemas/databases_basic_auth_credentials"
    }
  }
}
object database_region_options
{
  "type": "object",
  "properties": {
    "regions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "ams3",
        "blr1"
      ],
      "readOnly": true,
      "description": "An array of strings containing the names of available regions"
    }
  }
}
object database_replica
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30",
      "readOnly": true,
      "description": "A unique ID that can be used to identify and reference a database replica."
    },
    "name": {
      "type": "string",
      "example": "read-nyc3-01",
      "description": "The name to give the read-only replicating"
    },
    "size": {
      "type": "string",
      "example": "db-s-2vcpu-4gb",
      "writeOnly": true,
      "description": "A slug identifier representing the size of the node for the read-only replica. The size of the replica must be at least as large as the node size for the database cluster from which it is replicating."
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "production"
      ],
      "description": "A flat array of tag names as strings to apply to the read-only replica after it is created. Tag names can either be existing or new tags."
    },
    "region": {
      "type": "string",
      "example": "nyc3",
      "description": "A slug identifier for the region where the read-only replica will be located. If excluded, the replica will be placed in the same region as the cluster."
    },
    "status": {
      "enum": [
        "creating",
        "online",
        "resizing",
        "migrating",
        "forking"
      ],
      "type": "string",
      "example": "creating",
      "readOnly": true,
      "description": "A string representing the current status of the database cluster."
    },
    "connection": {
      "allOf": [
        {
          "readOnly": true
        },
        {
          "$ref": "#/components/schemas/database_connection"
        }
      ]
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2019-01-11T18:37:36Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the database cluster was created."
    },
    "storage_size_mib": {
      "type": "integer",
      "example": 61440,
      "description": "Additional storage added to the cluster, in MiB. If null, no additional storage is added to the cluster, beyond what is provided as a base amount from the 'size' and any previously added additional storage."
    },
    "private_connection": {
      "allOf": [
        {
          "readOnly": true
        },
        {
          "$ref": "#/components/schemas/database_connection"
        }
      ]
    },
    "private_network_uuid": {
      "type": "string",
      "example": "9423cbad-9211-442f-820b-ef6915e99b5f",
      "description": "A string specifying the UUID of the VPC to which the read-only replica will be assigned. If excluded, the replica will be assigned to your account's default VPC for the region."
    }
  }
}
object database_service_endpoint
{
  "type": "object",
  "properties": {
    "host": {
      "type": "string",
      "example": "backend-do-user-19081923-0.db.ondigitalocean.com",
      "readOnly": true,
      "description": "A FQDN pointing to the database cluster's node(s)."
    },
    "port": {
      "type": "integer",
      "example": 9273,
      "readOnly": true,
      "description": "The port on which a service is listening."
    }
  }
}
object database_user
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "app-01",
      "description": "The name of a database user."
    },
    "role": {
      "enum": [
        "primary",
        "normal"
      ],
      "type": "string",
      "example": "normal",
      "readOnly": true,
      "description": "A string representing the database user's role. The value will be either\n\"primary\" or \"normal\".\n"
    },
    "password": {
      "type": "string",
      "example": "jge5lfxtzhx42iff",
      "readOnly": true,
      "description": "A randomly generated password for the database user."
    },
    "settings": {
      "$ref": "#/components/schemas/user_settings"
    },
    "access_key": {
      "type": "string",
      "example": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBIZMz8pnK6V52\nSVf+CYssOfCQHAx5f0Ou5rYbq3xNh8VHAIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1\nDwGb8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86X\nwrE4oFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3w\nZ2mzZ03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1F\nZRnak/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFX\nfqqbQwuRAgMBAAECggEBAILLmkW0JzOkmLTDNzR0giyRkLoIROqDpfLtjKdwm95l\n9NUBJcU4vCvXQITKt/NhtnNTexcowg8pInb0ksJpg3UGE+4oMNBXVi2UW5MQZ5cm\ncVkQqgXkBF2YAY8FMaB6EML+0En2+dGR/3gIAr221xsFiXe1kHbB8Nb2c/d5HpFt\neRpLVJnK+TxSr78PcZA8DDGlSgwvgimdAaFUNO2OqB9/0E9UPyKk2ycdff/Z6ldF\n0hkCLtdYTTl8Kf/OwjcuTgmA2O3Y8/CoQX/L+oP9Rvt9pWCEfuebiOmHJVPO6Y6x\ngtQVEXwmF1pDHH4Qtz/e6UZTdYeMl9G4aNO2CawwcaYECgYEA57imgSOG4XsJLRh\nGGncV9R/xhy4AbDWLtAMzQRX4ktvKCaHWyQV2XK2we/cu29NLv2Y89WmerTNPOU+\nP8+pB31uty2ELySVn15QhKpQClVEAlxCnnNjXYrii5LOM80+lVmxvQwxVd8Yz8nj\nIntyioXNBEnYS7V2RxxFGgFun1cCgYEA1V3W+Uyamhq8JS5EY0FhyGcXdHd70K49\nW1ou7McIpncf9tM9acLS1hkI98rd2T69Zo8mKoV1V2hjFaKUYfNys6tTkYWeZCcJ\n3rW44j9DTD+FmmjcX6b8DzfybGLehfNbCw6n67/r45DXIV/fk6XZfkx6IEGO4ODt\nNfnvx4TuI1cCgYBACDiKqwSUvmkUuweOo4IuCxyb5Ee8v98P5JIE/VRDxlCbKbpx\npxEam6aBBQVcDi+n8o0H3WjjlKc6UqbW/01YMoMrvzotxNBLz8Y0QtQHZvR6KoCG\nRKCKstxTcWflzKuknbqN4RapAhNbKBDJ8PMSWfyDWNyaXzSmBdvaidbF1QKBgDI0\no4oD0Xkjg1QIYAUu9FBQmb9JAjRnW36saNBEQS/SZg4RRKknM683MtoDvVIKJk0E\nsAlfX+4SXQZRPDMUMtA+Jyrd0xhj6zmhbwClvDMr20crF3fWdgcqtft1BEFmsuyW\nJUMe5OWmRkjPI2+9ncDPRAllA7a8lnSV/Crph5N/AoGBAIK249temKrGe9pmsmAo\nQbNuYSmwpnMoAqdHTrl70HEmK7ob6SIVmsR8QFAkH7xkYZc4Bxbx4h1bdpozGB+/\nAangbiaYJcAOD1QyfiFbflvI1RFeHgrk7VIafeSeQv6qu0LLMi2zUbpgVzxt78Wg\neTuK2xNR0PIM8OI7pRpgyj1I\n-----END PRIVATE KEY-----",
      "readOnly": true,
      "description": "Access key for TLS client authentication. (Kafka only)"
    },
    "access_cert": {
      "type": "string",
      "example": "-----BEGIN CERTIFICATE-----\nMIIFFjCCA/6gAwIBAgISA0AznUJmXhu08/89ZuSPC/kRMA0GCSqGSIb3DQEBCwUA\nMEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD\nExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjExMjQwMDIzMDBaFw0x\nNzAyMjIwMDIzMDBaMCQxIjAgBgNVBAMTGWNsb3VkLmFuZHJld3NvbWV0aGluZy5j\nb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBIZMz8pnK6V52SVf+\nCYssOfCQHAx5f0Ou5rYbq3xNh8VWHIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1DwGb\n8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86XwrE4\noFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3wZ2mz\nZ03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1FZRna\nk/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFXfqqb\nQwuRAgMBAAGjggIaMIICFjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB\nBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLsAFcxAhFX1\nMbCnzr9hEO5rL4jqMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAG\nCCsGAQUFBwEBBGQwYjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgzLmxl\ndHNlbmNyeXB0Lm9yZy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5s\nZXRzZW5jcnlwdC5vcmcvMCQGA1UdEQQdMBuCGWNsb3VkLmFuZHJld3NvbWV0aGlu\nZy5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgWrgeYGCysGAQQBgt8TAQEBMIHW\nMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYB\nBQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1\ncG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSQ2ziBhY2NvcmRhbmNlIHdp\ndGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNl\nbmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAOZVQvrjM\nPKXLARTjB5XsgfyDN3/qwLl7SmwGkPe+B+9FJpfScYG1JzVuCj/SoaPaK34G4x/e\niXwlwOXtMOtqjQYzNu2Pr2C+I+rVmaxIrCUXFmC205IMuUBEeWXG9Y/HvXQLPabD\nD3Gdl5+Feink9SDRP7G0HaAwq13hI7ARxkL9p+UIY39X0dV3WOboW2Re8nrkFXJ7\nq9Z6shK5QgpBfsLjtjNsQzaGV3ve1gOg25aTJGearBWOvEjJNA1wGMoKVXOtYwm/\nWyWoVdCQ8HmconcbJB6xc0UZ1EjvzRr5ZIvSa5uHZD0L3m7/kpPWlAlFJ7hHASPu\nUlF1zblDmg2Iaw==\n-----END CERTIFICATE-----",
      "readOnly": true,
      "description": "Access certificate for TLS client authentication. (Kafka only)"
    },
    "mysql_settings": {
      "$ref": "#/components/schemas/mysql_settings"
    }
  }
}
array database_version_availabilities
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/database_version_availability"
  },
  "description": "An array of objects, each indicating the version end-of-life, end-of-availability for various database engines"
}
object database_version_availability
{
  "type": "object",
  "properties": {
    "version": {
      "type": "string",
      "example": "8",
      "description": "The engine version."
    },
    "end_of_life": {
      "type": "string",
      "example": "2023-11-09T00:00:00Z",
      "nullable": true,
      "description": "A timestamp referring to the date when the particular version will no longer be supported. If null, the version does not have an end of life timeline."
    },
    "end_of_availability": {
      "type": "string",
      "example": "2023-05-09T00:00:00Z",
      "nullable": true,
      "description": "A timestamp referring to the date when the particular version will no longer be available for creating new clusters. If null, the version does not have an end of availability timeline."
    }
  }
}
object database_version_options
{
  "type": "object",
  "properties": {
    "versions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "4.4",
        "5.0"
      ],
      "readOnly": true,
      "description": "An array of strings containing the names of available regions"
    }
  }
}
object databases_basic_auth_credentials
{
  "type": "object",
  "properties": {
    "basic_auth_password": {
      "type": "string",
      "example": "password",
      "description": "basic authentication password for metrics HTTP endpoint"
    },
    "basic_auth_username": {
      "type": "string",
      "example": "username",
      "description": "basic authentication username for metrics HTTP endpoint"
    }
  }
}
object destroy_associated_kubernetes_resources
{
  "type": "object",
  "properties": {
    "volumes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "ba49449a-7435-11ea-b89e-0a58ac14480f"
      ],
      "description": "A list of IDs for associated volumes to destroy along with the cluster."
    },
    "load_balancers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "4de7ac8b-495b-4884-9a69-1050c6793cd6"
      ],
      "description": "A list of IDs for associated load balancers to destroy along with the cluster."
    },
    "volume_snapshots": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "edb0478d-7436-11ea-86e6-0a58ac144b91"
      ],
      "description": "A list of IDs for associated volume snapshots to destroy along with the cluster."
    }
  },
  "description": "An object containing the IDs of resources to be destroyed along with their associated with a Kubernetes cluster."
}
object destroyed_associated_resource
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "example": "61486916",
      "description": "The unique identifier for the resource scheduled for deletion."
    },
    "name": {
      "type": "string",
      "example": "ubuntu-s-1vcpu-1gb-nyc1-01-1585758823330",
      "description": "The name of the resource scheduled for deletion."
    },
    "destroyed_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-04-01T18:11:49Z",
      "description": "A time value given in ISO8601 combined date and time format indicating when the resource was destroyed if the request was successful."
    },
    "error_message": {
      "type": "string",
      "example": " ",
      "description": "A string indicating that the resource was not successfully destroyed and providing additional information."
    }
  },
  "description": "An object containing information about a resource scheduled for deletion."
}
string distribution
{
  "enum": [
    "Arch Linux",
    "CentOS",
    "CoreOS",
    "Debian",
    "Fedora",
    "Fedora Atomic",
    "FreeBSD",
    "Gentoo",
    "openSUSE",
    "RancherOS",
    "Rocky Linux",
    "Ubuntu",
    "Unknown"
  ],
  "type": "string",
  "example": "Ubuntu",
  "description": "The name of a custom image's distribution. Currently, the valid values are  `Arch Linux`, `CentOS`, `CoreOS`, `Debian`, `Fedora`, `Fedora Atomic`,  `FreeBSD`, `Gentoo`, `openSUSE`, `RancherOS`, `Rocky Linux`, `Ubuntu`, and `Unknown`.  Any other value will be accepted but ignored, and `Unknown` will be used in its place."
}
object docker_credentials
{
  "type": "object",
  "properties": {
    "auths": {
      "type": "object",
      "properties": {
        "registry.digitalocean.com": {
          "type": "object",
          "properties": {
            "auth": {
              "type": "string",
              "example": "YjdkMDNhNjk0N2IyMTdlZmI2ZjNlYzNiZDM1MDQ1ODI6YjdkMDNhNjk0N2IyMTdlZmI2ZjNlYzNiZDM1MDQ1ODIK",
              "description": "A base64 encoded string containing credentials for the container registry."
            }
          }
        }
      }
    }
  }
}
object domain
{
  "type": "object",
  "properties": {
    "ttl": {
      "type": "integer",
      "example": 1800,
      "nullable": true,
      "readOnly": true,
      "description": "This value is the time to live for the records on this domain, in seconds. This defines the time frame that clients can cache queried information before a refresh should be requested."
    },
    "name": {
      "type": "string",
      "example": "example.com",
      "description": "The name of the domain itself. This should follow the standard domain format of domain.TLD. For instance, `example.com` is a valid domain name."
    },
    "zone_file": {
      "type": "string",
      "example": "$ORIGIN example.com.\n$TTL 1800\nexample.com. IN SOA ns1.digitalocean.com. hostmaster.example.com. 1415982609 10800 3600 604800 1800\nexample.com. 1800 IN NS ns1.digitalocean.com.\nexample.com. 1800 IN NS ns2.digitalocean.com.\nexample.com. 1800 IN NS ns3.digitalocean.com.\nexample.com. 1800 IN A 1.2.3.4\n",
      "nullable": true,
      "readOnly": true,
      "description": "This attribute contains the complete contents of the zone file for the selected domain. Individual domain record resources should be used to get more granular control over records. However, this attribute can also be used to get information about the SOA record, which is created automatically and is not accessible as an individual record resource."
    },
    "ip_address": {
      "type": "string",
      "example": "192.0.2.1",
      "writeOnly": true,
      "description": "This optional attribute may contain an IP address. When provided, an A record will be automatically created pointing to the apex domain."
    }
  }
}
object domain_record
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "example": 28448429,
      "readOnly": true,
      "description": "A unique identifier for each domain record."
    },
    "tag": {
      "type": "string",
      "example": null,
      "nullable": true,
      "description": "The parameter tag for CAA records. Valid values are \"issue\", \"issuewild\", or \"iodef\""
    },
    "ttl": {
      "type": "integer",
      "example": 1800,
      "description": "This value is the time to live for the record, in seconds. This defines the time frame that clients can cache queried information before a refresh should be requested."
    },
    "data": {
      "type": "string",
      "example": "ns1.digitalocean.com",
      "description": "Variable data depending on record type. For example, the \"data\" value for an A record would be the IPv4 address to which the domain will be mapped. For a CAA record, it would contain the domain name of the CA being granted permission to issue certificates."
    },
    "name": {
      "type": "string",
      "example": "@",
      "description": "The host name, alias, or service being defined by the record."
    },
    "port": {
      "type": "integer",
      "example": null,
      "nullable": true,
      "description": "The port for SRV records."
    },
    "type": {
      "type": "string",
      "example": "NS",
      "description": "The type of the DNS record. For example: A, CNAME, TXT, ..."
    },
    "flags": {
      "type": "integer",
      "example": null,
      "nullable": true,
      "description": "An unsigned integer between 0-255 used for CAA records."
    },
    "weight": {
      "type": "integer",
      "example": null,
      "nullable": true,
      "description": "The weight for SRV records."
    },
    "priority": {
      "type": "integer",
      "example": null,
      "nullable": true,
      "description": "The priority for SRV and MX records."
    }
  }
}
object domain_record_a
{
  "allOf": [
    {
      "$ref": "#/components/schemas/domain_record"
    },
    {
      "required": [
        "type",
        "name",
        "data"
      ]
    }
  ]
}
object domain_record_aaaa
{
  "allOf": [
    {
      "$ref": "#/components/schemas/domain_record"
    },
    {
      "required": [
        "type",
        "name",
        "data"
      ]
    }
  ]
}
object domain_record_caa
{
  "allOf": [
    {
      "$ref": "#/components/schemas/domain_record"
    },
    {
      "required": [
        "type",
        "name",
        "data",
        "flags",
        "tag"
      ]
    }
  ]
}
object domain_record_cname
{
  "allOf": [
    {
      "$ref": "#/components/schemas/domain_record"
    },
    {
      "required": [
        "type",
        "name",
        "data"
      ]
    }
  ]
}
object domain_record_mx
{
  "allOf": [
    {
      "$ref": "#/components/schemas/domain_record"
    },
    {
      "required": [
        "type",
        "data",
        "priority"
      ]
    }
  ]
}
object domain_record_ns
{
  "allOf": [
    {
      "$ref": "#/components/schemas/domain_record"
    },
    {
      "required": [
        "type",
        "name",
        "data",
        "flags",
        "tag"
      ]
    }
  ]
}
object domain_record_soa
{
  "allOf": [
    {
      "$ref": "#/components/schemas/domain_record"
    },
    {
      "required": [
        "type",
        "ttl"
      ]
    }
  ]
}
object domain_record_srv
{
  "allOf": [
    {
      "$ref": "#/components/schemas/domain_record"
    },
    {
      "required": [
        "type",
        "name",
        "data",
        "priority",
        "port",
        "flags",
        "tag"
      ]
    }
  ]
}
object domain_record_txt
{
  "allOf": [
    {
      "$ref": "#/components/schemas/domain_record"
    },
    {
      "required": [
        "type",
        "name",
        "data",
        "flags",
        "tag"
      ]
    }
  ]
}
object droplet
{
  "type": "object",
  "required": [
    "id",
    "name",
    "memory",
    "vcpus",
    "disk",
    "locked",
    "status",
    "created_at",
    "features",
    "backup_ids",
    "next_backup_window",
    "snapshot_ids",
    "image",
    "volume_ids",
    "size",
    "size_slug",
    "networks",
    "region",
    "tags"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "example": 3164444,
      "description": "A unique identifier for each Droplet instance. This is automatically generated upon Droplet creation."
    },
    "disk": {
      "type": "integer",
      "example": 25,
      "description": "The size of the Droplet's disk in gigabytes."
    },
    "name": {
      "type": "string",
      "example": "example.com",
      "description": "The human-readable name set for the Droplet instance."
    },
    "size": {
      "$ref": "#/components/schemas/size"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "web",
        "env:prod"
      ],
      "description": "An array of Tags the Droplet has been tagged with."
    },
    "image": {
      "$ref": "#/components/schemas/image"
    },
    "vcpus": {
      "type": "integer",
      "example": 1,
      "description": "The number of virtual CPUs."
    },
    "kernel": {
      "$ref": "#/components/schemas/kernel"
    },
    "locked": {
      "type": "boolean",
      "example": false,
      "description": "A boolean value indicating whether the Droplet has been locked, preventing actions by users."
    },
    "memory": {
      "type": "integer",
      "example": 1024,
      "multipleOf": 8,
      "description": "Memory of the Droplet in megabytes."
    },
    "region": {
      "$ref": "#/components/schemas/region"
    },
    "status": {
      "enum": [
        "new",
        "active",
        "off",
        "archive"
      ],
      "type": "string",
      "example": "active",
      "description": "A status string indicating the state of the Droplet instance. This may be \"new\", \"active\", \"off\", or \"archive\"."
    },
    "features": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "backups",
        "private_networking",
        "ipv6"
      ],
      "description": "An array of features enabled on this Droplet."
    },
    "networks": {
      "type": "object",
      "properties": {
        "v4": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/network_v4"
          }
        },
        "v6": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/network_v6"
          }
        }
      },
      "description": "The details of the network that are configured for the Droplet instance.  This is an object that contains keys for IPv4 and IPv6.  The value of each of these is an array that contains objects describing an individual IP resource allocated to the Droplet.  These will define attributes like the IP address, netmask, and gateway of the specific network depending on the type of network it is."
    },
    "vpc_uuid": {
      "type": "string",
      "example": "760e09ef-dc84-11e8-981e-3cfdfeaae000",
      "description": "A string specifying the UUID of the VPC to which the Droplet is assigned."
    },
    "size_slug": {
      "type": "string",
      "example": "s-1vcpu-1gb",
      "description": "The unique slug identifier for the size of this Droplet."
    },
    "backup_ids": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "example": [
        53893572
      ],
      "description": "An array of backup IDs of any backups that have been taken of the Droplet instance.  Droplet backups are enabled at the time of the instance creation."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-07-21T18:37:44Z",
      "description": "A time value given in ISO8601 combined date and time format that represents when the Droplet was created."
    },
    "volume_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "506f78a4-e098-11e5-ad9f-000f53306ae1"
      ],
      "description": "A flat array including the unique identifier for each Block Storage volume attached to the Droplet."
    },
    "snapshot_ids": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "example": [
        67512819
      ],
      "description": "An array of snapshot IDs of any snapshots created from the Droplet instance."
    },
    "next_backup_window": {
      "type": "object",
      "nullable": true,
      "properties": {
        "end": {
          "type": "string",
          "format": "date-time",
          "example": "2019-12-04T23:00:00Z",
          "description": "A time value given in ISO8601 combined date and time format specifying the end of the Droplet's backup window."
        },
        "start": {
          "type": "string",
          "format": "date-time",
          "example": "2019-12-04T00:00:00Z",
          "description": "A time value given in ISO8601 combined date and time format specifying the start of the Droplet's backup window."
        }
      },
      "description": "The details of the Droplet's backups feature, if backups are configured for the Droplet. This object contains keys for the start and end times of the window during which the backup will start."
    }
  }
}
object droplet_action
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "type": {
      "enum": [
        "enable_backups",
        "disable_backups",
        "reboot",
        "power_cycle",
        "shutdown",
        "power_off",
        "power_on",
        "restore",
        "password_reset",
        "resize",
        "rebuild",
        "rename",
        "change_kernel",
        "enable_ipv6",
        "snapshot"
      ],
      "type": "string",
      "example": "reboot",
      "description": "The type of action to initiate for the Droplet."
    }
  },
  "description": "Specifies the action that will be taken on the Droplet."
}
object droplet_action_change_kernel
{
  "allOf": [
    {
      "$ref": "#/components/schemas/droplet_action"
    },
    {
      "type": "object",
      "properties": {
        "kernel": {
          "type": "integer",
          "example": 12389723,
          "description": "A unique number used to identify and reference a specific kernel."
        }
      }
    }
  ]
}
object droplet_action_rebuild
{
  "allOf": [
    {
      "$ref": "#/components/schemas/droplet_action"
    },
    {
      "type": "object",
      "properties": {
        "image": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "integer"
            }
          ],
          "example": "ubuntu-20-04-x64",
          "description": "The image ID of a public or private image or the slug identifier for a public image. The Droplet will be rebuilt using this image as its base."
        }
      }
    }
  ]
}
object droplet_action_rename
{
  "allOf": [
    {
      "$ref": "#/components/schemas/droplet_action"
    },
    {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "example": "nifty-new-name",
          "description": "The new name for the Droplet."
        }
      }
    }
  ]
}
object droplet_action_resize
{
  "allOf": [
    {
      "$ref": "#/components/schemas/droplet_action"
    },
    {
      "type": "object",
      "properties": {
        "disk": {
          "type": "boolean",
          "example": true,
          "description": "When `true`, the Droplet's disk will be resized in addition to its RAM and CPU. This is a permanent change and cannot be reversed as a Droplet's disk size cannot be decreased."
        },
        "size": {
          "type": "string",
          "example": "s-2vcpu-2gb",
          "description": "The slug identifier for the size to which you wish to resize the Droplet."
        }
      }
    }
  ]
}
object droplet_action_restore
{
  "allOf": [
    {
      "$ref": "#/components/schemas/droplet_action"
    },
    {
      "type": "object",
      "properties": {
        "image": {
          "type": "integer",
          "example": 12389723,
          "description": "The ID of a backup of the current Droplet instance to restore from."
        }
      }
    }
  ]
}
object droplet_action_snapshot
{
  "allOf": [
    {
      "$ref": "#/components/schemas/droplet_action"
    },
    {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "example": "Nifty New Snapshot",
          "description": "The name to give the new snapshot of the Droplet."
        }
      }
    }
  ]
}
object droplet_create
{
  "type": "object",
  "required": [
    "size",
    "image"
  ],
  "properties": {
    "ipv6": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean indicating whether to enable IPv6 on the Droplet."
    },
    "size": {
      "type": "string",
      "example": "s-1vcpu-1gb",
      "description": "The slug identifier for the size that you wish to select for this Droplet."
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "default": [],
      "example": [
        "env:prod",
        "web"
      ],
      "nullable": true,
      "description": "A flat array of tag names as strings to apply to the Droplet after it is created. Tag names can either be existing or new tags."
    },
    "image": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "integer"
        }
      ],
      "example": "ubuntu-20-04-x64",
      "description": "The image ID of a public or private image or the slug identifier for a public image. This image will be the base image for your Droplet."
    },
    "region": {
      "type": "string",
      "example": "nyc3",
      "description": "The slug identifier for the region that you wish to deploy the Droplet in. If the specific datacenter is not not important, a slug prefix (e.g. `nyc`) can be used to deploy the Droplet in any of the that region's locations (`nyc1`, `nyc2`, or `nyc3`). If the region is omitted from the create request completely, the Droplet may deploy in any region."
    },
    "backups": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean indicating whether automated backups should be enabled for the Droplet."
    },
    "volumes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "default": [],
      "example": [
        "12e97116-7280-11ed-b3d0-0a58ac146812"
      ],
      "description": "An array of IDs for block storage volumes that will be attached to the Droplet once created. The volumes must not already be attached to an existing Droplet."
    },
    "ssh_keys": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "integer"
          }
        ]
      },
      "default": [],
      "example": [
        289794,
        "3b:16:e4:bf:8b:00:8b:b8:59:8c:a9:d3:f0:19:fa:45"
      ],
      "description": "An array containing the IDs or fingerprints of the SSH keys that you wish to embed in the Droplet's root account upon creation."
    },
    "vpc_uuid": {
      "type": "string",
      "example": "760e09ef-dc84-11e8-981e-3cfdfeaae000",
      "description": "A string specifying the UUID of the VPC to which the Droplet will be assigned. If excluded, the Droplet will be assigned to your account's default VPC for the region."
    },
    "user_data": {
      "type": "string",
      "example": "#cloud-config\nruncmd:\n  - touch /test.txt\n",
      "description": "A string containing 'user data' which may be used to configure the Droplet on first boot, often a 'cloud-config' file or Bash script. It must be plain text and may not exceed 64 KiB in size."
    },
    "monitoring": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean indicating whether to install the DigitalOcean agent for monitoring."
    },
    "private_networking": {
      "type": "boolean",
      "default": false,
      "example": true,
      "deprecated": true,
      "description": "This parameter has been deprecated. Use `vpc_uuid` instead to specify a VPC network for the Droplet. If no `vpc_uuid` is provided, the Droplet will be placed in your account's default VPC for the region."
    },
    "with_droplet_agent": {
      "type": "boolean",
      "example": true,
      "description": "A boolean indicating whether to install the DigitalOcean agent used for providing access to the Droplet web console in the control panel. By default, the agent is installed on new Droplets but installation errors (i.e. OS not supported) are ignored. To prevent it from being installed, set to `false`. To make installation errors fatal, explicitly set it to `true`."
    }
  }
}
object droplet_multi_create
{
  "allOf": [
    {
      "type": "object",
      "required": [
        "names"
      ],
      "properties": {
        "names": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9]?[a-z0-9A-Z.\\-]*[a-z0-9A-Z]$",
            "maxLength": 255
          },
          "example": [
            "sub-01.example.com",
            "sub-02.example.com"
          ],
          "description": "An array of human human-readable strings you wish to use when displaying the Droplet name. Each name, if set to a domain name managed in the DigitalOcean DNS management system, will configure a PTR record for the Droplet. Each name set during creation will also determine the hostname for the Droplet in its internal configuration."
        }
      }
    },
    {
      "$ref": "#/components/schemas/droplet_create"
    }
  ],
  "title": "Multiple Droplet Request"
}
object droplet_single_create
{
  "allOf": [
    {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "example": "example.com",
          "pattern": "^[a-zA-Z0-9]?[a-z0-9A-Z.\\-]*[a-z0-9A-Z]$",
          "maxLength": 255,
          "description": "The human-readable string you wish to use when displaying the Droplet name. The name, if set to a domain name managed in the DigitalOcean DNS management system, will configure a PTR record for the Droplet. The name set during creation will also determine the hostname for the Droplet in its internal configuration."
        }
      }
    },
    {
      "$ref": "#/components/schemas/droplet_create"
    }
  ],
  "title": "Single Droplet Request"
}
object droplet_snapshot
{
  "allOf": [
    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "example": 6372321,
          "description": "The unique identifier for the snapshot or backup."
        }
      }
    },
    {
      "$ref": "#/components/schemas/snapshots_base"
    },
    {
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "enum": [
            "snapshot",
            "backup"
          ],
          "type": "string",
          "example": "snapshot",
          "description": "Describes the kind of image. It may be one of `snapshot` or `backup`. This specifies whether an image is a user-generated Droplet snapshot or automatically created Droplet backup."
        }
      }
    }
  ]
}
object error
{
  "type": "object",
  "required": [
    "id",
    "message"
  ],
  "properties": {
    "id": {
      "type": "string",
      "example": "not_found",
      "description": "A short identifier corresponding to the HTTP status code returned. For  example, the ID for a response returning a 404 status code would be \"not_found.\""
    },
    "message": {
      "type": "string",
      "example": "The resource you were accessing could not be found.",
      "description": "A message providing additional information about the error, including  details to help resolve it when possible."
    },
    "request_id": {
      "type": "string",
      "example": "4d9d8375-3c56-4925-a3e7-eb137fed17e9",
      "description": "Optionally, some endpoints may include a request ID that should be  provided when reporting bugs or opening support tickets to help  identify the issue."
    }
  }
}
object error_with_root_causes
{
  "type": "object",
  "required": [
    "error",
    "root_causes"
  ],
  "properties": {
    "error": {
      "type": "string",
      "example": "not_found",
      "description": "A message providing information about the error."
    },
    "messages": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": null,
      "nullable": true,
      "description": "A list of error messages."
    },
    "root_causes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [],
      "description": "A list of underlying causes for the error, including details to help  resolve it when possible."
    }
  }
}
object events_logs
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "example": "pe8u2huh",
      "description": "ID of the particular event."
    },
    "event_type": {
      "enum": [
        "cluster_maintenance_perform",
        "cluster_master_promotion",
        "cluster_create",
        "cluster_update",
        "cluster_delete",
        "cluster_poweron",
        "cluster_poweroff"
      ],
      "type": "string",
      "example": "cluster_create",
      "description": "Type of the event."
    },
    "create_time": {
      "type": "string",
      "example": "2020-10-29T15:57:38Z",
      "description": "The time of the generation of a event."
    },
    "cluster_name": {
      "type": "string",
      "example": "sample_cluster",
      "description": "The name of cluster."
    }
  }
}
string eviction_policy_model
{
  "enum": [
    "noeviction",
    "allkeys_lru",
    "allkeys_random",
    "volatile_lru",
    "volatile_random",
    "volatile_ttl"
  ],
  "type": "string",
  "example": "allkeys_lru",
  "description": "A string specifying the desired eviction policy for the Redis cluster.\n\n- `noeviction`: Don't evict any data, returns error when memory limit is reached.\n- `allkeys_lru:` Evict any key, least recently used (LRU) first.\n- `allkeys_random`: Evict keys in a random order.\n- `volatile_lru`: Evict keys with expiration only, least recently used (LRU) first.\n- `volatile_random`: Evict keys with expiration only in a random order.\n- `volatile_ttl`: Evict keys with expiration only, shortest time-to-live (TTL) first."
}
object firewall
{
  "type": "object",
  "allOf": [
    {
      "properties": {
        "id": {
          "type": "string",
          "example": "bb4b2611-3d72-467b-8602-280330ecd65c",
          "readOnly": true,
          "description": "A unique ID that can be used to identify and reference a firewall."
        },
        "name": {
          "type": "string",
          "example": "firewall",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.-]+$",
          "description": "A human-readable name for a firewall. The name must begin with an alphanumeric character. Subsequent characters must either be alphanumeric characters, a period (.), or a dash (-)."
        },
        "tags": {
          "allOf": [
            {
              "$ref": "#/components/schemas/tags_array"
            },
            {
              "example": "gateway",
              "description": "An array containing the names of the Tags assigned to the firewall."
            }
          ]
        },
        "status": {
          "enum": [
            "waiting",
            "succeeded",
            "failed"
          ],
          "type": "string",
          "example": "waiting",
          "readOnly": true,
          "description": "A status string indicating the current state of the firewall. This can be \"waiting\", \"succeeded\", or \"failed\"."
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "example": "2020-05-23T21:24:00Z",
          "readOnly": true,
          "description": "A time value given in ISO8601 combined date and time format that represents when the firewall was created."
        },
        "droplet_ids": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "example": [
            8043964
          ],
          "nullable": true,
          "description": "An array containing the IDs of the Droplets assigned to the firewall."
        },
        "pending_changes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "example": "waiting"
              },
              "removing": {
                "type": "boolean",
                "example": false
              },
              "droplet_id": {
                "type": "integer",
                "example": 8043964
              }
            }
          },
          "example": [
            {
              "status": "waiting",
              "removing": false,
              "droplet_id": 8043964
            }
          ],
          "readOnly": true,
          "description": "An array of objects each containing the fields \"droplet_id\", \"removing\", and \"status\". It is provided to detail exactly which Droplets are having their security policies updated. When empty, all changes have been successfully applied."
        }
      }
    },
    {
      "$ref": "#/components/schemas/firewall_rules"
    }
  ]
}
object firewall_rule
{
  "type": "object",
  "required": [
    "type",
    "value"
  ],
  "properties": {
    "type": {
      "enum": [
        "droplet",
        "k8s",
        "ip_addr",
        "tag",
        "app"
      ],
      "type": "string",
      "example": "droplet",
      "description": "The type of resource that the firewall rule allows to access the database cluster."
    },
    "uuid": {
      "type": "string",
      "example": "79f26d28-ea8a-41f2-8ad8-8cfcdd020095",
      "pattern": "^$|[0-9a-f]{8}\\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\\b[0-9a-f]{12}",
      "description": "A unique ID for the firewall rule itself."
    },
    "value": {
      "type": "string",
      "example": "ff2a6c52-5a44-4b63-b99c-0e98e7a63d61",
      "description": "The ID of the specific resource, the name of a tag applied to a group of resources, or the IP address that the firewall rule allows to access the database cluster."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2019-01-11T18:37:36Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the firewall rule was created."
    },
    "cluster_uuid": {
      "type": "string",
      "example": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30",
      "pattern": "^$|[0-9a-f]{8}\\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\\b[0-9a-f]{12}",
      "description": "A unique ID for the database cluster to which the rule is applied."
    }
  }
}
object firewall_rule_base
{
  "type": "object",
  "required": [
    "protocol",
    "ports"
  ],
  "properties": {
    "ports": {
      "type": "string",
      "example": "8000",
      "description": "The ports on which traffic will be allowed specified as a string containing a single port, a range (e.g. \"8000-9000\"), or \"0\" when all ports are open for a protocol. For ICMP rules this parameter will always return \"0\"."
    },
    "protocol": {
      "enum": [
        "tcp",
        "udp",
        "icmp"
      ],
      "type": "string",
      "example": "tcp",
      "description": "The type of traffic to be allowed. This may be one of `tcp`, `udp`, or `icmp`."
    }
  }
}
object firewall_rule_target
{
  "type": "object",
  "properties": {
    "tags": {
      "allOf": [
        {
          "$ref": "#/components/schemas/tags_array"
        },
        {
          "example": [
            "frontend"
          ],
          "description": "An array containing the names of Tags corresponding to groups of Droplets to which the firewall will allow traffic."
        }
      ]
    },
    "addresses": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "1.2.3.4",
        "18.0.0.0/8"
      ],
      "description": "An array of strings containing the IPv4 addresses, IPv6 addresses, IPv4 CIDRs, and/or IPv6 CIDRs to which the firewall will allow traffic."
    },
    "droplet_ids": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "example": [
        8043964
      ],
      "description": "An array containing the IDs of the Droplets to which the firewall will allow traffic."
    },
    "kubernetes_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "41b74c5d-9bd0-5555-5555-a57c495b81a3"
      ],
      "description": "An array containing the IDs of the Kubernetes clusters to which the firewall will allow traffic."
    },
    "load_balancer_uids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "4de7ac8b-495b-4884-9a69-1050c6793cd6"
      ],
      "description": "An array containing the IDs of the load balancers to which the firewall will allow traffic."
    }
  }
}
object firewall_rules
{
  "type": "object",
  "properties": {
    "inbound_rules": {
      "type": "array",
      "items": {
        "allOf": [
          {
            "$ref": "#/components/schemas/firewall_rule_base"
          },
          {
            "required": [
              "sources"
            ],
            "properties": {
              "sources": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/firewall_rule_target"
                  },
                  {
                    "description": "An object specifying locations from which inbound traffic will be accepted."
                  }
                ]
              }
            }
          }
        ]
      },
      "nullable": true
    },
    "outbound_rules": {
      "type": "array",
      "items": {
        "allOf": [
          {
            "$ref": "#/components/schemas/firewall_rule_base"
          },
          {
            "required": [
              "destinations"
            ],
            "properties": {
              "destinations": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/firewall_rule_target"
                  },
                  {
                    "description": "An object specifying locations to which outbound traffic that will be allowed."
                  }
                ]
              }
            }
          }
        ]
      },
      "nullable": true
    }
  }
}
object floatingIPsAction
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "type": {
      "enum": [
        "assign",
        "unassign"
      ],
      "type": "string",
      "description": "The type of action to initiate for the floating IP."
    }
  },
  "discriminator": {
    "mapping": {
      "assign": "#/components/schemas/floating_ip_action_assign",
      "unassign": "#/components/schemas/floating_ip_action_unassign"
    },
    "propertyName": "type"
  }
}
object floating_ip
{
  "type": "object",
  "properties": {
    "ip": {
      "type": "string",
      "format": "ipv4",
      "example": "45.55.96.47",
      "description": "The public IP address of the floating IP. It also serves as its identifier."
    },
    "locked": {
      "type": "boolean",
      "example": true,
      "description": "A boolean value indicating whether or not the floating IP has pending actions preventing new ones from being submitted."
    },
    "region": {
      "allOf": [
        {
          "$ref": "#/components/schemas/region"
        },
        {
          "type": "object",
          "description": "The region that the floating IP is reserved to. When you query a floating IP, the entire region object will be returned."
        }
      ]
    },
    "droplet": {
      "anyOf": [
        {
          "type": "object",
          "title": "null",
          "nullable": true,
          "description": "If the floating IP is not assigned to a Droplet, the value will be null."
        },
        {
          "$ref": "#/components/schemas/droplet"
        }
      ],
      "example": null,
      "description": "The Droplet that the floating IP has been assigned to. When you query a floating IP, if it is assigned to a Droplet, the entire Droplet object will be returned. If it is not assigned, the value will be null."
    },
    "project_id": {
      "type": "string",
      "format": "uuid",
      "example": "746c6152-2fa2-11ed-92d3-27aaa54e4988",
      "description": "The UUID of the project to which the reserved IP currently belongs."
    }
  }
}
object floating_ip_action_assign
{
  "allOf": [
    {
      "$ref": "#/components/schemas/floatingIPsAction"
    },
    {
      "type": "object",
      "required": [
        "type",
        "droplet_id"
      ],
      "properties": {
        "droplet_id": {
          "type": "integer",
          "example": 758604968,
          "description": "The ID of the Droplet that the floating IP will be assigned to."
        }
      }
    }
  ]
}
object floating_ip_action_unassign
{
  "allOf": [
    {
      "$ref": "#/components/schemas/floatingIPsAction"
    },
    {
      "type": "object",
      "required": [
        "type"
      ]
    }
  ]
}
object floating_ip_create
{
  "oneOf": [
    {
      "type": "object",
      "title": "Assign to Droplet",
      "required": [
        "droplet_id"
      ],
      "properties": {
        "droplet_id": {
          "type": "integer",
          "example": 2457247,
          "description": "The ID of the Droplet that the floating IP will be assigned to."
        }
      }
    },
    {
      "type": "object",
      "title": "Reserve to Region",
      "required": [
        "region"
      ],
      "properties": {
        "region": {
          "type": "string",
          "example": "nyc3",
          "description": "The slug identifier for the region the floating IP will be reserved to."
        },
        "project_id": {
          "type": "string",
          "format": "uuid",
          "example": "746c6152-2fa2-11ed-92d3-27aaa54e4988",
          "description": "The UUID of the project to which the floating IP will be assigned."
        }
      }
    }
  ]
}
object forward_links
{
  "allOf": [
    {
      "$ref": "#/components/schemas/link_to_last_page"
    },
    {
      "$ref": "#/components/schemas/link_to_next_page"
    }
  ]
}
object forwarding_rule
{
  "type": "object",
  "required": [
    "entry_protocol",
    "entry_port",
    "target_protocol",
    "target_port"
  ],
  "properties": {
    "entry_port": {
      "type": "integer",
      "example": 443,
      "description": "An integer representing the port on which the load balancer instance will listen."
    },
    "target_port": {
      "type": "integer",
      "example": 80,
      "description": "An integer representing the port on the backend Droplets to which the load balancer will send traffic."
    },
    "certificate_id": {
      "type": "string",
      "example": "892071a0-bb95-49bc-8021-3afd67a210bf",
      "description": "The ID of the TLS certificate used for SSL termination if enabled."
    },
    "entry_protocol": {
      "enum": [
        "http",
        "https",
        "http2",
        "http3",
        "tcp",
        "udp"
      ],
      "type": "string",
      "example": "https",
      "description": "The protocol used for traffic to the load balancer. The possible values are: `http`, `https`, `http2`, `http3`, `tcp`, or `udp`. If you set the  `entry_protocol` to `udp`, the `target_protocol` must be set to `udp`.  When using UDP, the load balancer requires that you set up a health  check with a port that uses TCP, HTTP, or HTTPS to work properly.\n"
    },
    "target_protocol": {
      "enum": [
        "http",
        "https",
        "http2",
        "tcp",
        "udp"
      ],
      "type": "string",
      "example": "http",
      "description": "The protocol used for traffic from the load balancer to the backend Droplets. The possible values are: `http`, `https`, `http2`, `tcp`, or `udp`. If you set the `target_protocol` to `udp`, the `entry_protocol` must be set to  `udp`. When using UDP, the load balancer requires that you set up a health  check with a port that uses TCP, HTTP, or HTTPS to work properly.\n"
    },
    "tls_passthrough": {
      "type": "boolean",
      "example": false,
      "description": "A boolean value indicating whether SSL encrypted traffic will be passed through to the backend Droplets."
    }
  },
  "description": "An object specifying a forwarding rule for a load balancer."
}
object garbage_collection
{
  "type": "object",
  "properties": {
    "uuid": {
      "type": "string",
      "example": "eff0feee-49c7-4e8f-ba5c-a320c109c8a8",
      "description": "A string specifying the UUID of the garbage collection."
    },
    "status": {
      "enum": [
        "requested",
        "waiting for write JWTs to expire",
        "scanning manifests",
        "deleting unreferenced blobs",
        "cancelling",
        "failed",
        "succeeded",
        "cancelled"
      ],
      "type": "string",
      "example": "requested",
      "description": "The current status of this garbage collection."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-10-30T21:03:24Z",
      "description": "The time the garbage collection was created."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-10-30T21:03:44Z",
      "description": "The time the garbage collection was last updated."
    },
    "freed_bytes": {
      "type": "integer",
      "example": 667,
      "description": "The number of bytes freed as a result of this garbage collection."
    },
    "blobs_deleted": {
      "type": "integer",
      "example": 42,
      "description": "The number of blobs deleted as a result of this garbage collection."
    },
    "registry_name": {
      "type": "string",
      "example": "example",
      "description": "The name of the container registry."
    }
  }
}
object health_check
{
  "type": "object",
  "properties": {
    "path": {
      "type": "string",
      "default": "/",
      "example": "/",
      "description": "The path on the backend Droplets to which the load balancer instance will send a request."
    },
    "port": {
      "type": "integer",
      "default": 80,
      "example": 80,
      "description": "An integer representing the port on the backend Droplets on which the health check will attempt a connection."
    },
    "protocol": {
      "enum": [
        "http",
        "https",
        "tcp"
      ],
      "type": "string",
      "default": "http",
      "example": "http",
      "description": "The protocol used for health checks sent to the backend Droplets. The possible values are `http`, `https`, or `tcp`."
    },
    "healthy_threshold": {
      "type": "integer",
      "default": 3,
      "example": 3,
      "description": "The number of times a health check must pass for a backend Droplet to be marked \"healthy\" and be re-added to the pool."
    },
    "unhealthy_threshold": {
      "type": "integer",
      "default": 5,
      "example": 5,
      "description": "The number of times a health check must fail for a backend Droplet to be marked \"unhealthy\" and be removed from the pool."
    },
    "check_interval_seconds": {
      "type": "integer",
      "default": 10,
      "example": 10,
      "description": "The number of seconds between between two consecutive health checks."
    },
    "response_timeout_seconds": {
      "type": "integer",
      "default": 5,
      "example": 5,
      "description": "The number of seconds the load balancer instance will wait for a response until marking a health check as failed."
    }
  },
  "description": "An object specifying health check settings for the load balancer."
}
object image
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "example": 7555620,
      "readOnly": true,
      "description": "A unique number that can be used to identify and reference a specific image."
    },
    "name": {
      "$ref": "#/components/schemas/image_name"
    },
    "slug": {
      "type": "string",
      "example": "nifty1",
      "nullable": true,
      "description": "A uniquely identifying string that is associated with each of the DigitalOcean-provided public images. These can be used to reference a public image as an alternative to the numeric id."
    },
    "tags": {
      "$ref": "#/components/schemas/tags_array"
    },
    "type": {
      "enum": [
        "base",
        "snapshot",
        "backup",
        "custom",
        "admin"
      ],
      "type": "string",
      "example": "snapshot",
      "description": "Describes the kind of image. It may be one of `base`, `snapshot`, `backup`, `custom`, or `admin`. Respectively, this specifies whether an image is a DigitalOcean base OS image, user-generated Droplet snapshot, automatically created Droplet backup, user-provided virtual machine image, or an image used for DigitalOcean managed resources (e.g. DOKS worker nodes)."
    },
    "public": {
      "type": "boolean",
      "example": true,
      "description": "This is a boolean value that indicates whether the image in question is public or not. An image that is public is available to all accounts. A non-public image is only accessible from your account."
    },
    "status": {
      "enum": [
        "NEW",
        "available",
        "pending",
        "deleted",
        "retired"
      ],
      "type": "string",
      "example": "NEW",
      "description": "A status string indicating the state of a custom image. This may be `NEW`,\n `available`, `pending`, `deleted`, or `retired`."
    },
    "regions": {
      "$ref": "#/components/schemas/regions_array"
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-05-04T22:23:02Z",
      "description": "A time value given in ISO8601 combined date and time format that represents when the image was created."
    },
    "description": {
      "$ref": "#/components/schemas/image_description"
    },
    "distribution": {
      "$ref": "#/components/schemas/distribution"
    },
    "error_message": {
      "type": "string",
      "example": " ",
      "description": "A string containing information about errors that may occur when importing\n a custom image."
    },
    "min_disk_size": {
      "type": "integer",
      "example": 20,
      "minimum": 0,
      "nullable": true,
      "description": "The minimum disk size in GB required for a Droplet to use this image."
    },
    "size_gigabytes": {
      "type": "number",
      "format": "float",
      "example": 2.34,
      "nullable": true,
      "description": "The size of the image in gigabytes."
    }
  }
}
object image_action_base
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "type": {
      "enum": [
        "convert",
        "transfer"
      ],
      "type": "string",
      "example": "convert",
      "description": "The action to be taken on the image. Can be either `convert` or `transfer`."
    }
  }
}
object image_action_transfer
{
  "allOf": [
    {
      "$ref": "#/components/schemas/image_action_base"
    },
    {
      "type": "object",
      "required": [
        "type",
        "region"
      ],
      "properties": {
        "region": {
          "$ref": "#/components/schemas/region_slug"
        }
      }
    }
  ]
}
string image_description
{
  "type": "string",
  "example": " ",
  "description": "An optional free-form text field to describe an image."
}
string image_name
{
  "type": "string",
  "example": "Nifty New Snapshot",
  "description": "The display name that has been given to an image.  This is what is shown in the control panel and is generally a descriptive title for the image in question."
}
object image_new_custom
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/image_update"
    },
    {
      "properties": {
        "url": {
          "type": "string",
          "example": "http://cloud-images.ubuntu.com/minimal/releases/bionic/release/ubuntu-18.04-minimal-cloudimg-amd64.img",
          "description": "A URL from which the custom Linux virtual machine image may be retrieved.  The image it points to must be in the raw, qcow2, vhdx, vdi, or vmdk format.  It may be compressed using gzip or bzip2 and must be smaller than 100 GB after being decompressed."
        },
        "tags": {
          "$ref": "#/components/schemas/tags_array"
        },
        "region": {
          "$ref": "#/components/schemas/region_slug"
        }
      }
    }
  ],
  "example": {
    "url": "http://cloud-images.ubuntu.com/minimal/releases/bionic/release/ubuntu-18.04-minimal-cloudimg-amd64.img",
    "name": "ubuntu-18.04-minimal",
    "tags": [
      "base-image",
      "prod"
    ],
    "region": "nyc3",
    "description": "Cloud-optimized image w/ small footprint",
    "distribution": "Ubuntu"
  },
  "required": [
    "name",
    "url",
    "region"
  ],
  "properties": {
    "url": {
      "type": "string",
      "example": "http://cloud-images.ubuntu.com/minimal/releases/bionic/release/ubuntu-18.04-minimal-cloudimg-amd64.img"
    },
    "name": {
      "type": "string",
      "example": "ubuntu-18.04-minimal"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string",
        "example": "base-image"
      }
    },
    "region": {
      "type": "string",
      "example": "nyc3"
    },
    "description": {
      "type": "string",
      "example": "Cloud-optimized image w/ small footprint"
    },
    "distribution": {
      "type": "string",
      "example": "Ubuntu"
    }
  }
}
object image_update
{
  "type": "object",
  "properties": {
    "name": {
      "$ref": "#/components/schemas/image_name"
    },
    "description": {
      "$ref": "#/components/schemas/image_description"
    },
    "distribution": {
      "$ref": "#/components/schemas/distribution"
    }
  }
}
string instance_size_cpu_type
{
  "enum": [
    "UNSPECIFIED",
    "SHARED",
    "DEDICATED"
  ],
  "type": "string",
  "title": "- SHARED: Shared vCPU cores\n - DEDICATED: Dedicated vCPU cores",
  "default": "UNSPECIFIED",
  "example": "SHARED"
}
object invoice_item
{
  "type": "object",
  "properties": {
    "amount": {
      "type": "string",
      "example": "12.34",
      "description": "Billed amount of this invoice item. Billed in USD."
    },
    "product": {
      "type": "string",
      "example": "Kubernetes Clusters",
      "description": "Name of the product being billed in the invoice item."
    },
    "duration": {
      "type": "string",
      "example": "744",
      "description": "Duration of time this invoice item was used and subsequently billed."
    },
    "end_time": {
      "type": "string",
      "example": "2020-02-01T00:00:00Z",
      "description": "Time the invoice item stopped being billed for usage."
    },
    "start_time": {
      "type": "string",
      "example": "2020-01-01T00:00:00Z",
      "description": "Time the invoice item began to be billed for usage."
    },
    "description": {
      "type": "string",
      "example": "a56e086a317d8410c8b4cfd1f4dc9f82",
      "description": "Description of the invoice item."
    },
    "resource_id": {
      "type": "string",
      "example": "2353624",
      "description": "ID of the resource billing in the invoice item if available."
    },
    "project_name": {
      "type": "string",
      "example": "web",
      "description": "Name of the DigitalOcean Project this resource belongs to."
    },
    "duration_unit": {
      "type": "string",
      "example": "Hours",
      "description": "Unit of time for duration."
    },
    "resource_uuid": {
      "type": "string",
      "example": "711157cb-37c8-4817-b371-44fa3504a39c",
      "description": "UUID of the resource billing in the invoice item if available."
    },
    "group_description": {
      "type": "string",
      "example": "my-doks-cluster",
      "description": "Description of the invoice item when it is a grouped set of usage, such  as DOKS or databases."
    }
  }
}
object invoice_preview
{
  "type": "object",
  "properties": {
    "amount": {
      "type": "string",
      "example": "23.45",
      "description": "Total amount of the invoice, in USD.  This will reflect month-to-date usage in the invoice preview."
    },
    "invoice_id": {
      "type": "string",
      "example": "123456789",
      "description": "ID of the invoice. Listed on the face of the invoice PDF as the \"Invoice number\"."
    },
    "updated_at": {
      "type": "string",
      "example": "2020-01-23T06:31:50Z",
      "description": "Time the invoice was last updated.  This is only included with the invoice preview."
    },
    "invoice_uuid": {
      "type": "string",
      "example": "fdabb512-6faf-443c-ba2e-665452332a9e",
      "description": "The UUID of the invoice. The canonical reference for the invoice."
    },
    "invoice_period": {
      "type": "string",
      "example": "2020-01",
      "description": "Billing period of usage for which the invoice is issued, in `YYYY-MM`  format."
    }
  },
  "description": "The invoice preview."
}
object invoice_summary
{
  "type": "object",
  "properties": {
    "taxes": {
      "allOf": [
        {
          "description": "A summary of the taxes contributing to the invoice."
        },
        {
          "$ref": "#/components/schemas/simple_charge"
        }
      ]
    },
    "amount": {
      "type": "string",
      "example": "27.13",
      "description": "Total amount of the invoice, in USD.  This will reflect month-to-date usage in the invoice preview."
    },
    "overages": {
      "allOf": [
        {
          "description": "A summary of the overages contributing to the invoice."
        },
        {
          "$ref": "#/components/schemas/simple_charge"
        }
      ]
    },
    "user_name": {
      "type": "string",
      "example": "Sammy Shark",
      "description": "Name of the DigitalOcean customer being invoiced."
    },
    "invoice_id": {
      "type": "string",
      "example": "123456789",
      "description": "ID of the invoice"
    },
    "user_email": {
      "type": "string",
      "example": "sammy@digitalocean.com",
      "description": "Email of the DigitalOcean customer being invoiced."
    },
    "invoice_uuid": {
      "type": "string",
      "example": "22737513-0ea7-4206-8ceb-98a575af7681",
      "description": "UUID of the invoice"
    },
    "user_company": {
      "type": "string",
      "example": "DigitalOcean",
      "description": "Company of the DigitalOcean customer being invoiced, if set."
    },
    "billing_period": {
      "type": "string",
      "example": "2020-01",
      "description": "Billing period of usage for which the invoice is issued, in `YYYY-MM`  format."
    },
    "product_charges": {
      "allOf": [
        {
          "description": "A summary of the product usage charges contributing to the invoice.  This will include an amount, and grouped aggregates by resource type  under the `items` key."
        },
        {
          "$ref": "#/components/schemas/product_usage_charges"
        }
      ]
    },
    "user_billing_address": {
      "allOf": [
        {
          "description": "The billing address of the customer being invoiced."
        },
        {
          "$ref": "#/components/schemas/billing_address"
        }
      ]
    },
    "credits_and_adjustments": {
      "allOf": [
        {
          "description": "A summary of the credits and adjustments contributing to the invoice."
        },
        {
          "$ref": "#/components/schemas/simple_charge"
        }
      ]
    }
  }
}
object kafka
{
  "type": "object",
  "properties": {
    "log_roll_ms": {
      "type": "integer",
      "example": 1000000,
      "maximum": 9223372036854776000,
      "minimum": 1,
      "description": "The maximum time before a new log segment is rolled out (in milliseconds)."
    },
    "num_partitions": {
      "type": "integer",
      "example": 10,
      "maximum": 1000,
      "minimum": 1,
      "description": "Number of partitions for autocreated topics"
    },
    "log_preallocate": {
      "type": "boolean",
      "example": false,
      "description": "Controls whether to preallocate a file when creating a new segment"
    },
    "compression_type": {
      "enum": [
        "gzip",
        "snappy",
        "lz4",
        "zstd",
        "uncompressed",
        "producer"
      ],
      "type": "string",
      "example": "gzip",
      "description": "Specify the final compression type for a given topic. This configuration accepts the standard compression codecs ('gzip', 'snappy', 'lz4', 'zstd'). It additionally accepts 'uncompressed' which is equivalent to no compression; and 'producer' which means retain the original compression codec set by the producer."
    },
    "log_retention_ms": {
      "type": "integer",
      "example": 100000000,
      "maximum": 9223372036854776000,
      "minimum": -1,
      "description": "The number of milliseconds to keep a log file before deleting it (in milliseconds), If not set, the value in log.retention.minutes is used. If set to -1, no time limit is applied."
    },
    "log_segment_bytes": {
      "type": "integer",
      "example": 100000000,
      "maximum": 1073741824,
      "minimum": 10485760,
      "description": "The maximum size of a single log file"
    },
    "message_max_bytes": {
      "type": "integer",
      "example": 1048588,
      "maximum": 100001200,
      "minimum": 0,
      "description": "The maximum size of message that the server can receive."
    },
    "log_cleanup_policy": {
      "enum": [
        "delete",
        "compact",
        "compact,delete"
      ],
      "type": "string",
      "example": "delete",
      "description": "The default cleanup policy for segments beyond the retention window"
    },
    "log_roll_jitter_ms": {
      "type": "integer",
      "example": 10000000,
      "maximum": 9223372036854776000,
      "minimum": 0,
      "description": "The maximum jitter to subtract from logRollTimeMillis (in milliseconds). If not set, the value in log.roll.jitter.hours is used"
    },
    "log_retention_bytes": {
      "type": "integer",
      "example": 1000000,
      "maximum": 9223372036854776000,
      "minimum": -1,
      "description": "The maximum size of the log before deleting messages"
    },
    "log_retention_hours": {
      "type": "integer",
      "example": 1000000,
      "maximum": 2147483647,
      "minimum": -1,
      "description": "The number of hours to keep a log file before deleting it"
    },
    "min_insync_replicas": {
      "type": "integer",
      "example": 1,
      "maximum": 7,
      "minimum": 1,
      "description": "When a producer sets acks to 'all' (or '-1'), min_insync_replicas specifies the minimum number of replicas that must acknowledge a write for the write to be considered successful."
    },
    "log_flush_interval_ms": {
      "type": "integer",
      "example": 1000000,
      "maximum": 9223372036854776000,
      "minimum": 0,
      "description": "The maximum time in ms that a message in any topic is kept in memory before flushed to disk. If not set, the value in log.flush.scheduler.interval.ms is used"
    },
    "max_connections_per_ip": {
      "type": "integer",
      "example": 512,
      "maximum": 2147483647,
      "minimum": 256,
      "description": "The maximum number of connections allowed from each ip address (defaults to 2147483647)."
    },
    "connections_max_idle_ms": {
      "type": "integer",
      "example": 540000,
      "maximum": 3600000,
      "minimum": 1000,
      "description": "Idle connections timeout: the server socket processor threads close the connections that idle for longer than this."
    },
    "replica_fetch_max_bytes": {
      "type": "integer",
      "example": 2097152,
      "maximum": 104857600,
      "minimum": 1048576,
      "description": "The number of bytes of messages to attempt to fetch for each partition (defaults to 1048576). This is not an absolute maximum, if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that progress can be made."
    },
    "log_index_interval_bytes": {
      "type": "integer",
      "example": 4096,
      "maximum": 104857600,
      "minimum": 0,
      "description": "The interval with which Kafka adds an entry to the offset index"
    },
    "log_index_size_max_bytes": {
      "type": "integer",
      "example": 10485760,
      "maximum": 104857600,
      "minimum": 1048576,
      "description": "The maximum size in bytes of the offset index"
    },
    "socket_request_max_bytes": {
      "type": "integer",
      "example": 20971520,
      "maximum": 209715200,
      "minimum": 10485760,
      "description": "The maximum number of bytes in a socket request (defaults to 104857600)."
    },
    "auto_create_topics_enable": {
      "type": "boolean",
      "example": true,
      "description": "Enable auto creation of topics"
    },
    "offsets_retention_minutes": {
      "type": "integer",
      "example": 10080,
      "maximum": 2147483647,
      "minimum": 1,
      "description": "Log retention window in minutes for offsets topic"
    },
    "default_replication_factor": {
      "type": "integer",
      "example": 2,
      "maximum": 10,
      "minimum": 1,
      "description": "Replication factor for autocreated topics"
    },
    "log_message_timestamp_type": {
      "enum": [
        "CreateTime",
        "LogAppendTime"
      ],
      "type": "string",
      "example": "CreateTime",
      "description": "Define whether the timestamp in the message is message create time or log append time."
    },
    "log_flush_interval_messages": {
      "type": "integer",
      "example": 9223372036854776000,
      "maximum": 9223372036854776000,
      "minimum": 1,
      "description": "The number of messages accumulated on a log partition before messages are flushed to disk"
    },
    "log_segment_delete_delay_ms": {
      "type": "integer",
      "example": 60000,
      "maximum": 3600000,
      "minimum": 0,
      "description": "The amount of time to wait before deleting a file from the filesystem"
    },
    "group_max_session_timeout_ms": {
      "type": "integer",
      "example": 1800000,
      "maximum": 1800000,
      "minimum": 0,
      "description": "The maximum allowed session timeout for registered consumers. Longer timeouts give consumers more time to process messages in between heartbeats at the cost of a longer time to detect failures."
    },
    "group_min_session_timeout_ms": {
      "type": "integer",
      "example": 6000,
      "maximum": 60000,
      "minimum": 0,
      "description": "The minimum allowed session timeout for registered consumers. Longer timeouts give consumers more time to process messages in between heartbeats at the cost of a longer time to detect failures."
    },
    "log_cleaner_delete_retention_ms": {
      "type": "integer",
      "example": 86400000,
      "maximum": 315569260000,
      "minimum": 0,
      "description": "How long are delete records retained?"
    },
    "log_cleaner_min_cleanable_ratio": {
      "type": "number",
      "example": 0.5,
      "maximum": 0.9,
      "minimum": 0.2,
      "description": "Controls log compactor frequency. Larger value means more frequent compactions but also more space wasted for logs. Consider setting log_cleaner_max_compaction_lag_ms to enforce compactions sooner, instead of setting a very high value for this option."
    },
    "group_initial_rebalance_delay_ms": {
      "type": "integer",
      "example": 3000,
      "maximum": 300000,
      "minimum": 0,
      "description": "The amount of time, in milliseconds, the group coordinator will wait for more consumers to join a new group before performing the first rebalance. A longer delay means potentially fewer rebalances, but increases the time until processing begins. The default value for this is 3 seconds. During development and testing it might be desirable to set this to 0 in order to not delay test execution time."
    },
    "replica_fetch_response_max_bytes": {
      "type": "integer",
      "example": 20971520,
      "maximum": 1048576000,
      "minimum": 10485760,
      "description": "Maximum bytes expected for the entire fetch response (defaults to 10485760). Records are fetched in batches, and if the first record batch in the first non-empty partition of the fetch is larger than this value, the record batch will still be returned to ensure that progress can be made. As such, this is not an absolute maximum."
    },
    "log_cleaner_max_compaction_lag_ms": {
      "type": "integer",
      "example": 60000,
      "maximum": 9223372036854776000,
      "minimum": 30000,
      "description": "The maximum amount of time message will remain uncompacted. Only applicable for logs that are being compacted"
    },
    "log_cleaner_min_compaction_lag_ms": {
      "type": "integer",
      "example": 100000,
      "maximum": 9223372036854776000,
      "minimum": 0,
      "description": "The minimum time a message will remain uncompacted in the log. Only applicable for logs that are being compacted."
    },
    "log_message_downconversion_enable": {
      "type": "boolean",
      "example": true,
      "description": "This configuration controls whether down-conversion of message formats is enabled to satisfy consume requests."
    },
    "transaction_state_log_segment_bytes": {
      "type": "integer",
      "example": 104857600,
      "maximum": 2147483647,
      "minimum": 1048576,
      "description": "The transaction topic segment bytes should be kept relatively small in order to facilitate faster log compaction and cache loads (defaults to 104857600 (100 mebibytes))."
    },
    "log_message_timestamp_difference_max_ms": {
      "type": "integer",
      "example": 1000000,
      "maximum": 9223372036854776000,
      "minimum": 0,
      "description": "The maximum difference allowed between the timestamp when a broker receives a message and the timestamp specified in the message"
    },
    "max_incremental_fetch_session_cache_slots": {
      "type": "integer",
      "example": 1000,
      "maximum": 10000,
      "minimum": 1000,
      "description": "The maximum number of incremental fetch sessions that the broker will maintain."
    },
    "producer_purgatory_purge_interval_requests": {
      "type": "integer",
      "example": 100,
      "maximum": 10000,
      "minimum": 10,
      "description": "The purge interval (in number of requests) of the producer request purgatory (defaults to 1000)."
    },
    "transaction_remove_expired_transaction_cleanup_interval_ms": {
      "type": "integer",
      "example": 3600000,
      "maximum": 3600000,
      "minimum": 600000,
      "description": "The interval at which to remove transactions that have expired due to transactional.id.expiration.ms passing (defaults to 3600000 (1 hour))."
    }
  }
}
object kafka_topic
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/kafka_topic_base"
    },
    {
      "properties": {
        "state": {
          "enum": [
            "active",
            "configuring",
            "deleting",
            "unknown"
          ],
          "type": "string",
          "example": "active",
          "description": "The state of the Kafka topic."
        }
      }
    }
  ]
}
object kafka_topic_base
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "events",
      "description": "The name of the Kafka topic."
    },
    "partition_count": {
      "type": "integer",
      "example": 3,
      "description": "The number of partitions available for the topic. On update, this value can only be increased."
    },
    "replication_factor": {
      "type": "integer",
      "example": 2,
      "description": "The number of nodes to replicate data across the cluster."
    }
  }
}
object kafka_topic_config
{
  "type": "object",
  "properties": {
    "flush_ms": {
      "type": "integer",
      "default": 9223372036854776000,
      "example": 9223372036854776000,
      "description": "The flush_ms specifies the maximum time (in ms) that a message is kept in memory before being flushed to disk."
    },
    "segment_ms": {
      "type": "integer",
      "default": 604800000,
      "example": 604800000,
      "minimum": 1,
      "description": "The segment_ms specifies the period of time after which the log will be forced to roll if the segment file isn't full. This ensures that retention can delete or compact old data."
    },
    "preallocate": {
      "type": "boolean",
      "default": false,
      "example": false,
      "description": "The preallocate specifies whether a file should be preallocated on disk when creating a new log segment."
    },
    "retention_ms": {
      "type": "integer",
      "default": 604800000,
      "example": 604800000,
      "description": "The retention_ms specifies the maximum amount of time (in ms) to keep a message before deleting it."
    },
    "segment_bytes": {
      "type": "integer",
      "default": 209715200,
      "example": 209715200,
      "minimum": 14,
      "description": "The segment_bytes specifies the maximum size of a single log file (in bytes)."
    },
    "cleanup_policy": {
      "enum": [
        "delete",
        "compact",
        "compact_delete"
      ],
      "type": "string",
      "default": "delete",
      "example": "delete",
      "description": "The cleanup_policy sets the retention policy to use on log segments. 'delete' will discard old segments when retention time/size limits are reached. 'compact' will enable log compaction, resulting in retention of the latest value for each key."
    },
    "flush_messages": {
      "type": "integer",
      "default": 9223372036854776000,
      "example": 9223372036854776000,
      "description": "The flush_messages specifies the number of messages to accumulate on a log partition before messages are flushed to disk."
    },
    "retention_bytes": {
      "type": "integer",
      "default": -1,
      "example": 1000000,
      "description": "The retention_bytes specifies the maximum size of the log (in bytes) before deleting messages. -1 indicates that there is no limit."
    },
    "compression_type": {
      "enum": [
        "producer",
        "gzip",
        "snappy",
        "Iz4",
        "zstd",
        "uncompressed"
      ],
      "type": "string",
      "default": "producer",
      "example": "producer",
      "description": "The compression_type specifies the compression type of the topic."
    },
    "max_message_bytes": {
      "type": "integer",
      "default": 1048588,
      "example": 1048588,
      "description": "The max_messages_bytes specifies the largest record batch size (in bytes) that can be sent to the server.  This is calculated after compression if compression is enabled."
    },
    "segment_jitter_ms": {
      "type": "integer",
      "default": 0,
      "example": 0,
      "description": "The segment_jitter_ms specifies the maximum random jitter subtracted from the scheduled segment roll time to avoid thundering herds of segment rolling."
    },
    "delete_retention_ms": {
      "type": "integer",
      "default": 86400000,
      "example": 86400000,
      "description": "The delete_retention_ms specifies how long (in ms) to retain delete tombstone markers for topics."
    },
    "min_insync_replicas": {
      "type": "integer",
      "default": 1,
      "example": 1,
      "minimum": 1,
      "description": "The min_insync_replicas specifies the number of replicas that must ACK a write for the write to be considered successful."
    },
    "file_delete_delay_ms": {
      "type": "integer",
      "default": 60000,
      "example": 60000,
      "description": "The file_delete_delay_ms specifies the time (in ms) to wait before deleting a file from the filesystem."
    },
    "index_interval_bytes": {
      "type": "integer",
      "default": 4096,
      "example": 4096,
      "description": "The index_interval_bytes specifies the number of bytes between entries being added into te offset index."
    },
    "max_compaction_lag_ms": {
      "type": "integer",
      "default": 9223372036854776000,
      "example": 9223372036854776000,
      "description": "The max_compaction_lag_ms specifies the maximum amount of time (in ms) that a message will remain uncompacted. This is only applicable if the logs are have compaction enabled."
    },
    "min_compaction_lag_ms": {
      "type": "integer",
      "default": 0,
      "example": 0,
      "description": "The min_compaction_lag_ms specifies the minimum time (in ms) that a message will remain uncompacted in the log. Only relevant if log compaction is enabled."
    },
    "message_format_version": {
      "enum": [
        "0.8.0",
        "0.8.1",
        "0.8.2",
        "0.9.0",
        "0.10.0-IV0",
        "0.10.0-IV1",
        "0.10.1-IV0",
        "0.10.1-IV1",
        "0.10.1-IV2",
        "0.10.2-IV0",
        "0.11.0-IV0",
        "0.11.0-IV1",
        "0.11.0-IV2",
        "1.0-IV0",
        "1.1-IV0",
        "2.0-IV0",
        "2.0-IV1",
        "2.1-IV0",
        "2.1-IV1",
        "2.1-IV2",
        "2.2-IV0",
        "2.2-IV1",
        "2.3-IV0",
        "2.3-IV1",
        "2.4-IV0",
        "2.4-IV1",
        "2.5-IV0",
        "2.6-IV0",
        "2.7-IV0",
        "2.7-IV1",
        "2.7-IV2",
        "2.8-IV0",
        "2.8-IV1",
        "3.0-IV0",
        "3.0-IV1",
        "3.1-IV0",
        "3.2-IV0",
        "3.3-IV0",
        "3.3-IV1",
        "3.3-IV2",
        "3.3-IV3"
      ],
      "type": "string",
      "default": "3.0-IV1",
      "example": "3.0-IV1",
      "description": "The message_format_version specifies the message format version used by the broker to append messages to the logs. The value of this setting is assumed to be 3.0-IV1 if the broker protocol version is 3.0 or higher. By setting a  particular message format version, all existing messages on disk must be smaller or equal to the specified version."
    },
    "message_timestamp_type": {
      "enum": [
        "create_time",
        "log_append_time"
      ],
      "type": "string",
      "default": "create_time",
      "example": "create_time",
      "description": "The message_timestamp_type specifies whether to use the message create time or log append time as the timestamp on a message."
    },
    "min_cleanable_dirty_ratio": {
      "type": "number",
      "format": "float",
      "default": 0.5,
      "example": 0.5,
      "maximum": 1,
      "minimum": 0,
      "description": "The min_cleanable_dirty_ratio specifies the frequency of log compaction (if enabled) in relation to duplicates present in the logs. For example, at 0.5, at most 50% of the log could be duplicates before compaction would begin."
    },
    "message_down_conversion_enable": {
      "type": "boolean",
      "default": true,
      "example": true,
      "description": "The message_down_conversion_enable specifies whether down-conversion of message formats is enabled to satisfy consumer requests. When 'false', the broker will not perform conversion for consumers expecting older message formats. The broker will respond with an `UNSUPPORTED_VERSION` error for consume requests from these older clients."
    }
  }
}
object kafka_topic_create
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/kafka_topic_base"
    },
    {
      "properties": {
        "config": {
          "$ref": "#/components/schemas/kafka_topic_config"
        }
      }
    }
  ],
  "example": {
    "name": "customer-events",
    "config": {
      "retention_ms": 100000,
      "retention_bytes": -1
    },
    "partitions": 3,
    "replication": 2
  },
  "properties": {
    "name": {
      "type": "string",
      "example": "customer-events"
    },
    "config": {
      "type": "object",
      "properties": {
        "retention_ms": {
          "type": "number",
          "example": 100000
        },
        "retention_bytes": {
          "type": "number",
          "example": -1
        }
      }
    },
    "partitions": {
      "type": "number",
      "example": 3
    },
    "replication": {
      "type": "number",
      "example": 2
    }
  }
}
object kafka_topic_partition
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "example": 1,
      "description": "An identifier for the partition."
    },
    "size": {
      "type": "integer",
      "example": 4096,
      "description": "Size of the topic partition in bytes."
    },
    "consumer_groups": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "example": 0,
            "description": "The current offset of the consumer group."
          },
          "group_name": {
            "type": "string",
            "example": "consumer",
            "description": "Name of the consumer group."
          }
        }
      },
      "nullable": true
    },
    "earliest_offset": {
      "type": "integer",
      "example": 0,
      "description": "The earliest consumer offset amongst consumer groups."
    },
    "in_sync_replicas": {
      "type": "integer",
      "example": 3,
      "description": "The number of nodes that are in-sync (have the latest data) for the given partition"
    }
  }
}
object kafka_topic_update
{
  "type": "object",
  "properties": {
    "config": {
      "$ref": "#/components/schemas/kafka_topic_config"
    },
    "partition_count": {
      "type": "integer",
      "example": 3,
      "description": "The number of partitions available for the topic. On update, this value can only be increased."
    },
    "replication_factor": {
      "type": "integer",
      "example": 2,
      "description": "The number of nodes to replicate data across the cluster."
    }
  }
}
object kafka_topic_verbose
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "events",
      "description": "The name of the Kafka topic."
    },
    "state": {
      "enum": [
        "active",
        "configuring",
        "deleting",
        "unknown"
      ],
      "type": "string",
      "example": "active",
      "description": "The state of the Kafka topic."
    },
    "config": {
      "$ref": "#/components/schemas/kafka_topic_config"
    },
    "partitions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/kafka_topic_partition"
      }
    },
    "replication_factor": {
      "type": "integer",
      "example": 2,
      "description": "The number of nodes to replicate data across the cluster."
    }
  }
}
object kernel
{
  "type": "object",
  "nullable": true,
  "deprecated": true,
  "properties": {
    "id": {
      "type": "integer",
      "example": 7515,
      "description": "A unique number used to identify and reference a specific kernel."
    },
    "name": {
      "type": "string",
      "example": "DigitalOcean GrubLoader v0.2 (20160714)",
      "description": "The display name of the kernel. This is shown in the web UI and is generally a descriptive title for the kernel in question."
    },
    "version": {
      "type": "string",
      "example": "2016.07.13-DigitalOcean_loader_Ubuntu",
      "description": "A standard kernel version string representing the version, patch, and release information."
    }
  },
  "description": "**Note**: All Droplets created after March 2017 use internal kernels by default.\nThese Droplets will have this attribute set to `null`.\n\nThe current [kernel](https://www.digitalocean.com/docs/droplets/how-to/kernel/)\nfor Droplets with externally managed kernels. This will initially be set to\nthe kernel of the base image when the Droplet is created.\n"
}
object kubernetes_node_pool
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/kubernetes_node_pool_size"
    },
    {
      "$ref": "#/components/schemas/kubernetes_node_pool_base"
    }
  ],
  "example": {
    "name": "new-pool",
    "size": "s-1vcpu-2gb",
    "tags": [
      "frontend"
    ],
    "count": 3,
    "max_nodes": 6,
    "min_nodes": 3,
    "auto_scale": true
  },
  "required": [
    "name",
    "size",
    "count"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "new-pool"
    },
    "size": {
      "type": "string",
      "example": "s-1vcpu-2gb"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string",
        "example": "frontend"
      }
    },
    "count": {
      "type": "number",
      "example": 3
    },
    "max_nodes": {
      "type": "number",
      "example": 6
    },
    "min_nodes": {
      "type": "number",
      "example": 3
    },
    "auto_scale": {
      "type": "boolean",
      "example": true
    }
  }
}
object kubernetes_node_pool_base
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "cdda885e-7663-40c8-bc74-3a036c66545d",
      "readOnly": true,
      "description": "A unique ID that can be used to identify and reference a specific node pool."
    },
    "name": {
      "type": "string",
      "example": "frontend-pool",
      "description": "A human-readable name for the node pool."
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "k8s",
        "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
        "k8s-worker",
        "production",
        "web-team"
      ],
      "description": "An array containing the tags applied to the node pool. All node pools are automatically tagged `k8s`, `k8s-worker`, and `k8s:$K8S_CLUSTER_ID`."
    },
    "count": {
      "type": "integer",
      "example": 3,
      "description": "The number of Droplet instances in the node pool."
    },
    "nodes": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/node"
      },
      "readOnly": true,
      "description": "An object specifying the details of a specific worker node in a node pool."
    },
    "labels": {
      "type": "object",
      "example": null,
      "nullable": true,
      "description": "An object of key/value mappings specifying labels to apply to all nodes in a pool. Labels will automatically be applied to all existing nodes and any subsequent nodes added to the pool. Note that when a label is removed, it is not deleted from the nodes in the pool."
    },
    "taints": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/kubernetes_node_pool_taint"
      },
      "description": "An array of taints to apply to all nodes in a pool. Taints will automatically be applied to all existing nodes and any subsequent nodes added to the pool. When a taint is removed, it is deleted from all nodes in the pool."
    },
    "max_nodes": {
      "type": "integer",
      "example": 6,
      "description": "The maximum number of nodes that this node pool can be auto-scaled to. The value will be `0` if `auto_scale` is set to `false`."
    },
    "min_nodes": {
      "type": "integer",
      "example": 3,
      "description": "The minimum number of nodes that this node pool can be auto-scaled to. The value will be `0` if `auto_scale` is set to `false`."
    },
    "auto_scale": {
      "type": "boolean",
      "example": true,
      "description": "A boolean value indicating whether auto-scaling is enabled for this node pool."
    }
  }
}
object kubernetes_node_pool_size
{
  "type": "object",
  "properties": {
    "size": {
      "type": "string",
      "example": "s-1vcpu-2gb",
      "description": "The slug identifier for the type of Droplet used as workers in the node pool."
    }
  }
}
object kubernetes_node_pool_taint
{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "example": "priority",
      "description": "An arbitrary string. The `key` and `value` fields of the `taint` object form a key-value pair. For example, if the value of the `key` field is \"special\" and the value of the `value` field is \"gpu\", the key value pair would be `special=gpu`."
    },
    "value": {
      "type": "string",
      "example": "high",
      "description": "An arbitrary string. The `key` and `value` fields of the `taint` object form a key-value pair. For example, if the value of the `key` field is \"special\" and the value of the `value` field is \"gpu\", the key value pair would be `special=gpu`."
    },
    "effect": {
      "enum": [
        "NoSchedule",
        "PreferNoSchedule",
        "NoExecute"
      ],
      "type": "string",
      "example": "NoSchedule",
      "description": "How the node reacts to pods that it won't tolerate. Available effect values are `NoSchedule`, `PreferNoSchedule`, and `NoExecute`."
    }
  }
}
object kubernetes_options
{
  "type": "object",
  "properties": {
    "options": {
      "properties": {
        "sizes": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/kubernetes_size"
          }
        },
        "regions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/kubernetes_region"
          }
        },
        "versions": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/kubernetes_version"
          }
        }
      }
    }
  }
}
object kubernetes_region
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "New York 3",
      "description": "A DigitalOcean region where Kubernetes is available."
    },
    "slug": {
      "type": "string",
      "example": "nyc3",
      "description": "The identifier for a region for use when creating a new cluster."
    }
  }
}
object kubernetes_size
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "s-1vcpu-2gb",
      "description": "A Droplet size available for use in a Kubernetes node pool."
    },
    "slug": {
      "type": "string",
      "example": "s-1vcpu-2gb",
      "description": "The identifier for a size for use when creating a new cluster."
    }
  }
}
object kubernetes_version
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "example": "1.16.13-do.0",
      "description": "The slug identifier for an available version of Kubernetes for use when creating or updating a cluster. The string contains both the upstream version of Kubernetes as well as the DigitalOcean revision."
    },
    "kubernetes_version": {
      "type": "string",
      "example": "1.16.13",
      "description": "The upstream version string for the version of Kubernetes provided by a given slug."
    },
    "supported_features": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "cluster-autoscaler",
        "docr-integration",
        "token-authentication"
      ],
      "description": "The features available with the version of Kubernetes provided by a given slug."
    }
  }
}
object lb_firewall
{
  "type": "object",
  "properties": {
    "deny": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "default": [],
      "example": [
        "ip:1.2.3.4",
        "cidr:2.3.0.0/16"
      ],
      "description": "the rules for denying traffic to the load balancer (in the form 'ip:1.2.3.4' or 'cidr:1.2.0.0/16')"
    },
    "allow": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "default": [],
      "example": [
        "ip:1.2.3.4",
        "cidr:2.3.0.0/16"
      ],
      "description": "the rules for allowing traffic to the load balancer (in the form 'ip:1.2.3.4' or 'cidr:1.2.0.0/16')"
    }
  },
  "description": "An object specifying allow and deny rules to control traffic to the load balancer."
}
object link_to_first_page
{
  "type": "object",
  "properties": {
    "first": {
      "type": "string",
      "example": "https://api.digitalocean.com/v2/images?page=1",
      "description": "URI of the first page of the results."
    }
  }
}
object link_to_last_page
{
  "type": "object",
  "properties": {
    "last": {
      "type": "string",
      "example": "https://api.digitalocean.com/v2/images?page=2",
      "description": "URI of the last page of the results."
    }
  }
}
object link_to_next_page
{
  "type": "object",
  "properties": {
    "next": {
      "type": "string",
      "example": "https://api.digitalocean.com/v2/images?page=2",
      "description": "URI of the next page of the results."
    }
  }
}
object link_to_prev_page
{
  "type": "object",
  "properties": {
    "prev": {
      "type": "string",
      "example": "https://api.digitalocean.com/v2/images?page=1",
      "description": "URI of the previous page of the results."
    }
  }
}
object list_alert_policy
{
  "type": "object",
  "required": [
    "policies"
  ],
  "properties": {
    "policies": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/alert_policy"
      }
    }
  }
}
object load_balancer
{
  "allOf": [
    {
      "$ref": "#/components/schemas/load_balancer_base"
    },
    {
      "type": "object",
      "properties": {
        "region": {
          "type": "object",
          "allOf": [
            {
              "description": "The region where the load balancer instance is located. When setting a region, the value should be the slug identifier for the region. When you query a load balancer, an entire region object will be returned."
            },
            {
              "$ref": "#/components/schemas/region"
            }
          ]
        }
      }
    },
    {
      "type": "object",
      "properties": {
        "droplet_ids": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "example": [
            3164444,
            3164445
          ],
          "description": "An array containing the IDs of the Droplets assigned to the load balancer."
        }
      }
    },
    {
      "type": "object",
      "properties": {
        "tag": {
          "type": "string",
          "example": "prod:web",
          "description": "The name of a Droplet tag corresponding to Droplets assigned to the load balancer."
        }
      }
    }
  ]
}
object load_balancer_base
{
  "type": "object",
  "required": [
    "forwarding_rules"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "4de7ac8b-495b-4884-9a69-1050c6793cd6",
      "readOnly": true,
      "description": "A unique ID that can be used to identify and reference a load balancer."
    },
    "ip": {
      "type": "string",
      "example": "104.131.186.241",
      "pattern": "^$|^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$",
      "readOnly": true,
      "description": "An attribute containing the public-facing IP address of the load balancer."
    },
    "name": {
      "type": "string",
      "example": "example-lb-01",
      "description": "A human-readable name for a load balancer instance."
    },
    "size": {
      "enum": [
        "lb-small",
        "lb-medium",
        "lb-large"
      ],
      "type": "string",
      "default": "lb-small",
      "example": "lb-small",
      "deprecated": true,
      "description": "This field has been replaced by the `size_unit` field for all regions except in AMS2, NYC2, and SFO1. Each available load balancer size now equates to the load balancer having a set number of nodes.\n* `lb-small` = 1 node\n* `lb-medium` = 3 nodes\n* `lb-large` = 6 nodes\n\nYou can resize load balancers after creation up to once per hour. You cannot resize a load balancer within the first hour of its creation."
    },
    "status": {
      "enum": [
        "new",
        "active",
        "errored"
      ],
      "type": "string",
      "example": "new",
      "readOnly": true,
      "description": "A status string indicating the current state of the load balancer. This can be `new`, `active`, or `errored`."
    },
    "firewall": {
      "$ref": "#/components/schemas/lb_firewall"
    },
    "vpc_uuid": {
      "type": "string",
      "format": "uuid",
      "example": "c33931f2-a26a-4e61-b85c-4e95a2ec431b",
      "description": "A string specifying the UUID of the VPC to which the load balancer is assigned."
    },
    "algorithm": {
      "enum": [
        "round_robin",
        "least_connections"
      ],
      "type": "string",
      "default": "round_robin",
      "example": "round_robin",
      "deprecated": true,
      "description": "This field has been deprecated. You can no longer specify an algorithm for load balancers."
    },
    "size_unit": {
      "type": "integer",
      "default": 1,
      "example": 3,
      "maximum": 100,
      "minimum": 1,
      "description": "How many nodes the load balancer contains. Each additional node increases the load balancer's ability to manage more connections. Load balancers can be scaled up or down, and you can change the number of nodes after creation up to once per hour. This field is currently not available in the AMS2, NYC2, or SFO1 regions. Use the `size` field to scale load balancers that reside in these regions."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2017-02-01T22:22:58Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the load balancer was created."
    },
    "project_id": {
      "type": "string",
      "example": "4de7ac8b-495b-4884-9a69-1050c6793cd6",
      "description": "The ID of the project that the load balancer is associated with. If no ID is provided at creation, the load balancer associates with the user's default project. If an invalid project ID is provided, the load balancer will not be created."
    },
    "health_check": {
      "$ref": "#/components/schemas/health_check"
    },
    "sticky_sessions": {
      "$ref": "#/components/schemas/sticky_sessions"
    },
    "forwarding_rules": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/forwarding_rule"
      },
      "minItems": 1,
      "description": "An array of objects specifying the forwarding rules for a load balancer."
    },
    "enable_proxy_protocol": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean value indicating whether PROXY Protocol is in use."
    },
    "redirect_http_to_https": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean value indicating whether HTTP requests to the load balancer on port 80 will be redirected to HTTPS on port 443."
    },
    "enable_backend_keepalive": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean value indicating whether HTTP keepalive connections are maintained to target Droplets."
    },
    "http_idle_timeout_seconds": {
      "type": "integer",
      "default": 60,
      "example": 90,
      "maximum": 600,
      "minimum": 30,
      "description": "An integer value which configures the idle timeout for HTTP requests to the target droplets."
    },
    "disable_lets_encrypt_dns_records": {
      "type": "boolean",
      "default": false,
      "example": true,
      "description": "A boolean value indicating whether to disable automatic DNS record creation for Let's Encrypt certificates that are added to the load balancer."
    }
  }
}
object load_balancer_create
{
  "oneOf": [
    {
      "allOf": [
        {
          "type": "object",
          "properties": {
            "droplet_ids": {
              "type": "array",
              "items": {
                "type": "integer"
              },
              "example": [
                3164444,
                3164445
              ],
              "description": "An array containing the IDs of the Droplets assigned to the load balancer."
            }
          }
        },
        {
          "type": "object",
          "properties": {
            "region": {
              "$ref": "#/components/schemas/region_slug"
            }
          }
        },
        {
          "$ref": "#/components/schemas/load_balancer_base"
        }
      ],
      "title": "Assign Droplets by ID",
      "required": [
        "droplet_ids",
        "region"
      ]
    },
    {
      "allOf": [
        {
          "type": "object",
          "properties": {
            "tag": {
              "type": "string",
              "example": "prod:web",
              "description": "The name of a Droplet tag corresponding to Droplets assigned to the load balancer."
            }
          }
        },
        {
          "type": "object",
          "properties": {
            "region": {
              "$ref": "#/components/schemas/region_slug"
            }
          }
        },
        {
          "$ref": "#/components/schemas/load_balancer_base"
        }
      ],
      "title": "Assign Droplets by Tag",
      "required": [
        "tag",
        "region"
      ]
    }
  ]
}
object maintenance_policy
{
  "type": "object",
  "nullable": true,
  "properties": {
    "day": {
      "enum": [
        "any",
        "monday",
        "tuesday",
        "wednesday",
        "thursday",
        "friday",
        "saturday",
        "sunday"
      ],
      "type": "string",
      "example": "any",
      "description": "The day of the maintenance window policy. May be one of `monday` through `sunday`, or `any` to indicate an arbitrary week day."
    },
    "duration": {
      "type": "string",
      "example": "4h0m0s",
      "readOnly": true,
      "description": "The duration of the maintenance window policy in human-readable format."
    },
    "start_time": {
      "type": "string",
      "example": "12:00",
      "description": "The start time in UTC of the maintenance window policy in 24-hour clock format / HH:MM notation (e.g., `15:00`)."
    }
  },
  "description": "An object specifying the maintenance window policy for the Kubernetes cluster."
}
object meta
{
  "type": "object",
  "required": [
    "meta"
  ],
  "properties": {
    "meta": {
      "allOf": [
        {
          "$ref": "#/components/schemas/meta_properties"
        },
        {
          "required": [
            "total"
          ]
        }
      ]
    }
  }
}
object meta_optional_total
{
  "type": "object",
  "required": [
    "meta"
  ],
  "properties": {
    "meta": {
      "$ref": "#/components/schemas/meta_properties"
    }
  }
}
object meta_properties
{
  "type": "object",
  "properties": {
    "total": {
      "type": "integer",
      "example": 1,
      "description": "Number of objects returned by the request."
    }
  },
  "description": "Information about the response itself."
}
object metrics
{
  "type": "object",
  "required": [
    "status",
    "data"
  ],
  "properties": {
    "data": {
      "$ref": "#/components/schemas/metrics_data"
    },
    "status": {
      "enum": [
        "success",
        "error"
      ],
      "type": "string",
      "example": "success"
    }
  }
}
object metrics_data
{
  "type": "object",
  "required": [
    "resultType",
    "result"
  ],
  "properties": {
    "result": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/metrics_result"
      },
      "description": "Result of query."
    },
    "resultType": {
      "enum": [
        "matrix"
      ],
      "type": "string",
      "example": "matrix"
    }
  }
}
object metrics_result
{
  "type": "object",
  "required": [
    "metric",
    "values"
  ],
  "properties": {
    "metric": {
      "type": "object",
      "example": {
        "host_id": "19201920"
      },
      "description": "An object containing the metric labels.",
      "additionalProperties": {
        "type": "string"
      }
    },
    "values": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "oneOf": [
            {
              "type": "integer"
            },
            {
              "type": "string"
            }
          ]
        }
      },
      "example": [
        [
          1435781430,
          "1"
        ],
        [
          1435781445,
          "1"
        ]
      ]
    }
  }
}
object mongo
{
  "type": "object",
  "properties": {
    "verbosity": {
      "type": "integer",
      "default": 0,
      "example": 3,
      "maximum": 5,
      "minimum": 0,
      "description": "The log message verbosity level. The verbosity level determines the amount of Informational and Debug messages MongoDB outputs. 0 includes informational messages while 1...5 increases the level to include debug messages. *Changing this parameter will lead to a restart of the MongoDB service.* Learn more [here](https://www.mongodb.com/docs/manual/reference/configuration-options/#mongodb-setting-systemLog.verbosity)."
    },
    "default_read_concern": {
      "enum": [
        "local",
        "available",
        "majority"
      ],
      "type": "string",
      "default": "local",
      "example": "local",
      "description": "Specifies the default consistency behavior of reads from the database. Data that is returned from the query with may or may not have been acknowledged by all nodes in the replicaset depending on this value.  Learn more [here](https://www.mongodb.com/docs/manual/reference/read-concern/)."
    },
    "slow_op_threshold_ms": {
      "type": "integer",
      "default": 100,
      "example": 200,
      "minimum": 0,
      "description": "Operations that run for longer than this threshold are considered slow which are then recorded to the diagnostic logs.  Higher log levels (verbosity) will record all operations regardless of this threshold on the primary node.  *Changing this parameter will lead to a restart of the MongoDB service.* Learn more [here](https://www.mongodb.com/docs/manual/reference/configuration-options/#mongodb-setting-operationProfiling.slowOpThresholdMs)."
    },
    "default_write_concern": {
      "type": "string",
      "default": "majority",
      "example": "majority",
      "description": "Describes the level of acknowledgment requested from MongoDB for write operations clusters. This field can set to either `majority` or a number `0...n` which will describe the number of nodes that must acknowledge the write operation before it is fully accepted. Setting to `0` will request no acknowledgement of the write operation.  Learn more [here](https://www.mongodb.com/docs/manual/reference/write-concern/)."
    },
    "transaction_lifetime_limit_seconds": {
      "type": "integer",
      "default": 60,
      "example": 100,
      "minimum": 1,
      "description": "Specifies the lifetime of multi-document transactions. Transactions that exceed this limit are considered expired and will be  aborted by a periodic cleanup process. The cleanup process runs every `transactionLifetimeLimitSeconds/2 seconds` or at least  once every 60 seconds. *Changing this parameter will lead to a restart of the MongoDB service.* Learn more [here](https://www.mongodb.com/docs/manual/reference/parameters/#mongodb-parameter-param.transactionLifetimeLimitSeconds)."
    }
  }
}
object mysql
{
  "type": "object",
  "properties": {
    "sql_mode": {
      "type": "string",
      "example": "ANSI,TRADITIONAL",
      "pattern": "^[A-Z_]*(,[A-Z_]+)*$",
      "maxLength": 1024,
      "description": "Global SQL mode. If empty, uses MySQL server defaults. Must only include uppercase alphabetic characters, underscores, and commas."
    },
    "backup_hour": {
      "type": "integer",
      "example": 3,
      "maximum": 23,
      "minimum": 0,
      "description": "The hour of day (in UTC) when backup for the service starts. New backup only starts if previous backup has already completed."
    },
    "wait_timeout": {
      "type": "integer",
      "example": 28800,
      "maximum": 2147483,
      "minimum": 1,
      "description": "The number of seconds the server waits for activity on a noninteractive connection before closing it."
    },
    "backup_minute": {
      "type": "integer",
      "example": 30,
      "maximum": 59,
      "minimum": 0,
      "description": "The minute of the backup hour when backup for the service starts. New backup  only starts if previous backup has already completed."
    },
    "slow_query_log": {
      "type": "boolean",
      "example": true,
      "description": "When enabled, captures slow queries. When disabled, also truncates the mysql.slow_log table. Default is false."
    },
    "tmp_table_size": {
      "type": "integer",
      "example": 16777216,
      "maximum": 1073741824,
      "minimum": 1048576,
      "description": "The maximum size, in bytes, of internal in-memory tables. Also set max_heap_table_size. Default is 16777216 (16M)."
    },
    "connect_timeout": {
      "type": "integer",
      "example": 10,
      "maximum": 3600,
      "minimum": 2,
      "description": "The number of seconds that the mysqld server waits for a connect packet before responding with bad handshake."
    },
    "long_query_time": {
      "type": "number",
      "example": 10,
      "maximum": 3600,
      "minimum": 0,
      "description": "The time, in seconds, for a query to take to execute before  being captured by slow_query_logs. Default is 10 seconds."
    },
    "net_read_timeout": {
      "type": "integer",
      "example": 30,
      "maximum": 3600,
      "minimum": 1,
      "description": "The time, in seconds, to wait for more data from an existing connection. aborting the read."
    },
    "sort_buffer_size": {
      "type": "integer",
      "example": 262144,
      "maximum": 1073741824,
      "minimum": 32768,
      "description": "The sort buffer size, in bytes, for ORDER BY optimization. Default is 262144. (256K)."
    },
    "default_time_zone": {
      "type": "string",
      "example": "+03:00",
      "maxLength": 100,
      "minLength": 2,
      "description": "Default server time zone, in the form of an offset from UTC (from -12:00 to +12:00), a time zone name (EST), or 'SYSTEM' to use the MySQL server default."
    },
    "net_buffer_length": {
      "type": "integer",
      "example": 4096,
      "maximum": 1048576,
      "minimum": 1024,
      "description": "Start sizes of connection buffer and result buffer, must be multiple of 1024. Changing this parameter will lead to a restart of the MySQL service."
    },
    "net_write_timeout": {
      "type": "integer",
      "example": 30,
      "maximum": 3600,
      "minimum": 1,
      "description": "The number of seconds to wait for a block to be written to a connection before aborting the write."
    },
    "max_allowed_packet": {
      "type": "integer",
      "example": 67108864,
      "maximum": 1073741824,
      "minimum": 102400,
      "description": "The size of the largest message, in bytes, that can be received by the server. Default is 67108864 (64M)."
    },
    "interactive_timeout": {
      "type": "integer",
      "example": 3600,
      "maximum": 604800,
      "minimum": 30,
      "description": "The time, in seconds, the server waits for activity on an interactive. connection before closing it."
    },
    "max_heap_table_size": {
      "type": "integer",
      "example": 16777216,
      "maximum": 1073741824,
      "minimum": 1048576,
      "description": "The maximum size, in bytes, of internal in-memory tables. Also set tmp_table_size. Default is 16777216 (16M)"
    },
    "group_concat_max_len": {
      "type": "integer",
      "example": 1024,
      "maximum": 18446744073709552000,
      "minimum": 4,
      "description": "The maximum permitted result length, in bytes, for the GROUP_CONCAT() function."
    },
    "innodb_flush_neighbors": {
      "enum": [
        0,
        1,
        2
      ],
      "type": "integer",
      "example": 0,
      "description": "Specifies whether flushing a page from the InnoDB buffer pool also flushes other dirty pages in the same extent.\n  - 0 &mdash; disables this functionality, dirty pages in the same extent are not flushed.\n  - 1 &mdash; flushes contiguous dirty pages in the same extent.\n  - 2 &mdash; flushes dirty pages in the same extent."
    },
    "innodb_log_buffer_size": {
      "type": "integer",
      "example": 16777216,
      "maximum": 4294967295,
      "minimum": 1048576,
      "description": "The size of the buffer, in bytes, that InnoDB uses to write to the log files. on disk."
    },
    "innodb_read_io_threads": {
      "type": "integer",
      "example": 16,
      "maximum": 64,
      "minimum": 1,
      "description": "The number of I/O threads for read operations in InnoDB. Changing this parameter will lead to a restart of the MySQL service."
    },
    "binlog_retention_period": {
      "type": "number",
      "example": 600,
      "maximum": 86400,
      "minimum": 600,
      "description": "The minimum amount of time, in seconds, to keep binlog entries before deletion.  This may be extended for services that require binlog entries for longer than the default, for example if using the MySQL Debezium Kafka connector."
    },
    "innodb_write_io_threads": {
      "type": "integer",
      "example": 16,
      "maximum": 64,
      "minimum": 1,
      "description": "The number of I/O threads for write operations in InnoDB. Changing this parameter will lead to a restart of the MySQL service."
    },
    "sql_require_primary_key": {
      "type": "boolean",
      "example": true,
      "description": "Require primary key to be defined for new tables or old tables modified with ALTER TABLE and fail if missing. It is recommended to always have primary keys because various functionality may break if any large table is missing them."
    },
    "innodb_ft_min_token_size": {
      "type": "integer",
      "example": 3,
      "maximum": 16,
      "minimum": 0,
      "description": "The minimum length of words that an InnoDB FULLTEXT index stores."
    },
    "innodb_lock_wait_timeout": {
      "type": "integer",
      "example": 50,
      "maximum": 3600,
      "minimum": 1,
      "description": "The time, in seconds, that an InnoDB transaction waits for a row lock. before giving up."
    },
    "innodb_thread_concurrency": {
      "type": "integer",
      "example": 0,
      "maximum": 1000,
      "minimum": 0,
      "description": "Defines the maximum number of threads permitted inside of InnoDB. A value of 0 (the default) is interpreted as infinite concurrency (no limit). This variable is intended for performance  tuning on high concurrency systems."
    },
    "innodb_print_all_deadlocks": {
      "type": "boolean",
      "example": true,
      "description": "When enabled, records information about all deadlocks in InnoDB user transactions  in the error log. Disabled by default."
    },
    "innodb_rollback_on_timeout": {
      "type": "boolean",
      "example": true,
      "description": "When enabled, transaction timeouts cause InnoDB to abort and roll back the entire transaction."
    },
    "innodb_change_buffer_max_size": {
      "type": "integer",
      "example": 25,
      "maximum": 50,
      "minimum": 0,
      "description": "Specifies the maximum size of the InnoDB change buffer as a percentage of the buffer pool."
    },
    "information_schema_stats_expiry": {
      "type": "integer",
      "example": 86400,
      "maximum": 31536000,
      "minimum": 900,
      "description": "The time, in seconds, before cached statistics expire."
    },
    "innodb_ft_server_stopword_table": {
      "type": "string",
      "example": "db_name/table_name",
      "pattern": "^.+/.+$",
      "maxLength": 1024,
      "description": "The InnoDB FULLTEXT index stopword list for all InnoDB tables."
    },
    "internal_tmp_mem_storage_engine": {
      "enum": [
        "TempTable",
        "MEMORY"
      ],
      "type": "string",
      "example": "TempTable",
      "description": "The storage engine for in-memory internal temporary tables."
    },
    "innodb_online_alter_log_max_size": {
      "type": "integer",
      "example": 134217728,
      "maximum": 1099511627776,
      "minimum": 65536,
      "description": "The upper limit, in bytes, of the size of the temporary log files used during online DDL operations for InnoDB tables."
    }
  }
}
object mysql_settings
{
  "type": "object",
  "required": [
    "auth_plugin"
  ],
  "properties": {
    "auth_plugin": {
      "enum": [
        "mysql_native_password",
        "caching_sha2_password"
      ],
      "type": "string",
      "example": "mysql_native_password",
      "description": "A string specifying the authentication method to be used for connections\nto the MySQL user account. The valid values are `mysql_native_password`\nor `caching_sha2_password`. If excluded when creating a new user, the\ndefault for the version of MySQL in use will be used. As of MySQL 8.0, the\ndefault is `caching_sha2_password`.\n"
    }
  }
}
object namespace_info
{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "example": "d1zcd455h01mqjfs4s2eaewyejehi5f2uj4etqq3h7cera8iwkub6xg5of1wdde2",
      "description": "A random alpha numeric string. This key is used in conjunction with the namespace's UUID to authenticate \na user to use the namespace via `doctl`, DigitalOcean's official CLI."
    },
    "uuid": {
      "type": "string",
      "example": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "description": "The namespace's Universally Unique Identifier."
    },
    "label": {
      "type": "string",
      "example": "my namespace",
      "description": "The namespace's unique name."
    },
    "region": {
      "type": "string",
      "example": "nyc1",
      "description": "The namespace's datacenter region."
    },
    "api_host": {
      "type": "string",
      "example": "https://api_host.io",
      "description": "The namespace's API hostname. Each function in a namespace is provided an endpoint at the namespace's hostname."
    },
    "namespace": {
      "type": "string",
      "example": "fn-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "description": "A unique string format of UUID with a prefix fn-."
    },
    "created_at": {
      "type": "string",
      "example": "2022-09-14T04:16:45Z",
      "description": "UTC time string."
    },
    "updated_at": {
      "type": "string",
      "example": "2022-09-14T04:16:45Z",
      "description": "UTC time string."
    }
  }
}
object neighbor_ids
{
  "type": "object",
  "properties": {
    "neighbor_ids": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "integer"
        }
      },
      "example": [
        [
          168671828,
          168663509,
          168671815
        ],
        [
          168671883,
          168671750
        ]
      ],
      "description": "An array of arrays. Each array will contain a set of Droplet IDs for Droplets that share a physical server."
    }
  }
}
object network_v4
{
  "type": "object",
  "properties": {
    "type": {
      "enum": [
        "public",
        "private"
      ],
      "type": "string",
      "example": "public",
      "description": "The type of the IPv4 network interface."
    },
    "gateway": {
      "type": "string",
      "example": "104.236.0.1",
      "description": "The gateway of the specified IPv4 network interface.\n\nFor private interfaces, a gateway is not provided. This is denoted by\nreturning `nil` as its value.\n"
    },
    "netmask": {
      "type": "string",
      "format": "ipv4",
      "example": "255.255.192.0",
      "description": "The netmask of the IPv4 network interface."
    },
    "ip_address": {
      "type": "string",
      "format": "ipv4",
      "example": "104.236.32.182",
      "description": "The IP address of the IPv4 network interface."
    }
  }
}
object network_v6
{
  "type": "object",
  "properties": {
    "type": {
      "enum": [
        "public"
      ],
      "type": "string",
      "example": "public",
      "description": "The type of the IPv6 network interface.\n\n**Note**: IPv6 private  networking is not currently supported.\n"
    },
    "gateway": {
      "type": "string",
      "format": "ipv6",
      "example": "2604:a880:0:1010::1",
      "description": "The gateway of the specified IPv6 network interface."
    },
    "netmask": {
      "type": "integer",
      "example": 64,
      "description": "The netmask of the IPv6 network interface."
    },
    "ip_address": {
      "type": "string",
      "format": "ipv6",
      "example": "2604:a880:0:1010::18a:a001",
      "description": "The IP address of the IPv6 network interface."
    }
  }
}
object node
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "e78247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f",
      "description": "A unique ID that can be used to identify and reference the node."
    },
    "name": {
      "type": "string",
      "example": "adoring-newton-3niq",
      "description": "An automatically generated, human-readable name for the node."
    },
    "status": {
      "type": "object",
      "properties": {
        "state": {
          "enum": [
            "provisioning",
            "running",
            "draining",
            "deleting"
          ],
          "type": "string",
          "example": "provisioning",
          "description": "A string indicating the current status of the node."
        }
      },
      "description": "An object containing a `state` attribute whose value is set to a string indicating the current status of the node."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2018-11-15T16:00:11Z",
      "description": "A time value given in ISO8601 combined date and time format that represents when the node was created."
    },
    "droplet_id": {
      "type": "string",
      "example": "205545370",
      "description": "The ID of the Droplet used for the worker node."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2018-11-15T16:00:11Z",
      "description": "A time value given in ISO8601 combined date and time format that represents when the node was last updated."
    }
  }
}
object notification
{
  "type": "object",
  "required": [
    "slack",
    "email"
  ],
  "properties": {
    "email": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "bob@example.com"
      ],
      "description": "An email to notify on an alert trigger. The Email has to be one that is verified on that DigitalOcean account."
    },
    "slack": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url",
          "channel"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "string",
            "example": "https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ",
            "description": "Slack Webhook URL."
          },
          "channel": {
            "type": "string",
            "format": "string",
            "example": "Production Alerts",
            "description": "Slack channel to notify of an alert trigger."
          }
        }
      },
      "description": "Slack integration details."
    }
  },
  "description": "The notification settings for a trigger alert."
}
object oneClicks
{
  "type": "object",
  "required": [
    "slug",
    "type"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "title": "slug",
      "example": "monitoring",
      "description": "The slug identifier for the 1-Click application."
    },
    "type": {
      "type": "string",
      "title": "type",
      "example": "kubernetes",
      "description": "The type of the 1-Click application."
    }
  }
}
object oneClicks_create
{
  "type": "object",
  "required": [
    "addon_slugs",
    "cluster_uuid"
  ],
  "properties": {
    "addon_slugs": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "addon_slugs",
      "default": [],
      "example": [
        "kube-state-metrics",
        "loki"
      ],
      "description": "An array of 1-Click Application slugs to be installed to the Kubernetes cluster."
    },
    "cluster_uuid": {
      "type": "string",
      "title": "cluster_uuid",
      "example": "50a994b6-c303-438f-9495-7e896cfe6b08",
      "description": "A unique ID for the Kubernetes cluster to which the 1-Click Applications will be installed."
    }
  }
}
object online_migration
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "example": "77b28fc8-19ff-11eb-8c9c-c68e24557488",
      "description": "The ID of the most recent migration."
    },
    "status": {
      "enum": [
        "running",
        "canceled",
        "error",
        "done"
      ],
      "type": "string",
      "example": "running",
      "description": "The current status of the migration."
    },
    "created_at": {
      "type": "string",
      "example": "2020-10-29T15:57:38Z",
      "description": "The time the migration was initiated, in ISO 8601 format."
    }
  }
}
object opensearch_connection
{
  "type": "object",
  "properties": {
    "ssl": {
      "type": "boolean",
      "example": true,
      "readOnly": true,
      "description": "A boolean value indicating if the connection should be made over SSL."
    },
    "uri": {
      "type": "string",
      "example": "opensearch://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require",
      "readOnly": true,
      "description": "This is provided as a convenience and should be able to be constructed by the other attributes."
    },
    "host": {
      "type": "string",
      "example": "backend-do-user-19081923-0.db.ondigitalocean.com",
      "readOnly": true,
      "description": "The FQDN pointing to the opensearch cluster's current primary node."
    },
    "port": {
      "type": "integer",
      "example": 25060,
      "readOnly": true,
      "description": "The port on which the opensearch dashboard is listening."
    },
    "user": {
      "type": "string",
      "example": "doadmin",
      "readOnly": true,
      "description": "The default user for the opensearch dashboard."
    },
    "password": {
      "type": "string",
      "example": "wv78n3zpz42xezdk",
      "readOnly": true,
      "description": "The randomly generated password for the default user."
    }
  }
}
object options
{
  "type": "object",
  "properties": {
    "options": {
      "type": "object",
      "properties": {
        "pg": {
          "allOf": [
            {
              "$ref": "#/components/schemas/database_region_options"
            },
            {
              "$ref": "#/components/schemas/database_version_options"
            },
            {
              "$ref": "#/components/schemas/database_layout_options"
            }
          ]
        },
        "kafka": {
          "allOf": [
            {
              "$ref": "#/components/schemas/database_region_options"
            },
            {
              "$ref": "#/components/schemas/database_version_options"
            },
            {
              "$ref": "#/components/schemas/database_layout_options"
            }
          ]
        },
        "mysql": {
          "allOf": [
            {
              "$ref": "#/components/schemas/database_region_options"
            },
            {
              "$ref": "#/components/schemas/database_version_options"
            },
            {
              "$ref": "#/components/schemas/database_layout_options"
            }
          ]
        },
        "redis": {
          "allOf": [
            {
              "$ref": "#/components/schemas/database_region_options"
            },
            {
              "$ref": "#/components/schemas/database_version_options"
            },
            {
              "$ref": "#/components/schemas/database_layout_options"
            }
          ]
        },
        "mongodb": {
          "allOf": [
            {
              "$ref": "#/components/schemas/database_region_options"
            },
            {
              "$ref": "#/components/schemas/database_version_options"
            },
            {
              "$ref": "#/components/schemas/database_layout_options"
            }
          ]
        },
        "opensearch": {
          "allOf": [
            {
              "$ref": "#/components/schemas/database_region_options"
            },
            {
              "$ref": "#/components/schemas/database_version_options"
            },
            {
              "$ref": "#/components/schemas/database_layout_options"
            }
          ]
        }
      }
    },
    "version_availability": {
      "type": "object",
      "properties": {
        "pg": {
          "$ref": "#/components/schemas/database_version_availabilities"
        },
        "kafka": {
          "$ref": "#/components/schemas/database_version_availabilities"
        },
        "mysql": {
          "$ref": "#/components/schemas/database_version_availabilities"
        },
        "redis": {
          "$ref": "#/components/schemas/database_version_availabilities"
        },
        "mongodb": {
          "$ref": "#/components/schemas/database_version_availabilities"
        },
        "opensearch": {
          "$ref": "#/components/schemas/database_version_availabilities"
        }
      }
    }
  }
}
object page_links
{
  "type": "object",
  "properties": {
    "pages": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/forward_links"
        },
        {
          "$ref": "#/components/schemas/backward_links"
        },
        {}
      ],
      "example": {
        "pages": {
          "prev": "https://api.digitalocean.com/v2/account/keys?page=2",
          "first": "https://api.digitalocean.com/v2/account/keys?page=1"
        }
      }
    }
  }
}
object pagination
{
  "type": "object",
  "properties": {
    "links": {
      "$ref": "#/components/schemas/page_links"
    }
  }
}
object pgbouncer
{
  "type": "object",
  "properties": {
    "min_pool_size": {
      "type": "integer",
      "example": 1,
      "maximum": 10000,
      "minimum": 0,
      "description": "If current server connections are below this number, adds more. Improves behavior when usual load comes suddenly back after period of total inactivity. The value is effectively capped at the pool size."
    },
    "server_lifetime": {
      "type": "integer",
      "example": 3600,
      "maximum": 86400,
      "minimum": 60,
      "description": "The pooler closes any unused server connection that has been connected longer than this amount of seconds."
    },
    "autodb_pool_mode": {
      "enum": [
        "session",
        "transaction",
        "statement"
      ],
      "type": "string",
      "example": "session",
      "description": "PGBouncer pool mode"
    },
    "autodb_pool_size": {
      "type": "integer",
      "example": 1,
      "maximum": 10000,
      "minimum": 0,
      "description": "If non-zero, automatically creates a pool of that size per user when a pool doesn't exist."
    },
    "autodb_idle_timeout": {
      "type": "integer",
      "example": 3600,
      "maximum": 86400,
      "minimum": 0,
      "description": "If the automatically-created database pools have been unused this many seconds, they are freed. If 0, timeout is disabled."
    },
    "server_idle_timeout": {
      "type": "integer",
      "example": 600,
      "maximum": 86400,
      "minimum": 0,
      "description": "Drops server connections if they have been idle more than this many seconds.  If 0, timeout is disabled. "
    },
    "autodb_max_db_connections": {
      "type": "integer",
      "example": 1,
      "maximum": 2147483647,
      "minimum": 0,
      "description": "Only allows a maximum this many server connections per database (regardless of user). If 0, allows unlimited connections."
    },
    "ignore_startup_parameters": {
      "type": "array",
      "items": {
        "enum": [
          "extra_float_digits",
          "search_path"
        ],
        "type": "string",
        "description": "Enum of parameters to ignore when given in startup packet."
      },
      "example": [
        "extra_float_digits",
        "search_path"
      ],
      "maxItems": 32,
      "description": "List of parameters to ignore when given in startup packet."
    },
    "server_reset_query_always": {
      "type": "boolean",
      "example": false,
      "description": "Run server_reset_query (DISCARD ALL) in all pooling modes."
    }
  },
  "description": "PGBouncer connection pooling settings"
}
object postgres
{
  "type": "object",
  "properties": {
    "jit": {
      "type": "boolean",
      "example": true,
      "description": "Activates, in a boolean, the system-wide use of Just-in-Time Compilation (JIT)."
    },
    "timezone": {
      "type": "string",
      "example": "Europe/Helsinki",
      "maxLength": 64,
      "description": "PostgreSQL service timezone"
    },
    "work_mem": {
      "type": "integer",
      "example": 4,
      "maximum": 1024,
      "minimum": 1,
      "description": "The maximum amount of memory, in MB, used by a query operation (such as a sort or hash table) before writing to temporary disk files. Default is 1MB + 0.075% of total RAM (up to 32MB)."
    },
    "pgbouncer": {
      "$ref": "#/components/schemas/pgbouncer"
    },
    "backup_hour": {
      "type": "integer",
      "example": 3,
      "maximum": 23,
      "minimum": 0,
      "description": "The hour of day (in UTC) when backup for the service starts. New backup only starts if previous backup has already completed."
    },
    "timescaledb": {
      "$ref": "#/components/schemas/timescaledb"
    },
    "backup_minute": {
      "type": "integer",
      "example": 30,
      "maximum": 59,
      "minimum": 0,
      "description": "The minute of the backup hour when backup for the service starts. New backup is only started if previous backup has already completed."
    },
    "bgwriter_delay": {
      "type": "integer",
      "example": 200,
      "maximum": 10000,
      "minimum": 10,
      "description": "Specifies the delay, in milliseconds, between activity rounds for the background writer. Default is 200 ms."
    },
    "log_line_prefix": {
      "enum": [
        "pid=%p,user=%u,db=%d,app=%a,client=%h",
        "%m [%p] %q[user=%u,db=%d,app=%a]",
        "%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h"
      ],
      "type": "string",
      "example": "pid=%p,user=%u,db=%d,app=%a,client=%h",
      "description": "Selects one of the available log-formats. These can support popular log analyzers like pgbadger, pganalyze, etc."
    },
    "max_stack_depth": {
      "type": "integer",
      "example": 2097152,
      "maximum": 6291456,
      "minimum": 2097152,
      "description": "Maximum depth of the stack in bytes."
    },
    "max_wal_senders": {
      "type": "integer",
      "example": 32,
      "maximum": 64,
      "minimum": 20,
      "description": "PostgreSQL maximum WAL senders. Once increased, this parameter cannot be lowered from its set value."
    },
    "temp_file_limit": {
      "type": "integer",
      "example": 5000000,
      "maximum": 2147483647,
      "minimum": -1,
      "description": "PostgreSQL temporary file limit in KiB. If -1, sets to unlimited."
    },
    "track_functions": {
      "enum": [
        "all",
        "pl",
        "none"
      ],
      "type": "string",
      "example": "all",
      "description": "Enables tracking of function call counts and time used."
    },
    "track_io_timing": {
      "enum": [
        "off",
        "on"
      ],
      "type": "string",
      "example": "off",
      "description": "Enables timing of database I/O calls. This parameter is off by default, because it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms."
    },
    "deadlock_timeout": {
      "type": "integer",
      "example": 1000,
      "maximum": 1800000,
      "minimum": 500,
      "description": "The amount of time, in milliseconds, to wait on a lock before checking to see if there is a deadlock condition."
    },
    "wal_writer_delay": {
      "type": "integer",
      "example": 50,
      "maximum": 200,
      "minimum": 10,
      "description": "WAL flush interval in milliseconds. Note that setting this value to lower than the default 200ms may negatively impact performance"
    },
    "autovacuum_naptime": {
      "type": "integer",
      "example": 43200,
      "maximum": 86400,
      "minimum": 0,
      "description": "Specifies the minimum delay, in seconds, between autovacuum runs on any given database. The default is one minute."
    },
    "wal_sender_timeout": {
      "type": "integer",
      "example": 60000,
      "maximum": 10800000,
      "minimum": 0,
      "description": "Terminate replication connections that are inactive for longer than this amount of time, in milliseconds. Setting this value to zero disables the timeout. Must be either 0 or between 5000 and 10800000."
    },
    "log_error_verbosity": {
      "enum": [
        "TERSE",
        "DEFAULT",
        "VERBOSE"
      ],
      "type": "string",
      "example": "VERBOSE",
      "description": "Controls the amount of detail written in the server log for each message that is logged."
    },
    "pg_partman_bgw.role": {
      "type": "string",
      "example": "myrolename",
      "pattern": "^[_A-Za-z0-9][-._A-Za-z0-9]{0,63}$",
      "maxLength": 64,
      "description": "Controls which role to use for pg_partman's scheduled background tasks. Must consist of alpha-numeric characters, dots, underscores, or dashes. May not start with dash or dot. Maximum of 64 characters."
    },
    "stat_monitor_enable": {
      "type": "boolean",
      "example": false,
      "description": "Enable the pg_stat_monitor extension. <b>Enabling this extension will cause the cluster to be restarted.</b> When this extension is enabled, pg_stat_statements results for utility commands are unreliable."
    },
    "bgwriter_flush_after": {
      "type": "integer",
      "example": 512,
      "maximum": 2048,
      "minimum": 0,
      "description": "The amount of kilobytes that need to be written by the background writer before attempting to force the OS to issue these writes to underlying storage. Specified in kilobytes, default is 512.  Setting of 0 disables forced writeback."
    },
    "max_parallel_workers": {
      "type": "integer",
      "example": 12,
      "maximum": 96,
      "minimum": 0,
      "description": "Sets the maximum number of workers that the system can support for parallel queries."
    },
    "max_worker_processes": {
      "type": "integer",
      "example": 16,
      "maximum": 96,
      "minimum": 8,
      "description": "Sets the maximum number of background processes that the system can support. Once increased, this parameter cannot be lowered from its set value."
    },
    "bgwriter_lru_maxpages": {
      "type": "integer",
      "example": 100,
      "maximum": 1073741823,
      "minimum": 0,
      "description": "The maximum number of buffers that the background writer can write. Setting this to zero disables background writing. Default is 100."
    },
    "max_files_per_process": {
      "type": "integer",
      "example": 2048,
      "maximum": 4096,
      "minimum": 1000,
      "description": "PostgreSQL maximum number of files that can be open per process."
    },
    "max_replication_slots": {
      "type": "integer",
      "example": 16,
      "maximum": 64,
      "minimum": 8,
      "description": "PostgreSQL maximum replication slots."
    },
    "autovacuum_max_workers": {
      "type": "integer",
      "example": 5,
      "maximum": 20,
      "minimum": 1,
      "description": "Specifies the maximum number of autovacuum processes (other than the autovacuum launcher) that may be running at any one time. The default is three. This parameter can only be set at server start."
    },
    "track_commit_timestamp": {
      "enum": [
        "off",
        "on"
      ],
      "type": "string",
      "example": "off",
      "description": "Record commit time of transactions."
    },
    "bgwriter_lru_multiplier": {
      "type": "number",
      "example": 2,
      "maximum": 10,
      "minimum": 0,
      "description": "The average recent need for new buffers is multiplied by bgwriter_lru_multiplier to arrive at an estimate of the number that will be needed during the next round, (up to bgwriter_lru_maxpages). 1.0 represents a “just in time” policy of writing exactly the number of buffers predicted to be needed. Larger values provide some cushion against spikes in demand, while smaller values intentionally leave writes to be done by server processes. The default is 2.0."
    },
    "pg_partman_bgw.interval": {
      "type": "integer",
      "example": 3600,
      "maximum": 604800,
      "minimum": 3600,
      "description": "Sets the time interval to run pg_partman's scheduled tasks."
    },
    "synchronous_replication": {
      "enum": [
        "off",
        "quorum"
      ],
      "type": "string",
      "example": "off",
      "description": "Synchronous replication type. Note that the service plan also needs to support synchronous replication."
    },
    "pg_stat_statements.track": {
      "enum": [
        "all",
        "top",
        "none"
      ],
      "type": "string",
      "example": "all",
      "description": "Controls which statements are counted. Specify 'top' to track top-level statements (those issued directly by clients), 'all' to also track nested statements (such as statements invoked within functions), or 'none' to disable statement statistics collection. The default value is top."
    },
    "autovacuum_freeze_max_age": {
      "type": "integer",
      "example": 200000000,
      "maximum": 1500000000,
      "minimum": 200000000,
      "description": "Specifies the maximum age (in transactions) that a table's pg_class.relfrozenxid field can attain before a VACUUM operation is forced to prevent transaction ID wraparound within the table. Note that the system will launch autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled. This parameter will cause the server to be restarted."
    },
    "default_toast_compression": {
      "enum": [
        "lz4",
        "pglz"
      ],
      "type": "string",
      "example": "lz4",
      "description": "Specifies the default TOAST compression method for values of compressible columns (the default is lz4)."
    },
    "max_locks_per_transaction": {
      "type": "integer",
      "example": 128,
      "maximum": 6400,
      "minimum": 64,
      "description": "PostgreSQL maximum locks per transaction. Once increased, this parameter cannot be lowered from its set value."
    },
    "max_prepared_transactions": {
      "type": "integer",
      "example": 20,
      "maximum": 10000,
      "minimum": 0,
      "description": "PostgreSQL maximum prepared transactions. Once increased, this parameter cannot be lowered from its set value."
    },
    "max_standby_archive_delay": {
      "type": "integer",
      "example": 43200,
      "maximum": 43200000,
      "minimum": 1,
      "description": "Max standby archive delay in milliseconds."
    },
    "shared_buffers_percentage": {
      "type": "number",
      "example": 41.5,
      "maximum": 60,
      "minimum": 20,
      "description": "Percentage of total RAM that the database server uses for shared memory buffers.  Valid range is 20-60 (float), which corresponds to 20% - 60%.  This setting adjusts the shared_buffers configuration value."
    },
    "track_activity_query_size": {
      "type": "integer",
      "example": 1024,
      "maximum": 10240,
      "minimum": 1024,
      "description": "Specifies the number of bytes reserved to track the currently executing command for each active session."
    },
    "log_min_duration_statement": {
      "type": "integer",
      "example": -1,
      "maximum": 86400000,
      "minimum": -1,
      "description": "Log statements that take more than this number of milliseconds to run. If -1, disables."
    },
    "autovacuum_vacuum_threshold": {
      "type": "integer",
      "example": 50,
      "maximum": 2147483647,
      "minimum": 0,
      "description": "Specifies the minimum number of updated or deleted tuples needed to trigger a VACUUM in any one table. The default is 50 tuples."
    },
    "log_autovacuum_min_duration": {
      "type": "integer",
      "example": -1,
      "maximum": 2147483647,
      "minimum": -1,
      "description": "Causes each action executed by autovacuum to be logged if it ran for at least the specified number of milliseconds. Setting this to zero logs all autovacuum actions. Minus-one (the default) disables logging autovacuum actions."
    },
    "max_standby_streaming_delay": {
      "type": "integer",
      "example": 43200,
      "maximum": 43200000,
      "minimum": 1,
      "description": "Max standby streaming delay in milliseconds."
    },
    "autovacuum_analyze_threshold": {
      "type": "integer",
      "example": 50,
      "maximum": 2147483647,
      "minimum": 0,
      "description": "Specifies the minimum number of inserted, updated, or deleted tuples needed to trigger an ANALYZE in any one table. The default is 50 tuples."
    },
    "autovacuum_vacuum_cost_delay": {
      "type": "integer",
      "example": 20,
      "maximum": 100,
      "minimum": -1,
      "description": "Specifies the cost delay value, in milliseconds, that will be used in automatic VACUUM operations. If -1, uses the regular vacuum_cost_delay value, which is 20 milliseconds."
    },
    "autovacuum_vacuum_cost_limit": {
      "type": "integer",
      "example": -1,
      "maximum": 10000,
      "minimum": -1,
      "description": "Specifies the cost limit value that will be used in automatic VACUUM operations. If -1 is specified (which is the default), the regular vacuum_cost_limit value will be used."
    },
    "autovacuum_vacuum_scale_factor": {
      "type": "number",
      "example": 0.2,
      "maximum": 1,
      "minimum": 0,
      "description": "Specifies a fraction, in a decimal value, of the table size to add to autovacuum_vacuum_threshold when deciding whether to trigger a VACUUM. The default is 0.2 (20% of table size)."
    },
    "max_pred_locks_per_transaction": {
      "type": "integer",
      "example": 128,
      "maximum": 640,
      "minimum": 64,
      "description": "PostgreSQL maximum predicate locks per transaction."
    },
    "autovacuum_analyze_scale_factor": {
      "type": "number",
      "example": 0.2,
      "maximum": 1,
      "minimum": 0,
      "description": "Specifies a fraction, in a decimal value, of the table size to add to autovacuum_analyze_threshold when deciding whether to trigger an ANALYZE. The default is 0.2 (20% of table size)."
    },
    "max_logical_replication_workers": {
      "type": "integer",
      "example": 16,
      "maximum": 64,
      "minimum": 4,
      "description": "PostgreSQL maximum logical replication workers (taken from the pool of max_parallel_workers)."
    },
    "max_parallel_workers_per_gather": {
      "type": "integer",
      "example": 16,
      "maximum": 96,
      "minimum": 0,
      "description": "Sets the maximum number of workers that can be started by a single Gather or Gather Merge node."
    },
    "idle_in_transaction_session_timeout": {
      "type": "integer",
      "example": 10000,
      "maximum": 604800000,
      "minimum": 0,
      "description": "Time out sessions with open transactions after this number of milliseconds"
    }
  }
}
object previous_outage
{
  "type": "object",
  "properties": {
    "region": {
      "type": "string",
      "example": "us_east"
    },
    "ended_at": {
      "type": "string",
      "example": "2022-03-17T18:06:55Z"
    },
    "started_at": {
      "type": "string",
      "example": "2022-03-17T18:04:55Z"
    },
    "duration_seconds": {
      "type": "integer",
      "example": 120
    }
  }
}
object product_charge_item
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "Spaces Subscription",
      "description": "Description of the charge"
    },
    "count": {
      "type": "string",
      "example": "1",
      "description": "Number of times the charge was applied"
    },
    "amount": {
      "type": "string",
      "example": "10.00",
      "description": "Amount of the charge"
    }
  }
}
object product_usage_charges
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "Product usage charges",
      "description": "Description of usage charges"
    },
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/product_charge_item"
      },
      "example": [
        {
          "name": "Spaces Subscription",
          "count": "1",
          "amount": "10.00"
        },
        {
          "name": "Database Clusters",
          "count": "1",
          "amount": "2.34"
        }
      ],
      "description": "List of amount, and grouped aggregates by resource type."
    },
    "amount": {
      "type": "string",
      "example": "12.34",
      "description": "Total amount charged"
    }
  }
}
object project
{
  "allOf": [
    {
      "$ref": "#/components/schemas/project_base"
    },
    {
      "type": "object",
      "properties": {
        "is_default": {
          "type": "boolean",
          "example": false,
          "description": "If true, all resources will be added to this project if no project is specified."
        }
      }
    }
  ]
}
object project_assignment
{
  "type": "object",
  "properties": {
    "resources": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/urn"
      },
      "example": [
        "do:droplet:13457723"
      ],
      "description": "A list of uniform resource names (URNs) to be added to a project."
    }
  }
}
object project_base
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679",
      "readOnly": true,
      "description": "The unique universal identifier of this project."
    },
    "name": {
      "type": "string",
      "example": "my-web-api",
      "maxLength": 175,
      "description": "The human-readable name for the project. The maximum length is 175 characters and the name must be unique."
    },
    "purpose": {
      "type": "string",
      "example": "Service or API",
      "maxLength": 255,
      "description": "The purpose of the project. The maximum length is 255 characters. It can\nhave one of the following values:\n\n- Just trying out DigitalOcean\n- Class project / Educational purposes\n- Website or blog\n- Web Application\n- Service or API\n- Mobile Application\n- Machine learning / AI / Data processing\n- IoT\n- Operational / Developer tooling\n\nIf another value for purpose is specified, for example, \"your custom purpose\",\nyour purpose will be stored as `Other: your custom purpose`.\n"
    },
    "owner_id": {
      "type": "integer",
      "example": 258992,
      "readOnly": true,
      "description": "The integer id of the project owner."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2018-09-27T20:10:35Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the project was created."
    },
    "owner_uuid": {
      "type": "string",
      "example": "99525febec065ca37b2ffe4f852fd2b2581895e7",
      "readOnly": true,
      "description": "The unique universal identifier of the project owner."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2018-09-27T20:10:35Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the project was updated."
    },
    "description": {
      "type": "string",
      "example": "My website API",
      "maxLength": 255,
      "description": "The description of the project. The maximum length is 255 characters."
    },
    "environment": {
      "enum": [
        "Development",
        "Staging",
        "Production"
      ],
      "type": "string",
      "example": "Production",
      "description": "The environment of the project's resources."
    }
  }
}
object purge_cache
{
  "type": "object",
  "required": [
    "files"
  ],
  "properties": {
    "files": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "path/to/image.png",
        "path/to/css/*"
      ],
      "description": "An array of strings containing the path to the content to be purged from the CDN cache."
    }
  }
}
object redis
{
  "type": "object",
  "properties": {
    "redis_ssl": {
      "type": "boolean",
      "default": true,
      "example": true,
      "description": "Require SSL to access Redis"
    },
    "redis_timeout": {
      "type": "integer",
      "default": 300,
      "example": 300,
      "maximum": 31536000,
      "minimum": 0,
      "description": "Redis idle connection timeout in seconds"
    },
    "redis_io_threads": {
      "type": "integer",
      "example": 1,
      "maximum": 32,
      "minimum": 1,
      "description": "Redis IO thread count"
    },
    "redis_persistence": {
      "enum": [
        "off",
        "rdb"
      ],
      "type": "string",
      "example": "rdb",
      "description": "When persistence is 'rdb', Redis does RDB dumps each 10 minutes if any key is changed. Also RDB dumps are done according to backup schedule for backup purposes. When persistence is 'off', no RDB dumps and backups are done, so data can be lost at any moment if service is restarted for any reason, or if service is powered off. Also service can't be forked."
    },
    "redis_lfu_decay_time": {
      "type": "integer",
      "default": 1,
      "example": 1,
      "maximum": 120,
      "minimum": 1,
      "description": "LFU maxmemory-policy counter decay time in minutes"
    },
    "redis_lfu_log_factor": {
      "type": "integer",
      "default": 10,
      "example": 10,
      "maximum": 100,
      "minimum": 0,
      "description": "Counter logarithm factor for volatile-lfu and allkeys-lfu maxmemory-policies"
    },
    "redis_maxmemory_policy": {
      "$ref": "#/components/schemas/eviction_policy_model"
    },
    "redis_number_of_databases": {
      "type": "integer",
      "example": 16,
      "maximum": 128,
      "minimum": 1,
      "description": "Set number of redis databases. Changing this will cause a restart of redis service."
    },
    "redis_acl_channels_default": {
      "enum": [
        "allchannels",
        "resetchannels"
      ],
      "type": "string",
      "example": "allchannels",
      "description": "Determines default pub/sub channels' ACL for new users if ACL is not supplied. When this option is not defined, all_channels is assumed to keep backward compatibility. This option doesn't affect Redis configuration acl-pubsub-default."
    },
    "redis_notify_keyspace_events": {
      "type": "string",
      "default": "",
      "example": "K",
      "pattern": "^[KEg\\$lshzxeA]*$",
      "maxLength": 32,
      "description": "Set notify-keyspace-events option. Requires at least `K` or `E` and accepts any combination of the following options. Setting the parameter to `\"\"` disables notifications.\n- `K` &mdash; Keyspace events\n- `E` &mdash; Keyevent events\n- `g` &mdash; Generic commands (e.g. `DEL`, `EXPIRE`, `RENAME`, ...)\n- `$` &mdash; String commands\n- `l` &mdash; List commands\n- `s` &mdash; Set commands\n- `h` &mdash; Hash commands\n- `z` &mdash; Sorted set commands\n- `t` &mdash; Stream commands\n- `d` &mdash; Module key type events\n- `x` &mdash; Expired events\n- `e` &mdash; Evicted events\n- `m` &mdash; Key miss events\n- `n` &mdash; New key events\n- `A` &mdash; Alias for `\"g$lshztxed\"`"
    },
    "redis_pubsub_client_output_buffer_limit": {
      "type": "integer",
      "example": 64,
      "maximum": 512,
      "minimum": 32,
      "description": "Set output buffer limit for pub / sub clients in MB. The value is the hard limit, the soft limit is 1/4 of the hard limit. When setting the limit, be mindful of the available memory in the selected service plan."
    }
  }
}
object region
{
  "type": "object",
  "required": [
    "available",
    "features",
    "name",
    "sizes",
    "slug"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "New York 3",
      "description": "The display name of the region.  This will be a full name that is used in the control panel and other interfaces."
    },
    "slug": {
      "type": "string",
      "example": "nyc3",
      "description": "A human-readable string that is used as a unique identifier for each region."
    },
    "sizes": {
      "items": {
        "type": "string"
      },
      "example": [
        "s-1vcpu-1gb",
        "s-1vcpu-2gb",
        "s-1vcpu-3gb",
        "s-2vcpu-2gb",
        "s-3vcpu-1gb",
        "s-2vcpu-4gb",
        "s-4vcpu-8gb",
        "s-6vcpu-16gb",
        "s-8vcpu-32gb",
        "s-12vcpu-48gb",
        "s-16vcpu-64gb",
        "s-20vcpu-96gb",
        "s-24vcpu-128gb",
        "s-32vcpu-192g"
      ],
      "description": "This attribute is set to an array which contains the identifying slugs for the sizes available in this region."
    },
    "features": {
      "items": {
        "type": "string"
      },
      "example": [
        "private_networking",
        "backups",
        "ipv6",
        "metadata",
        "install_agent",
        "storage",
        "image_transfer"
      ],
      "description": "This attribute is set to an array which contains features available in this region"
    },
    "available": {
      "type": "boolean",
      "example": true,
      "description": "This is a boolean value that represents whether new Droplets can be created in this region."
    }
  }
}
string region_slug
{
  "enum": [
    "ams1",
    "ams2",
    "ams3",
    "blr1",
    "fra1",
    "lon1",
    "nyc1",
    "nyc2",
    "nyc3",
    "sfo1",
    "sfo2",
    "sfo3",
    "sgp1",
    "tor1"
  ],
  "type": "string",
  "example": "nyc3",
  "description": "The slug identifier for the region where the resource will initially be  available."
}
object region_state
{
  "type": "object",
  "properties": {
    "status": {
      "enum": [
        "DOWN",
        "UP",
        "CHECKING"
      ],
      "type": "string",
      "example": "UP"
    },
    "status_changed_at": {
      "type": "string",
      "example": "2022-03-17T22:28:51Z"
    },
    "thirty_day_uptime_percentage": {
      "type": "number",
      "example": 97.99
    }
  }
}
object regional_state
{
  "type": "object",
  "properties": {
    "eu_west": {
      "$ref": "#/components/schemas/region_state"
    },
    "us_east": {
      "$ref": "#/components/schemas/region_state"
    }
  },
  "description": "A map of region to regional state"
}
array regions_array
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/region_slug"
  },
  "example": [
    "nyc1",
    "nyc2"
  ],
  "description": "This attribute is an array of the regions that the image is available in. The regions are represented by their identifying slug values."
}
object registry
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "example",
      "pattern": "^[a-z0-9-]{1,63}$",
      "maxLength": 63,
      "description": "A globally unique name for the container registry. Must be lowercase and be composed only of numbers, letters and `-`, up to a limit of 63 characters."
    },
    "region": {
      "type": "string",
      "example": "fra1",
      "description": "Slug of the region where registry data is stored"
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-03-21T16:02:37Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the registry was created."
    },
    "subscription": {
      "allOf": [
        {
          "readOnly": true
        },
        {
          "$ref": "#/components/schemas/subscription"
        }
      ]
    },
    "storage_usage_bytes": {
      "type": "integer",
      "example": 29393920,
      "readOnly": true,
      "description": "The amount of storage used in the registry in bytes."
    },
    "storage_usage_bytes_updated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-11-04T21:39:49.530562231Z",
      "readOnly": true,
      "description": "The time at which the storage usage was updated. Storage usage is calculated asynchronously, and may not immediately reflect pushes to the registry."
    }
  }
}
object registry_create
{
  "type": "object",
  "required": [
    "name",
    "subscription_tier_slug"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "example",
      "pattern": "^[a-z0-9-]{1,63}$",
      "maxLength": 63,
      "description": "A globally unique name for the container registry. Must be lowercase and be composed only of numbers, letters and `-`, up to a limit of 63 characters."
    },
    "region": {
      "enum": [
        "nyc3",
        "sfo3",
        "ams3",
        "sgp1",
        "fra1"
      ],
      "type": "string",
      "example": "fra1",
      "description": "Slug of the region where registry data is stored. When not provided, a region will be selected."
    },
    "subscription_tier_slug": {
      "enum": [
        "starter",
        "basic",
        "professional"
      ],
      "type": "string",
      "example": "basic",
      "description": "The slug of the subscription tier to sign up for. Valid values can be retrieved using the options endpoint."
    }
  }
}
object repository
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "repo-1",
      "description": "The name of the repository."
    },
    "tag_count": {
      "type": "integer",
      "example": 1,
      "description": "The number of tags in the repository."
    },
    "latest_tag": {
      "$ref": "#/components/schemas/repository_tag"
    },
    "registry_name": {
      "type": "string",
      "example": "example",
      "description": "The name of the container registry."
    }
  }
}
object repository_blob
{
  "type": "object",
  "properties": {
    "digest": {
      "type": "string",
      "example": "sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221",
      "description": "The digest of the blob"
    },
    "compressed_size_bytes": {
      "type": "integer",
      "example": 2803255,
      "description": "The compressed size of the blob in bytes."
    }
  }
}
object repository_manifest
{
  "type": "object",
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "latest",
        "v1",
        "v2"
      ],
      "description": "All tags associated with this manifest"
    },
    "blobs": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/repository_blob"
      },
      "description": "All blobs associated with this manifest"
    },
    "digest": {
      "type": "string",
      "example": "sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221",
      "description": "The manifest digest"
    },
    "repository": {
      "type": "string",
      "example": "repo-1",
      "description": "The name of the repository."
    },
    "size_bytes": {
      "type": "integer",
      "example": 5861888,
      "description": "The uncompressed size of the manifest in bytes (this size is calculated asynchronously so it may not be immediately available)."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-04-09T23:54:25Z",
      "description": "The time the manifest was last updated."
    },
    "registry_name": {
      "type": "string",
      "example": "example",
      "description": "The name of the container registry."
    },
    "compressed_size_bytes": {
      "type": "integer",
      "example": 2803255,
      "description": "The compressed size of the manifest in bytes."
    }
  }
}
object repository_tag
{
  "type": "object",
  "properties": {
    "tag": {
      "type": "string",
      "example": "latest",
      "description": "The name of the tag."
    },
    "repository": {
      "type": "string",
      "example": "repo-1",
      "description": "The name of the repository."
    },
    "size_bytes": {
      "type": "integer",
      "example": 5861888,
      "description": "The uncompressed size of the tag in bytes (this size is calculated asynchronously so it may not be immediately available)."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-04-09T23:54:25Z",
      "description": "The time the tag was last updated."
    },
    "registry_name": {
      "type": "string",
      "example": "example",
      "description": "The name of the container registry."
    },
    "manifest_digest": {
      "type": "string",
      "example": "sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221",
      "description": "The digest of the manifest associated with the tag."
    },
    "compressed_size_bytes": {
      "type": "integer",
      "example": 2803255,
      "description": "The compressed size of the tag in bytes."
    }
  }
}
object repository_v2
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "repo-1",
      "description": "The name of the repository."
    },
    "tag_count": {
      "type": "integer",
      "example": 1,
      "description": "The number of tags in the repository."
    },
    "registry_name": {
      "type": "string",
      "example": "example",
      "description": "The name of the container registry."
    },
    "manifest_count": {
      "type": "integer",
      "example": 1,
      "description": "The number of manifests in the repository."
    },
    "latest_manifest": {
      "$ref": "#/components/schemas/repository_manifest"
    }
  }
}
object reserved_ip
{
  "type": "object",
  "properties": {
    "ip": {
      "type": "string",
      "format": "ipv4",
      "example": "45.55.96.47",
      "description": "The public IP address of the reserved IP. It also serves as its identifier."
    },
    "locked": {
      "type": "boolean",
      "example": true,
      "description": "A boolean value indicating whether or not the reserved IP has pending actions preventing new ones from being submitted."
    },
    "region": {
      "allOf": [
        {
          "$ref": "#/components/schemas/region"
        },
        {
          "type": "object",
          "description": "The region that the reserved IP is reserved to. When you query a reserved IP, the entire region object will be returned."
        }
      ]
    },
    "droplet": {
      "anyOf": [
        {
          "type": "object",
          "title": "null",
          "nullable": true,
          "description": "If the reserved IP is not assigned to a Droplet, the value will be null."
        },
        {
          "$ref": "#/components/schemas/droplet"
        }
      ],
      "example": null,
      "description": "The Droplet that the reserved IP has been assigned to. When you query a reserved IP, if it is assigned to a Droplet, the entire Droplet object will be returned. If it is not assigned, the value will be null."
    },
    "project_id": {
      "type": "string",
      "format": "uuid",
      "example": "746c6152-2fa2-11ed-92d3-27aaa54e4988",
      "description": "The UUID of the project to which the reserved IP currently belongs."
    }
  }
}
object reserved_ip_action_assign
{
  "allOf": [
    {
      "$ref": "#/components/schemas/reserved_ip_action_type"
    },
    {
      "type": "object",
      "required": [
        "type",
        "droplet_id"
      ],
      "properties": {
        "droplet_id": {
          "type": "integer",
          "example": 758604968,
          "description": "The ID of the Droplet that the reserved IP will be assigned to."
        }
      }
    }
  ]
}
object reserved_ip_action_type
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "type": {
      "enum": [
        "assign",
        "unassign"
      ],
      "type": "string",
      "description": "The type of action to initiate for the reserved IP."
    }
  },
  "discriminator": {
    "mapping": {
      "assign": "#/components/schemas/reserved_ip_action_assign",
      "unassign": "#/components/schemas/reserved_ip_action_unassign"
    },
    "propertyName": "type"
  }
}
object reserved_ip_action_unassign
{
  "allOf": [
    {
      "$ref": "#/components/schemas/reserved_ip_action_type"
    },
    {
      "type": "object",
      "required": [
        "type"
      ]
    }
  ]
}
object reserved_ip_create
{
  "oneOf": [
    {
      "type": "object",
      "title": "Assign to Droplet",
      "required": [
        "droplet_id"
      ],
      "properties": {
        "droplet_id": {
          "type": "integer",
          "example": 2457247,
          "description": "The ID of the Droplet that the reserved IP will be assigned to."
        }
      }
    },
    {
      "type": "object",
      "title": "Reserve to Region",
      "required": [
        "region"
      ],
      "properties": {
        "region": {
          "type": "string",
          "example": "nyc3",
          "description": "The slug identifier for the region the reserved IP will be reserved to."
        },
        "project_id": {
          "type": "string",
          "format": "uuid",
          "example": "746c6152-2fa2-11ed-92d3-27aaa54e4988",
          "description": "The UUID of the project to which the reserved IP will be assigned."
        }
      }
    }
  ]
}
object resource
{
  "type": "object",
  "properties": {
    "urn": {
      "$ref": "#/components/schemas/urn"
    },
    "links": {
      "type": "object",
      "properties": {
        "self": {
          "type": "string",
          "format": "uri",
          "example": "https://api.digitalocean.com/v2/droplets/13457723",
          "description": "A URI that can be used to retrieve the resource."
        }
      },
      "description": "The links object contains the `self` object, which contains the resource relationship."
    },
    "status": {
      "enum": [
        "ok",
        "not_found",
        "assigned",
        "already_assigned",
        "service_down"
      ],
      "type": "string",
      "example": "ok",
      "description": "The status of assigning and fetching the resources."
    },
    "assigned_at": {
      "type": "string",
      "format": "date-time",
      "example": "2018-09-28T19:26:37Z",
      "description": "A time value given in ISO8601 combined date and time format that represents when the project was created."
    }
  }
}
object scheduled_details
{
  "type": "object",
  "required": [
    "cron"
  ],
  "properties": {
    "body": {
      "type": "object",
      "nullable": true,
      "properties": {
        "name": {
          "type": "string",
          "example": "Welcome to DO!"
        }
      },
      "description": "Optional data to be sent to function while triggering the function."
    },
    "cron": {
      "type": "string",
      "example": "* * * * *",
      "description": "valid cron expression string which is required for SCHEDULED type triggers."
    }
  },
  "description": "Trigger details for SCHEDULED type, where body is optional.\n"
}
object selective_destroy_associated_resource
{
  "type": "object",
  "properties": {
    "volumes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "ba49449a-7435-11ea-b89e-0a58ac14480f"
      ],
      "description": "An array of unique identifiers for the volumes to be scheduled for deletion."
    },
    "snapshots": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "61486916"
      ],
      "description": "An array of unique identifiers for the snapshots to be scheduled for deletion."
    },
    "floating_ips": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "6186916"
      ],
      "deprecated": true,
      "description": "An array of unique identifiers for the floating IPs to be scheduled for deletion."
    },
    "reserved_ips": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "6186916"
      ],
      "description": "An array of unique identifiers for the reserved IPs to be scheduled for deletion."
    },
    "volume_snapshots": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "edb0478d-7436-11ea-86e6-0a58ac144b91"
      ],
      "description": "An array of unique identifiers for the volume snapshots to be scheduled for deletion."
    }
  },
  "description": "An object containing information about a resource to be scheduled for deletion."
}
object simple_charge
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "Overages",
      "description": "Name of the charge"
    },
    "amount": {
      "type": "string",
      "example": "3.45",
      "description": "Total amount charged in USD"
    }
  }
}
object size
{
  "type": "object",
  "required": [
    "available",
    "disk",
    "memory",
    "price_hourly",
    "price_monthly",
    "regions",
    "slug",
    "transfer",
    "vcpus",
    "description"
  ],
  "properties": {
    "disk": {
      "type": "integer",
      "example": 25,
      "description": "The amount of disk space set aside for Droplets of this size. The value is represented in gigabytes."
    },
    "slug": {
      "type": "string",
      "example": "s-1vcpu-1gb",
      "description": "A human-readable string that is used to uniquely identify each size."
    },
    "vcpus": {
      "type": "integer",
      "example": 1,
      "description": "The integer of number CPUs allocated to Droplets of this size."
    },
    "memory": {
      "type": "integer",
      "example": 1024,
      "minimum": 8,
      "multipleOf": 8,
      "description": "The amount of RAM allocated to Droplets created of this size. The value is represented in megabytes."
    },
    "regions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "ams2",
        "ams3",
        "blr1",
        "fra1",
        "lon1",
        "nyc1",
        "nyc2",
        "nyc3",
        "sfo1",
        "sfo2",
        "sfo3",
        "sgp1",
        "tor1"
      ],
      "description": "An array containing the region slugs where this size is available for Droplet creates."
    },
    "transfer": {
      "type": "number",
      "format": "float",
      "example": 1,
      "description": "The amount of transfer bandwidth that is available for Droplets created in this size. This only counts traffic on the public interface. The value is given in terabytes."
    },
    "available": {
      "type": "boolean",
      "default": true,
      "example": true,
      "description": "This is a boolean value that represents whether new Droplets can be created with this size."
    },
    "description": {
      "type": "string",
      "example": "Basic",
      "description": "A string describing the class of Droplets created from this size. For example: Basic, General Purpose, CPU-Optimized, Memory-Optimized, or Storage-Optimized."
    },
    "price_hourly": {
      "type": "number",
      "format": "float",
      "example": 0.00743999984115362,
      "description": "This describes the price of the Droplet size as measured hourly. The value is measured in US dollars."
    },
    "price_monthly": {
      "type": "number",
      "format": "float",
      "example": 5,
      "description": "This attribute describes the monthly cost of this Droplet size if the Droplet is kept for an entire month. The value is measured in US dollars."
    }
  }
}
object slack_details
{
  "type": "object",
  "required": [
    "url",
    "channel"
  ],
  "properties": {
    "url": {
      "type": "string",
      "example": "https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ",
      "description": "Slack Webhook URL."
    },
    "channel": {
      "type": "string",
      "example": "Production Alerts",
      "description": "Slack channel to notify of an alert trigger."
    }
  }
}
string slug
{
  "type": "string",
  "example": "nyc3",
  "description": "A human-readable string that is used as a unique identifier for each region."
}
object snapshots
{
  "allOf": [
    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "example": "6372321",
          "description": "The unique identifier for the snapshot."
        }
      }
    },
    {
      "$ref": "#/components/schemas/snapshots_base"
    },
    {
      "type": "object",
      "required": [
        "resource_id",
        "resource_type",
        "tags"
      ],
      "properties": {
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "web",
            "env:prod"
          ],
          "nullable": true,
          "description": "An array of Tags the snapshot has been tagged with."
        },
        "resource_id": {
          "type": "string",
          "example": "200776916",
          "description": "The unique identifier for the resource that the snapshot originated from."
        },
        "resource_type": {
          "enum": [
            "droplet",
            "volume"
          ],
          "type": "string",
          "example": "droplet",
          "description": "The type of resource that the snapshot originated from."
        }
      }
    }
  ]
}
object snapshots_base
{
  "type": "object",
  "required": [
    "name",
    "created_at",
    "regions",
    "min_disk_size",
    "size_gigabytes"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "web-01-1595954862243",
      "description": "A human-readable name for the snapshot."
    },
    "regions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "nyc3",
        "sfo3"
      ],
      "description": "An array of the regions that the snapshot is available in. The regions are represented by their identifying slug values."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-07-28T16:47:44Z",
      "description": "A time value given in ISO8601 combined date and time format that represents when the snapshot was created."
    },
    "min_disk_size": {
      "type": "integer",
      "example": 25,
      "description": "The minimum size in GB required for a volume or Droplet to use this snapshot."
    },
    "size_gigabytes": {
      "type": "number",
      "format": "float",
      "example": 2.34,
      "description": "The billable size of the snapshot in gigabytes."
    }
  }
}
object source_database
{
  "type": "object",
  "properties": {
    "source": {
      "type": "object",
      "properties": {
        "host": {
          "type": "string",
          "example": "backend-do-user-19081923-0.db.ondigitalocean.com",
          "description": "The FQDN pointing to the database cluster's current primary node."
        },
        "port": {
          "type": "integer",
          "example": 25060,
          "description": "The port on which the database cluster is listening."
        },
        "dbname": {
          "type": "string",
          "example": "defaultdb",
          "description": "The name of the default database."
        },
        "password": {
          "type": "string",
          "example": "wv78n3zpz42xezdk",
          "description": "The randomly generated password for the default user."
        },
        "username": {
          "type": "string",
          "example": "doadmin",
          "description": "The default user for the database."
        }
      }
    },
    "ignore_dbs": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "default": [],
      "example": [
        "db0",
        "db1"
      ],
      "description": "List of databases that should be ignored during migration."
    },
    "disable_ssl": {
      "type": "boolean",
      "example": false,
      "description": "Enables SSL encryption when connecting to the source database."
    }
  }
}
object sql_mode
{
  "type": "object",
  "required": [
    "sql_mode"
  ],
  "properties": {
    "sql_mode": {
      "type": "string",
      "example": "ANSI,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,STRICT_ALL_TABLES",
      "description": "A string specifying the configured SQL modes for the MySQL cluster."
    }
  }
}
object sshKeys
{
  "type": "object",
  "required": [
    "public_key",
    "name"
  ],
  "properties": {
    "id": {
      "$ref": "#/components/schemas/ssh_key_id"
    },
    "name": {
      "$ref": "#/components/schemas/ssh_key_name"
    },
    "public_key": {
      "type": "string",
      "example": "ssh-rsa AEXAMPLEaC1yc2EAAAADAQABAAAAQQDDHr/jh2Jy4yALcK4JyWbVkPRaWmhck3IgCoeOO3z1e2dBowLh64QAM+Qb72pxekALga2oi4GvT+TlWNhzPH4V example",
      "description": "The entire public key string that was uploaded. Embedded into the root user's `authorized_keys` file if you include this key during Droplet creation."
    },
    "fingerprint": {
      "$ref": "#/components/schemas/ssh_key_fingerprint"
    }
  }
}
string ssh_key_fingerprint
{
  "type": "string",
  "example": "3b:16:bf:e4:8b:00:8b:b8:59:8c:a9:d3:f0:19:45:fa",
  "readOnly": true,
  "description": "A unique identifier that differentiates this key from other keys using  a format that SSH recognizes. The fingerprint is created when the key is added to your account."
}
integer ssh_key_id
{
  "type": "integer",
  "example": 512189,
  "readOnly": true,
  "description": "A unique identification number for this key. Can be used to embed a  specific SSH key into a Droplet."
}
string ssh_key_name
{
  "type": "string",
  "example": "My SSH Public Key",
  "description": "A human-readable display name for this key, used to easily identify the SSH keys when they are displayed."
}
object state
{
  "type": "object",
  "properties": {
    "regions": {
      "$ref": "#/components/schemas/regional_state"
    },
    "previous_outage": {
      "$ref": "#/components/schemas/previous_outage"
    }
  }
}
object sticky_sessions
{
  "type": "object",
  "properties": {
    "type": {
      "enum": [
        "cookies",
        "none"
      ],
      "type": "string",
      "default": "none",
      "example": "cookies",
      "description": "An attribute indicating how and if requests from a client will be persistently served by the same backend Droplet. The possible values are `cookies` or `none`."
    },
    "cookie_name": {
      "type": "string",
      "example": "DO-LB",
      "description": "The name of the cookie sent to the client. This attribute is only returned when using `cookies` for the sticky sessions type."
    },
    "cookie_ttl_seconds": {
      "type": "integer",
      "example": 300,
      "description": "The number of seconds until the cookie set by the load balancer expires. This attribute is only returned when using `cookies` for the sticky sessions type."
    }
  },
  "description": "An object specifying sticky sessions settings for the load balancer."
}
object subscription
{
  "type": "object",
  "properties": {
    "tier": {
      "$ref": "#/components/schemas/subscription_tier_base"
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-01-23T21:19:12Z",
      "readOnly": true,
      "description": "The time at which the subscription was created."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-11-05T15:53:24Z",
      "readOnly": true,
      "description": "The time at which the subscription was last updated."
    }
  }
}
object subscription_tier_base
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "Basic",
      "description": "The name of the subscription tier."
    },
    "slug": {
      "type": "string",
      "example": "basic",
      "description": "The slug identifier of the subscription tier."
    },
    "allow_storage_overage": {
      "type": "boolean",
      "example": true,
      "description": "A boolean indicating whether the subscription tier supports additional storage above what is included in the base plan at an additional cost per GiB used."
    },
    "included_repositories": {
      "type": "integer",
      "example": 5,
      "description": "The number of repositories included in the subscription tier. `0` indicates that the subscription tier includes unlimited repositories."
    },
    "included_storage_bytes": {
      "type": "integer",
      "example": 5368709120,
      "description": "The amount of storage included in the subscription tier in bytes."
    },
    "monthly_price_in_cents": {
      "type": "integer",
      "example": 500,
      "description": "The monthly cost of the subscription tier in cents."
    },
    "included_bandwidth_bytes": {
      "type": "integer",
      "example": 5368709120,
      "description": "The amount of outbound data transfer included in the subscription tier in bytes."
    },
    "storage_overage_price_in_cents": {
      "type": "integer",
      "example": 2,
      "description": "The price paid in cents per GiB for additional storage beyond what is included in the subscription plan."
    }
  }
}
object subscription_tier_extended
{
  "type": "object",
  "properties": {
    "eligible": {
      "type": "boolean",
      "example": true,
      "description": "A boolean indicating whether your account it eligible to use a certain subscription tier."
    },
    "eligibility_reasons": {
      "type": "array",
      "items": {
        "enum": [
          "OverRepositoryLimit",
          "OverStorageLimit"
        ],
        "type": "string"
      },
      "example": [
        "OverRepositoryLimit"
      ],
      "description": "If your account is not eligible to use a certain subscription tier, this will include a list of reasons that prevent you from using the tier."
    }
  }
}
object tags
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "extra-awesome",
      "pattern": "^[a-zA-Z0-9_\\-\\:]+$",
      "maxLength": 255,
      "description": "The name of the tag. Tags may contain letters, numbers, colons, dashes, and underscores.\nThere is a limit of 255 characters per tag.\n\n**Note:** Tag names are case stable, which means the capitalization you use when you first create a tag is canonical.\n\nWhen working with tags in the API, you must use the tag's canonical capitalization. For example, if you create a tag named \"PROD\", the URL to add that tag to a resource would be `https://api.digitalocean.com/v2/tags/PROD/resources` (not `/v2/tags/prod/resources`).\n\nTagged resources in the control panel will always display the canonical capitalization. For example, if you create a tag named \"PROD\", you can tag resources in the control panel by entering \"prod\". The tag will still display with its canonical capitalization, \"PROD\".\n"
    },
    "resources": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/components/schemas/tags_metadata"
        },
        {
          "properties": {
            "imgages": {
              "$ref": "#/components/schemas/tags_metadata"
            },
            "volumes": {
              "$ref": "#/components/schemas/tags_metadata"
            },
            "droplets": {
              "$ref": "#/components/schemas/tags_metadata"
            },
            "databases": {
              "$ref": "#/components/schemas/tags_metadata"
            },
            "volume_snapshots": {
              "$ref": "#/components/schemas/tags_metadata"
            }
          }
        }
      ],
      "example": {
        "count": 5,
        "images": {
          "count": 1,
          "last_tagged_uri": "https://api.digitalocean.com/v2/images/7555620"
        },
        "volumes": {
          "count": 1,
          "last_tagged_uri": "https://api.digitalocean.com/v2/volumes/3d80cb72-342b-4aaa-b92e-4e4abb24a933"
        },
        "droplets": {
          "count": 1,
          "last_tagged_uri": "https://api.digitalocean.com/v2/droplets/3164444"
        },
        "databases": {
          "count": 1,
          "last_tagged_uri": "https://api.digitalocean.com/v2/databases/b92438f6-ba03-416c-b642-e9236db91976"
        },
        "last_tagged_uri": "https://api.digitalocean.com/v2/images/7555620",
        "volume_snapshots": {
          "count": 1,
          "last_tagged_uri": "https://api.digitalocean.com/v2/snapshots/1f6f46e8-6b60-11e9-be4e-0a58ac144519"
        }
      },
      "readOnly": true,
      "description": "An embedded object containing key value pairs of resource type and resource statistics. It also includes a count of the total number of resources tagged with the current tag as well as a `last_tagged_uri` attribute set to the last resource tagged with the current tag."
    }
  },
  "description": "A tag is a label that can be applied to a resource (currently Droplets, Images, Volumes, Volume Snapshots, and Database clusters) in order to better organize or facilitate the lookups and actions on it.\nTags have two attributes: a user defined `name` attribute and an embedded `resources` attribute with information about resources that have been tagged."
}
array tags_array
{
  "type": "array",
  "items": {
    "type": "string"
  },
  "example": [
    "base-image",
    "prod"
  ],
  "nullable": true,
  "description": "A flat array of tag names as strings to be applied to the resource. Tag names may be for either existing or new tags."
}
object tags_metadata
{
  "type": "object",
  "properties": {
    "count": {
      "type": "integer",
      "example": 5,
      "minimum": 0,
      "description": "The number of tagged objects for this type of resource."
    },
    "last_tagged_uri": {
      "type": "string",
      "example": "https://api.digitalocean.com/v2/images/7555620",
      "description": "The URI for the last tagged object for this type of resource."
    }
  },
  "description": "Tagged Resource Statistics include metadata regarding the resource type that has been tagged."
}
object tags_resource
{
  "type": "object",
  "required": [
    "resources"
  ],
  "properties": {
    "resources": {
      "type": "array",
      "items": {
        "properties": {
          "resource_id": {
            "type": "string",
            "example": "3d80cb72-342b-4aaa-b92e-4e4abb24a933",
            "description": "The identifier of a resource."
          },
          "resource_type": {
            "enum": [
              "droplet",
              "image",
              "volume",
              "volume_snapshot"
            ],
            "type": "string",
            "example": "volume",
            "description": "The type of the resource."
          }
        }
      },
      "example": [
        {
          "resource_id": "9569411",
          "resource_type": "droplet"
        },
        {
          "resource_id": "7555620",
          "resource_type": "image"
        },
        {
          "resource_id": "3d80cb72-342b-4aaa-b92e-4e4abb24a933",
          "resource_type": "volume"
        }
      ],
      "description": "An array of objects containing resource_id and resource_type  attributes."
    }
  }
}
object timescaledb
{
  "type": "object",
  "properties": {
    "max_background_workers": {
      "type": "integer",
      "example": 8,
      "maximum": 4096,
      "minimum": 1,
      "description": "The number of background workers for timescaledb operations.  Set to the sum of your number of databases and the total number of concurrent background workers you want running at any given point in time."
    }
  },
  "description": "TimescaleDB extension configuration values"
}
object trigger_info
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "my trigger",
      "description": "The trigger's unique name within the namespace."
    },
    "type": {
      "type": "string",
      "example": "SCHEDULED",
      "description": "String which indicates the type of trigger source like SCHEDULED."
    },
    "function": {
      "type": "string",
      "example": "hello",
      "description": "Name of function(action) that exists in the given namespace."
    },
    "namespace": {
      "type": "string",
      "example": "fn-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "description": "A unique string format of UUID with a prefix fn-."
    },
    "created_at": {
      "type": "string",
      "example": "2022-11-11T04:16:45Z",
      "description": "UTC time string."
    },
    "is_enabled": {
      "type": "boolean",
      "example": true,
      "description": "Indicates weather the trigger is paused or unpaused."
    },
    "updated_at": {
      "type": "string",
      "example": "2022-11-11T04:16:45Z",
      "description": "UTC time string."
    },
    "scheduled_runs": {
      "type": "object",
      "properties": {
        "last_run_at": {
          "type": "string",
          "example": "2022-11-11T04:16:45Z",
          "nullable": true,
          "description": "Indicates last run time. null value indicates trigger not run yet."
        },
        "next_run_at": {
          "type": "string",
          "example": "2022-11-11T04:16:45Z",
          "nullable": true,
          "description": "Indicates next run time. null value indicates trigger will not run."
        }
      }
    },
    "scheduled_details": {
      "$ref": "#/components/schemas/scheduled_details"
    }
  }
}
object update_endpoint
{
  "type": "object",
  "properties": {
    "ttl": {
      "enum": [
        60,
        600,
        3600,
        86400,
        604800
      ],
      "type": "integer",
      "default": 3600,
      "example": 3600,
      "description": "The amount of time the content is cached by the CDN's edge servers in seconds. TTL must be one of 60, 600, 3600, 86400, or 604800. Defaults to 3600 (one hour) when excluded."
    },
    "custom_domain": {
      "type": "string",
      "format": "hostname",
      "example": "static.example.com",
      "description": "The fully qualified domain name (FQDN) of the custom subdomain used with the CDN endpoint."
    },
    "certificate_id": {
      "type": "string",
      "format": "uuid",
      "example": "892071a0-bb95-49bc-8021-3afd67a210bf",
      "description": "The ID of a DigitalOcean managed TLS certificate used for SSL when a custom subdomain is provided."
    }
  }
}
object update_registry
{
  "type": "object",
  "properties": {
    "cancel": {
      "type": "boolean",
      "example": true,
      "description": "A boolean value indicating that the garbage collection should be cancelled."
    }
  }
}
object update_trigger
{
  "type": "object",
  "properties": {
    "is_enabled": {
      "type": "boolean",
      "example": true,
      "description": "Indicates weather the trigger is paused or unpaused."
    },
    "scheduled_details": {
      "$ref": "#/components/schemas/scheduled_details"
    }
  }
}
string urn
{
  "type": "string",
  "example": "do:droplet:13457723",
  "pattern": "^do:(dbaas|domain|droplet|floatingip|loadbalancer|space|volume|kubernetes|vpc):.*",
  "description": "The uniform resource name (URN) for the resource in the format do:resource_type:resource_id."
}
object user
{
  "type": "object",
  "properties": {
    "kubernetes_cluster_user": {
      "type": "object",
      "properties": {
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "example": [
            "k8saas:authenticated"
          ],
          "description": "A list of in-cluster groups that the user belongs to."
        },
        "username": {
          "type": "string",
          "format": "email",
          "example": "sammy@digitalocean.com",
          "description": "The username for the cluster admin user."
        }
      }
    }
  }
}
object user_settings
{
  "type": "object",
  "properties": {
    "acl": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "topic",
          "permission"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "aaa",
            "description": "An identifier for the ACL. Will be computed after the ACL is created/updated."
          },
          "topic": {
            "type": "string",
            "example": "topic-abc.*",
            "description": "A regex for matching the topic(s) that this ACL should apply to."
          },
          "permission": {
            "enum": [
              "admin",
              "consume",
              "produce",
              "produceconsume"
            ],
            "type": "string",
            "example": "consume",
            "description": "Permission set applied to the ACL. 'consume' allows for messages to be consumed from the topic. 'produce' allows for messages to be published to the topic. 'produceconsume' allows for both 'consume' and 'produce' permission. 'admin' allows for 'produceconsume' as well as any operations to administer the topic (delete, update)."
          }
        }
      },
      "description": "ACLs (Access Control Lists) specifying permissions on topics within a Kafka cluster."
    },
    "pg_allow_replication": {
      "type": "boolean",
      "example": true,
      "description": "For Postgres clusters, set to `true` for a user with replication rights.\nThis option is not currently supported for other database engines.\n"
    }
  }
}
object validate_registry
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "example": "example",
      "pattern": "^[a-z0-9-]{1,63}$",
      "maxLength": 63,
      "description": "A globally unique name for the container registry. Must be lowercase and be composed only of numbers, letters and `-`, up to a limit of 63 characters."
    }
  }
}
string version
{
  "type": "string",
  "example": "8",
  "description": "A string representing the version of the database engine in use for the cluster."
}
object version-2
{
  "type": "object",
  "properties": {
    "version": {
      "$ref": "#/components/schemas/version"
    }
  }
}
object volumeAction
{
  "type": "object",
  "allOf": [
    {
      "properties": {
        "type": {
          "type": "string",
          "example": "attach_volume",
          "description": "This is the type of action that the object represents. For example, this could be \"attach_volume\" to represent the state of a volume attach action."
        },
        "resource_id": {
          "type": "integer",
          "example": null,
          "nullable": true
        }
      }
    },
    {
      "$ref": "#/components/schemas/action"
    }
  ]
}
integer volume_action_droplet_id
{
  "type": "integer",
  "example": 11612190,
  "description": "The unique identifier for the Droplet the volume will be attached or detached from."
}
object volume_action_post_attach
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/volume_action_post_base"
    },
    {
      "required": [
        "droplet_id"
      ],
      "properties": {
        "tags": {
          "$ref": "#/components/schemas/tags_array"
        },
        "droplet_id": {
          "$ref": "#/components/schemas/volume_action_droplet_id"
        }
      }
    }
  ]
}
object volume_action_post_base
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "type": {
      "enum": [
        "attach",
        "detach",
        "resize"
      ],
      "type": "string",
      "example": "attach",
      "description": "The volume action to initiate."
    },
    "region": {
      "$ref": "#/components/schemas/region_slug"
    }
  }
}
object volume_action_post_detach
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/volume_action_post_base"
    },
    {
      "required": [
        "droplet_id"
      ],
      "properties": {
        "droplet_id": {
          "$ref": "#/components/schemas/volume_action_droplet_id"
        }
      }
    }
  ]
}
object volume_action_post_resize
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/volume_action_post_base"
    },
    {
      "required": [
        "size_gigabytes"
      ],
      "properties": {
        "size_gigabytes": {
          "type": "integer",
          "maximum": 16384,
          "description": "The new size of the block storage volume in GiB (1024^3)."
        }
      }
    }
  ]
}
object volume_base
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "example": "506f78a4-e098-11e5-ad9f-000f53306ae1",
      "readOnly": true,
      "description": "The unique identifier for the block storage volume."
    },
    "name": {
      "type": "string",
      "example": "example",
      "description": "A human-readable name for the block storage volume. Must be lowercase and be composed only of numbers, letters and \"-\", up to a limit of 64 characters. The name must begin with a letter."
    },
    "tags": {
      "$ref": "#/components/schemas/tags_array"
    },
    "created_at": {
      "type": "string",
      "example": "2020-03-02T17:00:49Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format that represents when the block storage volume was created."
    },
    "description": {
      "type": "string",
      "example": "Block store for examples",
      "description": "An optional free-form text field to describe a block storage volume."
    },
    "droplet_ids": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "example": [],
      "nullable": true,
      "readOnly": true,
      "description": "An array containing the IDs of the Droplets the volume is attached to. Note that at this time, a volume can only be attached to a single Droplet."
    },
    "size_gigabytes": {
      "type": "integer",
      "example": 10,
      "description": "The size of the block storage volume in GiB (1024^3). This field does not apply  when creating a volume from a snapshot."
    }
  }
}
object volume_full
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/volume_base"
    },
    {
      "properties": {
        "region": {
          "allOf": [
            {
              "description": "The region that the block storage volume is located in. When setting a region, the value should be the slug identifier for the region. When you query a block storage volume, the entire region object will be returned."
            },
            {
              "$ref": "#/components/schemas/region"
            }
          ],
          "example": {
            "name": "New York 1",
            "slug": "nyc1",
            "sizes": [
              "s-1vcpu-1gb",
              "s-1vcpu-2gb",
              "s-1vcpu-3gb",
              "s-2vcpu-2gb",
              "s-3vcpu-1gb",
              "s-2vcpu-4gb",
              "s-4vcpu-8gb",
              "s-6vcpu-16gb",
              "s-8vcpu-32gb",
              "s-12vcpu-48gb",
              "s-16vcpu-64gb",
              "s-20vcpu-96gb",
              "s-24vcpu-128gb",
              "s-32vcpu-192gb"
            ],
            "features": [
              "private_networking",
              "backups",
              "ipv6",
              "metadata"
            ],
            "available": true
          },
          "readOnly": true
        },
        "filesystem_type": {
          "type": "string",
          "example": "ext4",
          "description": "The type of filesystem currently in-use on the volume."
        },
        "filesystem_label": {
          "type": "string",
          "example": "example",
          "description": "The label currently applied to the filesystem."
        }
      }
    }
  ]
}
object volume_snapshot_id
{
  "properties": {
    "snapshot_id": {
      "type": "string",
      "example": "b0798135-fb76-11eb-946a-0a58ac146f33",
      "description": "The unique identifier for the volume snapshot from which to create the volume."
    }
  }
}
string volume_write_file_system_label
{
  "type": "string",
  "example": "example",
  "description": "The label applied to the filesystem. Labels for ext4 type filesystems may contain 16 characters while labels for xfs type filesystems are limited to 12 characters. May only be used in conjunction with filesystem_type."
}
object volume_write_file_system_type
{
  "type": "object",
  "properties": {
    "filesystem_type": {
      "type": "string",
      "example": "ext4",
      "description": "The name of the filesystem type to be used on the volume. When provided, the volume will automatically be formatted to the specified filesystem type. Currently, the available options are `ext4` and `xfs`. Pre-formatted volumes are automatically mounted when attached to Ubuntu, Debian, Fedora, Fedora Atomic, and CentOS Droplets created on or after April 26, 2018. Attaching pre-formatted volumes to other Droplets is not recommended."
    }
  }
}
object volumes_ext4
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/volume_base"
    },
    {
      "$ref": "#/components/schemas/volume_snapshot_id"
    },
    {
      "$ref": "#/components/schemas/volume_write_file_system_type"
    },
    {
      "required": [
        "name",
        "size_gigabytes",
        "region"
      ],
      "properties": {
        "region": {
          "$ref": "#/components/schemas/region_slug"
        },
        "filesystem_label": {
          "allOf": [
            {
              "$ref": "#/components/schemas/volume_write_file_system_label"
            },
            {
              "maxLength": 16
            }
          ]
        }
      }
    }
  ]
}
object volumes_xfs
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/volume_base"
    },
    {
      "$ref": "#/components/schemas/volume_snapshot_id"
    },
    {
      "$ref": "#/components/schemas/volume_write_file_system_type"
    },
    {
      "required": [
        "name",
        "size_gigabytes",
        "region"
      ],
      "properties": {
        "region": {
          "$ref": "#/components/schemas/region_slug"
        },
        "filesystem_label": {
          "allOf": [
            {
              "$ref": "#/components/schemas/volume_write_file_system_label"
            },
            {
              "maxLength": 12
            }
          ]
        }
      }
    }
  ]
}
object vpc
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/vpc_updatable"
    },
    {
      "$ref": "#/components/schemas/vpc_create"
    },
    {
      "$ref": "#/components/schemas/vpc_default"
    },
    {
      "$ref": "#/components/schemas/vpc_base"
    }
  ]
}
object vpc_base
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "5a4981aa-9653-4bd1-bef5-d6bff52042e4",
      "readOnly": true,
      "description": "A unique ID that can be used to identify and reference the VPC."
    },
    "urn": {
      "$ref": "#/components/schemas/urn"
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2020-03-13T19:20:47.442049222Z",
      "readOnly": true,
      "description": "A time value given in ISO8601 combined date and time format."
    }
  }
}
object vpc_create
{
  "type": "object",
  "properties": {
    "region": {
      "type": "string",
      "example": "nyc1",
      "description": "The slug identifier for the region where the VPC will be created."
    },
    "ip_range": {
      "type": "string",
      "example": "10.10.10.0/24",
      "description": "The range of IP addresses in the VPC in CIDR notation. Network ranges cannot overlap with other networks in the same account and must be in range of private addresses as defined in RFC1918. It may not be smaller than `/28` nor larger than `/16`. If no IP range is specified, a `/20` network range is generated that won't conflict with other VPC networks in your account."
    }
  }
}
object vpc_default
{
  "type": "object",
  "properties": {
    "default": {
      "type": "boolean",
      "example": true,
      "description": "A boolean value indicating whether or not the VPC is the default network for the region. All applicable resources are placed into the default VPC network unless otherwise specified during their creation. The `default` field cannot be unset from `true`. If you want to set a new default VPC network, update the `default` field of another VPC network in the same region. The previous network's `default` field will be set to `false` when a new default VPC has been defined."
    }
  }
}
object vpc_member
{
  "type": "object",
  "properties": {
    "urn": {
      "$ref": "#/components/schemas/urn"
    },
    "name": {
      "type": "string",
      "example": "nyc1-load-balancer-01",
      "description": "The name of the resource."
    },
    "created_at": {
      "type": "string",
      "example": "2020-03-13T19:30:48Z",
      "description": "A time value given in ISO8601 combined date and time format that represents when the resource was created."
    }
  }
}
object vpc_updatable
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "example": "env.prod-vpc",
      "pattern": "^[a-zA-Z0-9\\-\\.]+$",
      "description": "The name of the VPC. Must be unique and may only contain alphanumeric characters, dashes, and periods."
    },
    "description": {
      "type": "string",
      "example": "VPC for production environment",
      "maxLength": 255,
      "description": "A free-form text field for describing the VPC's purpose. It may be a maximum of 255 characters."
    }
  }
}