openapi: 3.0.0
info:
  title: DigitalOcean API
  version: '2.0'
  description: >
    # Introduction


    The DigitalOcean API allows you to manage Droplets and resources within the

    DigitalOcean cloud in a simple, programmatic way using conventional HTTP
    requests.


    All of the functionality that you are familiar with in the DigitalOcean

    control panel is also available through the API, allowing you to script the

    complex actions that your situation requires.


    The API documentation will start with a general overview about the design

    and technology that has been implemented, followed by reference information

    about specific endpoints.


    ## Requests


    Any tool that is fluent in HTTP can communicate with the API simply by

    requesting the correct URI. Requests should be made using the HTTPS protocol

    so that traffic is encrypted. The interface responds to different methods

    depending on the action required.


    |Method|Usage|

    |--- |--- |

    |GET|For simple retrieval of information about your account, Droplets, or
    environment, you should use the GET method.  The information you request
    will be returned to you as a JSON object. The attributes defined by the JSON
    object can be used to form additional requests.  Any request using the GET
    method is read-only and will not affect any of the objects you are
    querying.|

    |DELETE|To destroy a resource and remove it from your account and
    environment, the DELETE method should be used.  This will remove the
    specified object if it is found.  If it is not found, the operation will
    return a response indicating that the object was not found. This idempotency
    means that you do not have to check for a resource's availability prior to
    issuing a delete command, the final state will be the same regardless of its
    existence.|

    |PUT|To update the information about a resource in your account, the PUT
    method is available. Like the DELETE Method, the PUT method is idempotent. 
    It sets the state of the target using the provided values, regardless of
    their current values. Requests using the PUT method do not need to check the
    current attributes of the object.|

    |PATCH|Some resources support partial modification. In these cases, the
    PATCH method is available. Unlike PUT which generally requires a complete
    representation of a resource, a PATCH request is a set of instructions on
    how to modify a resource updating only specific attributes.|

    |POST|To create a new object, your request should specify the POST method.
    The POST request includes all of the attributes necessary to create a new
    object.  When you wish to create a new object, send a POST request to the
    target endpoint.|

    |HEAD|Finally, to retrieve metadata information, you should use the HEAD
    method to get the headers.  This returns only the header of what would be
    returned with an associated GET request. Response headers contain some
    useful information about your API access and the results that are available
    for your request. For instance, the headers contain your current rate-limit
    value and the amount of time available until the limit resets. It also
    contains metrics about the total number of objects found, pagination
    information, and the total content length.|



    ## HTTP Statuses


    Along with the HTTP methods that the API responds to, it will also return

    standard HTTP statuses, including error codes.


    In the event of a problem, the status will contain the error code, while the

    body of the response will usually contain additional information about the

    problem that was encountered.


    In general, if the status returned is in the 200 range, it indicates that

    the request was fulfilled successfully and that no error was encountered.


    Return codes in the 400 range typically indicate that there was an issue

    with the request that was sent. Among other things, this could mean that you

    did not authenticate correctly, that you are requesting an action that you

    do not have authorization for, that the object you are requesting does not

    exist, or that your request is malformed.


    If you receive a status in the 500 range, this generally indicates a

    server-side problem. This means that we are having an issue on our end and

    cannot fulfill your request currently.


    400 and 500 level error responses will include a JSON object in their body,

    including the following attributes:


    |Name|Type|Description|

    |--- |--- |--- |

    |id|string|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|string|A message providing additional information about the error,
    including details to help resolve it when possible.|

    |request_id|string|Optionally, some endpoints may include a request ID that
    should be provided when reporting bugs or opening support tickets to help
    identify the issue.|


    ### Example Error Response


    ```
        HTTP/1.1 403 Forbidden
        {
          "id":       "forbidden",
          "message":  "You do not have access for the attempted action."
        }
    ```


    ## Responses


    When a request is successful, a response body will typically be sent back in

    the form of a JSON object. An exception to this is when a DELETE request is

    processed, which will result in a successful HTTP 204 status and an empty

    response body.


    Inside of this JSON object, the resource root that was the target of the

    request will be set as the key. This will be the singular form of the word

    if the request operated on a single object, and the plural form of the word

    if a collection was processed.


    For example, if you send a GET request to `/v2/droplets/$DROPLET_ID` you

    will get back an object with a key called "`droplet`". However, if you send

    the GET request to the general collection at `/v2/droplets`, you will get

    back an object with a key called "`droplets`".


    The value of these keys will generally be a JSON object for a request on a

    single object and an array of objects for a request on a collection of

    objects.


    ### Response for a Single Object


    ```json
        {
            "droplet": {
                "name": "example.com"
                . . .
            }
        }
    ```


    ### Response for an Object Collection


    ```json
        {
            "droplets": [
                {
                    "name": "example.com"
                    . . .
                },
                {
                    "name": "second.com"
                    . . .
                }
            ]
        }
    ```


    ## Meta


    In addition to the main resource root, the response may also contain a

    `meta` object. This object contains information about the response itself.


    The `meta` object contains a `total` key that is set to the total number of

    objects returned by the request. This has implications on the `links` object

    and pagination.


    The `meta` object will only be displayed when it has a value. Currently, the

    `meta` object will have a value when a request is made on a collection (like

    `droplets` or `domains`).



    ### Sample Meta Object


    ```json
        {
            . . .
            "meta": {
                "total": 43
            }
            . . .
        }
    ```


    ## Links & Pagination


    The `links` object is returned as part of the response body when pagination

    is enabled. By default, 20 objects are returned per page. If the response

    contains 20 objects or fewer, no `links` object will be returned. If the

    response contains more than 20 objects, the first 20 will be returned along

    with the `links` object.


    You can request a different pagination limit or force pagination by

    appending `?per_page=` to the request with the number of items you would

    like per page. For instance, to show only two results per page, you could

    add `?per_page=2` to the end of your query. The maximum number of results

    per page is 200.


    The `links` object contains a `pages` object. The `pages` object, in turn,

    contains keys indicating the relationship of additional pages. The values of

    these are the URLs of the associated pages. The keys will be one of the

    following:


    *   **first**: The URI of the first page of results.

    *   **prev**: The URI of the previous sequential page of results.

    *   **next**: The URI of the next sequential page of results.

    *   **last**: The URI of the last page of results.


    The `pages` object will only include the links that make sense. So for the

    first page of results, no `first` or `prev` links will ever be set. This

    convention holds true in other situations where a link would not make sense.


    ### Sample Links Object


    ```json
        {
            . . .
            "links": {
                "pages": {
                    "last": "https://api.digitalocean.com/v2/images?page=2",
                    "next": "https://api.digitalocean.com/v2/images?page=2"
                }
            }
            . . .
        }
    ```


    ## Rate Limit


    Requests through the API are rate limited per OAuth token. Current rate
    limits:


    *   5,000 requests per hour

    *   250 requests per minute (5% of the hourly total)


    Once you exceed either limit, you will be rate limited until the next cycle

    starts. Space out any requests that you would otherwise issue in bursts for

    the best results.


    The rate limiting information is contained within the response headers of

    each request. The relevant headers are:


    *   **ratelimit-limit**: The number of requests that can be made per hour.

    *   **ratelimit-remaining**: The number of requests that remain before you
    hit your request limit. See the information below for how the request limits
    expire.

    *   **ratelimit-reset**: This represents the time when the oldest request
    will expire. The value is given in [Unix epoch
    time](http://en.wikipedia.org/wiki/Unix_time). See below for more
    information about how request limits expire.


    More rate limiting information is returned only within burst limit error
    response headers:

    *   **retry-after**: The number of seconds to wait before making another
    request when rate limited.


    As long as the `ratelimit-remaining` count is above zero, you will be able

    to make additional requests.


    The way that a request expires and is removed from the current limit count

    is important to understand. Rather than counting all of the requests for an

    hour and resetting the `ratelimit-remaining` value at the end of the hour,

    each request instead has its own timer.


    This means that each request contributes toward the `ratelimit-remaining`

    count for one complete hour after the request is made. When that request's

    timer runs out, it is no longer counted towards the request limit.


    This has implications on the meaning of the `ratelimit-reset` header as

    well. Because the entire rate limit is not reset at one time, the value of

    this header is set to the time when the _oldest_ request will expire.


    Keep this in mind if you see your `ratelimit-reset` value change, but not

    move an entire hour into the future.


    If the `ratelimit-remaining` reaches zero, subsequent requests will receive

    a 429 error code until the request reset has been reached. 


    `ratelimit-remaining` reaching zero can also indicate that the "burst limit"
    of 250 

    requests per minute limit was met, even if the 5,000 requests per hour limit
    was not. 

    In this case, the 429 error response will include a `retry-after` header to
    indicate how 

    long to wait (in seconds) until the request may be retried.


    You can see the format of the response in the examples. 


    **Note:** The following endpoints have special rate limit requirements that

    are independent of the limits defined above.


    *   Only 12 `POST` requests to the `/v2/floating_ips` endpoint to create
    Floating IPs can be made per 60 seconds.

    *   Only 10 `GET` requests to the `/v2/account/keys` endpoint to list SSH
    keys can be made per 60 seconds.

    *   Only 5 requests to any and all `v2/cdn/endpoints` can be made per 10
    seconds. This includes `v2/cdn/endpoints`, 
        `v2/cdn/endpoints/$ENDPOINT_ID`, and `v2/cdn/endpoints/$ENDPOINT_ID/cache`.
    *   Only 50 strings within the `files` json struct in the
    `v2/cdn/endpoints/$ENDPOINT_ID/cache`
    [payload](https://docs.digitalocean.com/reference/api/api-reference/#operation/cdn_purge_cache) 
        can be requested every 20 seconds.

    ### Sample Rate Limit Headers


    ```
        . . .
        ratelimit-limit: 1200
        ratelimit-remaining: 1193
        rateLimit-reset: 1402425459
        . . .
    ```

      ### Sample Rate Limit Headers When Burst Limit is Reached:

    ```
        . . .
        ratelimit-limit: 5000
        ratelimit-remaining: 0
        rateLimit-reset: 1402425459
        retry-after: 29
        . . .
    ```


    ### Sample Rate Exceeded Response


    ```
        429 Too Many Requests
        {
                id: "too_many_requests",
                message: "API Rate limit exceeded."
        }
    ```


    ## Curl Examples


    Throughout this document, some example API requests will be given using the

    `curl` command. This will allow us to demonstrate the various endpoints in a

    simple, textual format.
      
      These examples assume that you are using a Linux or macOS command line. To run
    these commands on a Windows machine, you can either use cmd.exe, PowerShell,
    or WSL:


    * For cmd.exe, use the `set VAR=VALUE`
    [syntax](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/set_1)

    to define environment variables, call them with `%VAR%`, then replace all
    backslashes (`\`) in the examples with carets (`^`).


    * For PowerShell, use the `$Env:VAR = "VALUE"`
    [syntax](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_variables?view=powershell-7.2)

    to define environment variables, call them with `$Env:VAR`, then replace
    `curl` with `curl.exe` and all backslashes (`\`) in the examples with
    backticks (`` ` ``).


    * WSL is a compatibility layer that allows you to emulate a Linux terminal
    on a Windows machine.

    Install WSL with our [community
    tutorial](https://www.digitalocean.com/community/tutorials/how-to-install-the-windows-subsystem-for-linux-2-on-microsoft-windows-10), 

    then follow this API documentation normally.


    The names of account-specific references (like Droplet IDs, for instance)

    will be represented by variables. For instance, a Droplet ID may be

    represented by a variable called `$DROPLET_ID`. You can set the associated

    variables in your environment if you wish to use the examples without

    modification.


    The first variable that you should set to get started is your OAuth

    authorization token. The next section will go over the details of this, but

    you can set an environmental variable for it now.


    Generate a token by going to the [Apps &
    API](https://cloud.digitalocean.com/settings/applications)

    section of the DigitalOcean control panel. Use an existing token if you have

    saved one, or generate a new token with the "Generate new token" button.

    Copy the generated token and use it to set and export the TOKEN variable in

    your environment as the example shows.


    You may also wish to set some other variables now or as you go along. For

    example, you may wish to set the `DROPLET_ID` variable to one of your

    Droplet IDs since this will be used frequently in the API.


    If you are following along, make sure you use a Droplet ID that you control

    so that your commands will execute correctly.


    If you need access to the headers of a response through `curl`, you can pass

    the `-i` flag to display the header information along with the body. If you

    are only interested in the header, you can instead pass the `-I` flag, which

    will exclude the response body entirely.



    ### Set and Export your OAuth Token


    ```

    export DIGITALOCEAN_TOKEN=your_token_here

    ```


    ### Set and Export a Variable


    ```

    export DROPLET_ID=1111111

    ```


    ## Parameters


    There are two different ways to pass parameters in a request with the API.


    When passing parameters to create or update an object, parameters should be

    passed as a JSON object containing the appropriate attribute names and

    values as key-value pairs. When you use this format, you should specify that

    you are sending a JSON object in the header. This is done by setting the

    `Content-Type` header to `application/json`. This ensures that your request

    is interpreted correctly.


    When passing parameters to filter a response on GET requests, parameters can

    be passed using standard query attributes. In this case, the parameters

    would be embedded into the URI itself by appending a `?` to the end of the

    URI and then setting each attribute with an equal sign. Attributes can be

    separated with a `&`. Tools like `curl` can create the appropriate URI when

    given parameters and values; this can also be done using the `-F` flag and

    then passing the key and value as an argument. The argument should take the

    form of a quoted string with the attribute being set to a value with an

    equal sign.


    ### Pass Parameters as a JSON Object


    ```
        curl -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
            -H "Content-Type: application/json" \
            -d '{"name": "example.com", "ip_address": "127.0.0.1"}' \
            -X POST "https://api.digitalocean.com/v2/domains"
    ```


    ### Pass Filter Parameters as a Query String


    ```
         curl -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
             -X GET \
             "https://api.digitalocean.com/v2/images?private=true"
    ```


    ## Cross Origin Resource Sharing


    In order to make requests to the API from other domains, the API implements

    Cross Origin Resource Sharing (CORS) support.


    CORS support is generally used to create AJAX requests outside of the domain

    that the request originated from. This is necessary to implement projects

    like control panels utilizing the API. This tells the browser that it can

    send requests to an outside domain.


    The procedure that the browser initiates in order to perform these actions

    (other than GET requests) begins by sending a "preflight" request. This sets

    the `Origin` header and uses the `OPTIONS` method. The server will reply

    back with the methods it allows and some of the limits it imposes. The

    client then sends the actual request if it falls within the allowed

    constraints.


    This process is usually done in the background by the browser, but you can

    use curl to emulate this process using the example provided. The headers

    that will be set to show the constraints are:


    *   **Access-Control-Allow-Origin**: This is the domain that is sent by the
    client or browser as the origin of the request. It is set through an
    `Origin` header.

    *   **Access-Control-Allow-Methods**: This specifies the allowed options for
    requests from that domain. This will generally be all available methods.

    *   **Access-Control-Expose-Headers**: This will contain the headers that
    will be available to requests from the origin domain.

    *   **Access-Control-Max-Age**: This is the length of time that the access
    is considered valid. After this expires, a new preflight should be sent.

    *   **Access-Control-Allow-Credentials**: This will be set to `true`. It
    basically allows you to send your OAuth token for authentication.


    You should not need to be concerned with the details of these headers,

    because the browser will typically do all of the work for you.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  contact:
    name: DigitalOcean API Team
    email: api-engineering@digitalocean.com
  termsOfService: https://www.digitalocean.com/legal/terms-of-service-agreement/
servers:
  - url: https://api.digitalocean.com
    description: production
tags:
  - name: 1-Click Applications
    description: >-
      1-Click applications are pre-built Droplet images or Kubernetes apps with
      software,

      features, and configuration details already set up for you. They can be
      found in the

      [DigitalOcean Marketplace](https://www.digitalocean.com/docs/marketplace).
  - name: Account
    description: Provides information about your current account.
  - name: Actions
    description: >-
      Actions are records of events that have occurred on the resources in your
      account.

      These can be things like rebooting a Droplet, or transferring an image to
      a new region.


      An action object is created every time one of these actions is initiated.
      The action

      object contains information about the current status of the action, start
      and complete

      timestamps, and the associated resource type and ID.


      Every action that creates an action object is available through this
      endpoint. Completed

      actions are not removed from this list and are always available for
      querying.


      **Note:** You can pass the following HTTP header with the request to have
      the API return

      the `reserved_ips` stanza instead of the `floating_ips` stanza:


      - `Accept: application/vnd.digitalocean.reserveip+json`
  - name: Apps
    description: >-
      App Platform is a Platform-as-a-Service (PaaS) offering from DigitalOcean
      that allows

      developers to publish code directly to DigitalOcean servers without
      worrying about the

      underlying infrastructure.


      Most API operations are centered around a few core object types. Following
      are the

      definitions of these types. These definitions will be omitted from the
      operation-specific

      documentation.


      For documentation on app specifications (`AppSpec` objects), please refer
      to the

      [product
      documentation](https://docs.digitalocean.com/products/app-platform/reference/app-spec/)).
  - name: Billing
    description: >-
      The billing endpoints allow you to retrieve your account balance, invoices

      and billing history.


      **Balance:** By sending requests to the `/v2/customers/my/balance`
      endpoint, you can

      retrieve the balance information for the requested customer account.


      **Invoices:**
      [Invoices](https://www.digitalocean.com/docs/accounts/billing/invoices/)

      are generated on the first of each month for every DigitalOcean

      customer. An invoice preview is generated daily, which can be accessed

      with the `preview` keyword in place of `$INVOICE_UUID`. To interact with

      invoices, you will generally send requests to the invoices endpoint at

      `/v2/customers/my/invoices`.


      **Billing History:** Billing history is a record of billing events for
      your account.

      For example, entries may include events like payments made, invoices

      issued, or credits granted. To interact with invoices, you

      will generally send requests to the invoices endpoint at

      `/v2/customers/my/billing_history`.
  - name: Block Storage
    description: >-
      [DigitalOcean Block Storage
      Volumes](https://www.digitalocean.com/docs/volumes/)

      provide expanded storage capacity for your Droplets and can be moved

      between Droplets within a specific region.


      Volumes function as raw block devices, meaning they appear to the

      operating system as locally attached storage which can be formatted using

      any file system supported by the OS. They may be created in sizes from

      1GiB to 16TiB.


      By sending requests to the `/v2/volumes` endpoint, you can list, create,
      or

      delete volumes as well as attach and detach them from Droplets
  - name: Block Storage Actions
    description: |-
      Block storage actions are commands that can be given to a DigitalOcean
      Block Storage Volume. An example would be detaching or attaching a volume
      from a Droplet. These requests are made on the
      `/v2/volumes/$VOLUME_ID/actions` endpoint.

      An action object is returned. These objects hold the current status of the
      requested action.
  - name: CDN Endpoints
    description: |-
      Content hosted in DigitalOcean's object storage solution,
      [Spaces](https://www.digitalocean.com/docs/spaces/overview/),
      can optionally be served by our globally distributed Content Delivery
      Network (CDN). By sending requests to `/v2/cdn/endpoints`, you can list,
      create, or delete CDN Endpoints as well as purge cached content. To use a
      custom subdomain to access the CDN Endpoint, provide the ID of a
      DigitalOcean managed TLS certificate and the fully qualified domain name
      for the custom subdomain.
  - name: Certificates
    description: >-
      In order to perform SSL termination on load balancers, DigitalOcean offers

      two types of [SSL certificate
      management](https://www.digitalocean.com/docs/accounts/security/#certificates):


      * **Custom**: User-generated certificates may be uploaded to DigitalOcean

      where they will be placed in a fully encrypted and isolated storage
      system.


      * **Let's Encrypt**: Certificates may be automatically generated by

      DigitalOcean utilizing an integration with Let's Encrypt, the free and

      open certificate authority. These certificates will also be automatically

      renewed as required.
  - name: Container Registry
    description: >-
      DigitalOcean offers the ability for you to create a

      [private container
      registry](https://www.digitalocean.com/docs/images/container-registry/quickstart/)

      to store your Docker images for use with your Kubernetes clusters. This

      container registry runs inside the same datacenters as your cluster,

      ensuring reliable and performant rollout of image deployments.


      You can only create one registry per DigitalOcean account, but you can use

      that registry to create as many repositories as you wish.
  - name: Databases
    description: >-
      DigitalOcean's [managed database
      service](https://www.digitalocean.com/docs/databases)

      simplifies the creation and management of highly available database
      clusters. Currently, it

      offers support for
      [PostgreSQL](http://www.digitalocean.com/docs/databases/postgresql/),

      [Redis](https://www.digitalocean.com/docs/databases/redis/),

      [MySQL](https://www.digitalocean.com/docs/databases/mysql/), 

      [MongoDB](https://www.digitalocean.com/docs/databases/mongodb/), and

      [OpenSearch](https://docs.digitalocean.com/products/databases/opensearch/).


      By sending requests to the `/v2/databases` endpoint, you can list, create,
      or delete

      database clusters as well as scale the size of a cluster, add or remove
      read-only replicas,

      and manage other configuration details.


      Database clusters may be deployed in a multi-node, high-availability
      configuration.

      If your machine type is above the basic nodes, your node plan is above the
      smallest option,

      or you are running MongoDB, you may additionally include up to two standby
      nodes in your cluster.


      The size of individual nodes in a database cluster is represented by a
      human-readable slug,

      which is used in some of the following requests. Each slug denotes the
      node's identifier,

      CPU count, and amount of RAM, in that order.


      For a list of currently available database slugs and options, use the
      `/v2/databases/options` endpoint or use the 

      `doctl databases options`
      [command](https://docs.digitalocean.com/reference/doctl/reference/databases/options).
  - name: Domain Records
    description: >-
      Domain record resources are used to set or retrieve information about the

      individual DNS records configured for a domain. This allows you to build

      and manage DNS zone files by adding and modifying individual records for a

      domain.


      The [DigitalOcean DNS management
      interface](https://www.digitalocean.com/docs/networking/dns/)

      allows you to configure the following DNS records:


      Name  |
      Description                                                                                                                                       
      |

      ------|----------------------------------------------------------------------------------------------------------------------------------------------------|

      A     | This record type is used to map an IPv4 address to a
      hostname.                                                                                    
      |

      AAAA  | This record type is used to map an IPv6 address to a
      hostname.                                                                                    
      |

      CAA   | As specified in RFC-6844, this record type can be used to restrict
      which certificate authorities are permitted to issue certificates for a
      domain. |

      CNAME | This record type defines an alias for your canonical hostname (the
      one defined by an A or AAAA
      record).                                            |

      MX    | This record type is used to define the mail exchanges used for the
      domain.                                                                        
      |

      NS    | This record type defines the name servers that are used for this
      zone.                                                                            
      |

      TXT   | This record type is used to associate a string of text with a
      hostname, primarily used for
      verification.                                           |

      SRV   | This record type specifies the location (hostname and port number)
      of servers for specific
      services.                                               |

      SOA   | This record type defines administrative information about the
      zone. Can only have ttl changed, cannot be
      deleted                                   |
  - name: Domains
    description: >-
      Domain resources are domain names that you have purchased from a domain

      name registrar that you are managing through the

      [DigitalOcean DNS
      interface](https://www.digitalocean.com/docs/networking/dns/).


      This resource establishes top-level control over each domain. Actions that

      affect individual domain records should be taken on the

      [Domain Records](#tag/Domain-Records) resource.
  - name: Droplet Actions
    description: |-
      Droplet actions are tasks that can be executed on a Droplet. These can be
      things like rebooting, resizing, snapshotting, etc.

      Droplet action requests are generally targeted at one of the "actions"
      endpoints for a specific Droplet. The specific actions are usually
      initiated by sending a POST request with the action and arguments as
      parameters.

      Droplet action requests create a Droplet actions object, which can be used
      to get information about the status of an action. Creating a Droplet
      action is asynchronous: the HTTP call will return the action object before
      the action has finished processing on the Droplet. The current status of
      an action can be retrieved from either the Droplet actions endpoint or the
      global actions endpoint. If a Droplet action is uncompleted it may block
      the creation of a subsequent action for that Droplet, the locked attribute
      of the Droplet will be true and attempts to create a Droplet action will
      fail with a status of 422.
  - name: Droplets
    description: |-
      A [Droplet](https://www.digitalocean.com/docs/droplets/) is a DigitalOcean
      virtual machine. By sending requests to the Droplet endpoint, you can
      list, create, or delete Droplets.

      Some of the attributes will have an object value. The `region` and `image`
      objects will all contain the standard attributes of their associated
      types. Find more information about each of these objects in their
      respective sections.
  - name: Firewalls
    description: >-
      [DigitalOcean Cloud
      Firewalls](https://www.digitalocean.com/docs/networking/firewalls/)

      provide the ability to restrict network access to and from a Droplet

      allowing you to define which ports will accept inbound or outbound

      connections. By sending requests to the `/v2/firewalls` endpoint, you can

      list, create, or delete firewalls as well as modify access rules.
  - name: Floating IP Actions
    description: >-
      As of 16 June 2022, we have renamed the Floating IP product to [Reserved
      IPs](https://docs.digitalocean.com/reference/api/api-reference/#tag/Reserved-IPs).

      The Reserved IP product's endpoints function the exact same way as
      Floating IPs.

      The only difference is the name change throughout the URLs and fields.

      For example, the `floating_ips` field is now the `reserved_ips` field.

      The Floating IP endpoints will remain active until fall 2023 before being

      permanently deprecated.


      With the exception of the [Projects
      API](https://docs.digitalocean.com/reference/api/api-reference/#tag/Projects),

      we will reflect this change as an additional field in the responses across
      the API

      where the `floating_ip` field is used. For example, the Droplet metadata
      response

      will contain the field `reserved_ips` in addition to the `floating_ips`
      field.

      Floating IPs retrieved using the Projects API will retain the original
      name.


      Floating IP actions are commands that can be given to a DigitalOcean

      floating IP. These requests are made on the actions endpoint of a specific

      floating IP.


      An action object is returned. These objects hold the current status of the

      requested action.
  - name: Floating IPs
    description: >-
      As of 16 June 2022, we have renamed the Floating IP product to [Reserved
      IPs](https://docs.digitalocean.com/reference/api/api-reference/#tag/Reserved-IPs).

      The Reserved IP product's endpoints function the exact same way as
      Floating IPs.

      The only difference is the name change throughout the URLs and fields.

      For example, the `floating_ips` field is now the `reserved_ips` field.

      The Floating IP endpoints will remain active until fall 2023 before being

      permanently deprecated.


      With the exception of the [Projects
      API](https://docs.digitalocean.com/reference/api/api-reference/#tag/Projects),

      we will reflect this change as an additional field in the responses across
      the API

      where the `floating_ip` field is used. For example, the Droplet metadata
      response

      will contain the field `reserved_ips` in addition to the `floating_ips`
      field.

      Floating IPs retrieved using the Projects API will retain the original
      name.


      [DigitalOcean Floating
      IPs](https://www.digitalocean.com/docs/networking/floating-ips/)

      are publicly-accessible static IP addresses that can be mapped to one of

      your Droplets. They can be used to create highly available setups or other

      configurations requiring movable addresses.


      Floating IPs are bound to a specific region.
  - name: Functions
    description: >-
      [Serverless functions](https://docs.digitalocean.com/products/functions)
      are blocks of code that run on demand without the need to manage any
      infrastructure.

      You can develop functions on your local machine and then deploy them to a
      namespace using `doctl`, the [official DigitalOcean CLI
      tool](https://docs.digitalocean.com/reference/doctl).


      The Serverless Functions API currently only supports creating and managing
      namespaces.
  - name: Image Actions
    description: |-
      Image actions are commands that can be given to a DigitalOcean image. In
      general, these requests are made on the actions endpoint of a specific
      image.

      An image action object is returned. These objects hold the current status
      of the requested action.
  - name: Images
    description: >-
      A DigitalOcean [image](https://www.digitalocean.com/docs/images/) can be

      used to create a Droplet and may come in a number of flavors. Currently,

      there are five types of images: snapshots, backups, applications,

      distributions, and custom images.


      * [Snapshots](https://www.digitalocean.com/docs/images/snapshots/) provide

      a full copy of an existing Droplet instance taken on demand.


      * [Backups](https://www.digitalocean.com/docs/images/backups/) are similar

      to snapshots but are created automatically at regular intervals when

      enabled for a Droplet.


      * [Custom images](https://www.digitalocean.com/docs/images/custom-images/)

      are Linux-based virtual machine images (raw, qcow2, vhdx, vdi, and vmdk

      formats are supported) that you may upload for use on DigitalOcean.


      * Distributions are the public Linux distributions that are available to

      be used as a base to create Droplets.


      * Applications, or [1-Click
      Apps](https://www.digitalocean.com/docs/one-clicks/),

      are distributions pre-configured with additional software.


      To interact with images, you will generally send requests to the images

      endpoint at /v2/images.
  - name: Kubernetes
    description: |-
      [DigitalOcean Kubernetes](https://www.digitalocean.com/docs/kubernetes/)
      allows you to quickly deploy scalable and secure Kubernetes clusters. By
      sending requests to the `/v2/kubernetes/clusters` endpoint, you can list,
      create, or delete clusters as well as scale node pools up and down,
      recycle individual nodes, and retrieve the kubeconfig file for use with
      a cluster.
  - name: Load Balancers
    description: >-
      [DigitalOcean Load
      Balancers](https://www.digitalocean.com/docs/networking/load-balancers/)

      provide a way to distribute traffic across multiple Droplets. By sending

      requests to the `/v2/load_balancers` endpoint, you can list, create, or

      delete load balancers as well as add or remove Droplets, forwarding rules,

      and other configuration details.
  - name: Monitoring
    description: >-
      The DigitalOcean Monitoring API makes it possible to programmatically
      retrieve metrics as well as configure alert

      policies based on these metrics. The Monitoring API can help you gain
      insight into how your apps are performing

      and consuming resources.
  - name: Project Resources
    description: >-
      Project Resources are resources that can be grouped into your projects.

      You can group resources (like Droplets, Spaces, load balancers, domains,

      and floating IPs) in ways that align with the applications you host on

      DigitalOcean.


      ### Supported Resource Types Examples


      Projects resources are identified by uniform resource names or URNs. A

      valid URN has the following format: `do:resource_type:resource_id`. The

      following resource types are supported:


      Resource Type      | Example URN

      -------------------|------------

      App Platform App   | `do:app:be5aab85-851b-4cab-b2ed-98d5a63ba4e8`

      Database           | `do:dbaas:83c7a55f-0d84-4760-9245-aba076ec2fb2`

      Domain             | `do:domain:example.com`

      Droplet            | `do:droplet:4126873`

      Floating IP        | `do:floatingip:192.168.99.100`

      Kubernetes Cluster | `do:kubernetes:bd5f5959-5e1e-4205-a714-a914373942af`

      Load Balancer      |
      `do:loadbalancer:39052d89-8dd4-4d49-8d5a-3c3b6b365b5b`

      Space              | `do:space:my-website-assets`

      Volume             | `do:volume:6fc4c277-ea5c-448a-93cd-dd496cfef71f`


      ### Resource Status Codes


      When assigning and retrieving resources in projects, a `status` attribute

      is returned that indicates if a resource was successfully retrieved or

      assigned. The status codes can be one of the following:


      Status Code        | Explanation

      -------------------|------------

      `ok`               | There was no problem retrieving or assigning a
      resource.

      `not_found`        | The resource was not found.

      `assigned`         | The resource was successfully assigned.

      `already_assigned` | The resource was already assigned.

      `service_down`     | There was a problem retrieving or assigning a
      resource. Please try again.
  - name: Projects
    description: |-
      Projects allow you to organize your resources into groups that fit the way
      you work. You can group resources (like Droplets, Spaces, load balancers,
      domains, and floating IPs) in ways that align with the applications
      you host on DigitalOcean.
  - name: Regions
    description: Provides information about DigitalOcean data center regions.
  - name: Reserved IP Actions
    description: >-
      As of 16 June 2022, we have renamed the [Floating
      IP](https://docs.digitalocean.com/reference/api/api-reference/#tag/Floating-IPs)

      product to Reserved IPs. The Reserved IP product's endpoints function the
      exact

      same way as Floating IPs. The only difference is the name change
      throughout the

      URLs and fields. For example, the `floating_ips` field is now the
      `reserved_ips` field.

      The Floating IP endpoints will remain active until fall 2023 before being

      permanently deprecated.


      With the exception of the [Projects
      API](https://docs.digitalocean.com/reference/api/api-reference/#tag/Projects),

      we will reflect this change as an additional field in the responses across
      the API

      where the `floating_ip` field is used. For example, the Droplet metadata
      response

      will contain the field `reserved_ips` in addition to the `floating_ips`
      field.

      Floating IPs retrieved using the Projects API will retain the original
      name.


      Reserved IP actions are commands that can be given to a DigitalOcean

      reserved IP. These requests are made on the actions endpoint of a specific

      reserved IP.


      An action object is returned. These objects hold the current status of the

      requested action.
  - name: Reserved IPs
    description: >-
      As of 16 June 2022, we have renamed the [Floating
      IP](https://docs.digitalocean.com/reference/api/api-reference/#tag/Floating-IPs)

      product to Reserved IPs. The Reserved IP product's endpoints function the
      exact

      same way as Floating IPs. The only difference is the name change
      throughout the

      URLs and fields. For example, the `floating_ips` field is now the
      `reserved_ips` field.

      The Floating IP endpoints will remain active until fall 2023 before being

      permanently deprecated.


      With the exception of the [Projects
      API](https://docs.digitalocean.com/reference/api/api-reference/#tag/Projects),

      we will reflect this change as an additional field in the responses across
      the API

      where the `floating_ip` field is used. For example, the Droplet metadata
      response

      will contain the field `reserved_ips` in addition to the `floating_ips`
      field.

      Floating IPs retrieved using the Projects API will retain the original
      name.


      DigitalOcean Reserved IPs are publicly-accessible static IP addresses that
      can be

      mapped to one of your Droplets. They can be used to create highly
      available

      setups or other configurations requiring movable addresses.


      Reserved IPs are bound to a specific region.
  - name: Sizes
    description: |-
      The sizes objects represent different packages of hardware resources that
      can be used for Droplets. When a Droplet is created, a size must be
      selected so that the correct resources can be allocated.

      Each size represents a plan that bundles together specific sets of
      resources. This includes the amount of RAM, the number of virtual CPUs,
      disk space, and transfer. The size object also includes the pricing
      details and the regions that the size is available in.
  - name: Snapshots
    description: |-
      [Snapshots](https://www.digitalocean.com/docs/images/snapshots/) are saved
      instances of a Droplet or a block storage volume, which is reflected in
      the `resource_type` attribute. In order to avoid problems with compressing
      filesystems, each defines a `min_disk_size` attribute which is the minimum
      size of the Droplet or volume disk when creating a new resource from the
      saved snapshot.

      To interact with snapshots, you will generally send requests to the
      snapshots endpoint at `/v2/snapshots`.
  - name: SSH Keys
    description: Manage SSH keys available on your account.
  - name: Tags
    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.


      Tags have two attributes: a user defined `name` attribute and an embedded

      `resources` attribute with information about resources that have been
      tagged.
  - name: Uptime
    description: >-
      [DigitalOcean Uptime
      Checks](https://docs.digitalocean.com/products/uptime/) provide the
      ability to monitor your endpoints from around the world, and alert you
      when they're slow, unavailable, or SSL certificates are expiring.

      To interact with Uptime, you will generally send requests to the Uptime
      endpoint at `/v2/uptime/`.
  - name: VPCs
    description: >-
      [VPCs (virtual private
      clouds)](https://www.digitalocean.com/docs/networking/vpc/)

      allow you to create virtual networks containing resources that can

      communicate with each other in full isolation using private IP addresses.


      By sending requests to the `/v2/vpcs` endpoint, you can create, configure,

      list, and delete custom VPCs as well as retrieve information about the

      resources assigned to them.
paths:
  /v2/1-clicks:
    get:
      operationId: oneClicks_list
      summary: List 1-Click Applications
      description: >
        To list all available 1-Click applications, send a GET request to
        `/v2/1-clicks`. The `type` may

        be provided as query paramater in order to restrict results to a certain
        type of 1-Click, for

        example: `/v2/1-clicks?type=droplet`. Current supported types are
        `kubernetes` and `droplet`.


        The response will be a JSON object with a key called `1_clicks`. This
        will be set to an array of

        1-Click application data, each of which will contain the the slug and
        type for the 1-Click.
      tags:
        - 1-Click Applications
      parameters:
        - $ref: '#/components/parameters/oneClicks_type'
      responses:
        '200':
          $ref: '#/components/responses/oneClicks_all'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json"  \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/1-clicks"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.getenv("$DIGITALOCEAN_TOKEN"))

            one_click_apps = client.one_clicks.list()
      security:
        - bearer_auth:
            - 1click:read
  /v2/1-clicks/kubernetes:
    post:
      operationId: oneClicks_install_kubernetes
      summary: Install Kubernetes 1-Click Applications
      description: >
        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`.
      tags:
        - 1-Click Applications
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/oneClicks_create'
      responses:
        '200':
          $ref: '#/components/responses/oneClicks_create'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"addon_slugs": ["kube-state-metrics", "loki"], "cluster_uuid": "50a994b6-c303-438f-9495-7e896cfe6b08"}'' \
              "https://api.digitalocean.com/v2/1-clicks/kubernetes"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            install_req = {
                "addon_slugs": ["kube-state-metrics", "loki"],
                "cluster_uuid": "50a994b6-c303-438f-9495-7e896cfe6b08",
            }
            install_resp = client.one_clicks.install_kubernetes(install_req)
      security:
        - bearer_auth:
            - 1click:create
  /v2/account:
    get:
      operationId: account_get
      summary: Get User Information
      description: >-
        To show information about the current user account, send a GET request
        to `/v2/account`.
      tags:
        - Account
      responses:
        '200':
          $ref: '#/components/responses/account'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/account"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.getenv("$DIGITALOCEAN_TOKEN"))

            account_info = client.account.get()
      security:
        - bearer_auth:
            - account:read
  /v2/account/keys:
    get:
      operationId: sshKeys_list
      summary: List All SSH Keys
      description: >-
        To list all of the keys in your account, send a GET request to
        `/v2/account/keys`. The response will be a JSON object with a key set to
        `ssh_keys`. The value of this will be an array of ssh_key objects, each
        of which contains the standard ssh_key attributes.
      tags:
        - SSH Keys
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/sshKeys_all'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/account/keys"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                keys, _, err := client.Keys.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            ssh_keys = client.ssh_keys.all
            ssh_keys.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.ssh_keys.list()
      security:
        - bearer_auth:
            - ssh_key:read
    post:
      operationId: sshKeys_create
      summary: Create a New SSH Key
      description: >-
        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.
      tags:
        - SSH Keys
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/sshKeys'
      responses:
        '201':
          $ref: '#/components/responses/sshKeys_new'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"My SSH Public Key","public_key":"ssh-rsa AEXAMPLEaC1yc2EAAAADAQABAAAAQQDDHr/jh2Jy4yALcK4JyWbVkPRaWmhck3IgCoeOO3z1e2dBowLh64QAM+Qb72pxekALga2oi4GvT+TlWNhzPH4V example"}' \
              "https://api.digitalocean.com/v2/account/keys" 
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.KeyCreateRequest{
                    Name:      "My SSH Public Key",
                    PublicKey: "ssh-rsa AEXAMPLEaC1yc2EAAAADAQABAAAAQQDDHr/jh2Jy4yALcK4JyWbVkPRaWmhck3IgCoeOO3z1e2dBowLh64QAM+Qb72pxekALga2oi4GvT+TlWNhzPH4V example",
                }

                transfer, _, err := client.Keys.Create(ctx, createRequest)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            ssh_key = DropletKit::SSHKey.new(
              name: 'My SSH Public Key',
              public_key: 'ssh-rsa AEXAMPLEaC1yc2EAAAADAQABAAAAQQDDHr/jh2Jy4yALcK4JyWbVkPRaWmhck3IgCoeOO3z1e2dBowLh64QAM+Qb72pxekALga2oi4GvT+TlWNhzPH4V example'
            )
            client.ssh_keys.create(ssh_key)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "public_key": "ssh-rsa AEXAMPLEaC1yc2EAAAADAQABAAAAQQDDHr/jh2Jy4yALcK4JyWbVkPRaWmhck3IgCoeOO3z1e2dBowLh64QAM+Qb72pxekALga2oi4GvT+TlWNhzPH4V example",
              "name": "My SSH Public Key"
            }

            resp = client.ssh_keys.create(body=req)
      security:
        - bearer_auth:
            - ssh_key:create
  /v2/account/keys/{ssh_key_identifier}:
    get:
      operationId: sshKeys_get
      summary: Retrieve an Existing SSH Key
      description: >-
        To get information about a key, send a GET request to
        `/v2/account/keys/$KEY_ID` or `/v2/account/keys/$KEY_FINGERPRINT`.

        The response will be a JSON object with the key `ssh_key` and value an
        ssh_key object which contains the standard ssh_key attributes.
      tags:
        - SSH Keys
      parameters:
        - $ref: '#/components/parameters/ssh_key_identifier'
      responses:
        '200':
          $ref: '#/components/responses/sshKeys_existing'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/account/keys/512190" 
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                key, _, err := client.Keys.GetByID(ctx, 512190)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.ssh_keys.find(id: 512190) 
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.ssh_keys.get(ssh_key_identifier=512190)
      security:
        - bearer_auth:
            - ssh_key:read
    put:
      operationId: sshKeys_update
      summary: Update an SSH Key's Name
      description: >-
        To update the name of an SSH key, send a PUT request to either
        `/v2/account/keys/$SSH_KEY_ID` or
        `/v2/account/keys/$SSH_KEY_FINGERPRINT`. Set the `name` attribute to the
        new name you want to use.
      tags:
        - SSH Keys
      parameters:
        - $ref: '#/components/parameters/ssh_key_identifier'
      requestBody:
        description: Set the `name` attribute to the new name you want to use.
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  $ref: '#/components/schemas/ssh_key_name'
      responses:
        '200':
          $ref: '#/components/responses/sshKeys_existing'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"Renamed SSH Key"}' \
              "https://api.digitalocean.com/v2/account/keys/512190"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                updateRequest := &godo.KeyUpdateRequest{
                    Name:      "Renamed SSH Key",
                }

                key, _, err := client.Keys.UpdateByID(ctx, 512190, updateRequest)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            ssh_key = DropletKit::SSHKey.new(name: 'Renamed SSH Key')
            client.ssh_keys.update(ssh_key, id: 512190)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "My SSH Public Key"
            }

            resp = client.ssh_keys.update(ssh_key_identifier=512190, body=req)
      security:
        - bearer_auth:
            - ssh_key:update
    delete:
      operationId: sshKeys_delete
      summary: Delete an SSH Key
      description: >-
        To destroy a public SSH key that you have in your account, send a DELETE
        request to `/v2/account/keys/$KEY_ID` or
        `/v2/account/keys/$KEY_FINGERPRINT`.

        A 204 status will be returned, indicating that the action was successful
        and that the response body is empty.
      tags:
        - SSH Keys
      parameters:
        - $ref: '#/components/parameters/ssh_key_identifier'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/account/keys/512190" 
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Keys.DeleteByID(ctx, 512190)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.ssh_keys.delete(id: 512190)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.ssh_keys.delete(ssh_key_identifier=512190)
      security:
        - bearer_auth:
            - ssh_key:delete
  /v2/actions:
    get:
      operationId: actions_list
      summary: List All Actions
      description: >-
        This will be the entire list of actions taken on your account, so it
        will be quite large. As with any large collection returned by the API,
        the results will be paginated with only 20 on each page by default.
      tags:
        - Actions
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/actions'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/actions?page=1&per_page=1"
        - lang: Go
          source: |-
            import (
              "context"
                "os"

              "github.com/digitalocean/godo"
              )

            func main() {
              token := os.Getenv("DIGITALOCEAN_TOKEN")

              client := godo.NewFromToken(token)
              ctx := context.TODO()

              opt := &godo.ListOptions{
                  Page:    1,
                  PerPage: 200,
              }
              actions, _, err := client.Actions.List(ctx, opt)
              }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            actions = client.actions.all
            actions.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.getenv("$DIGITALOCEAN_TOKEN"))

            list_resp = client.actions.list()
      security:
        - bearer_auth:
            - actions:read
  /v2/actions/{action_id}:
    get:
      operationId: actions_get
      summary: Retrieve an Existing Action
      description: >-
        To retrieve a specific action object, send a GET request to
        `/v2/actions/$ACTION_ID`.
      tags:
        - Actions
      parameters:
        - $ref: '#/components/parameters/action_id'
      responses:
        '200':
          $ref: '#/components/responses/action'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/actions/36804636"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                action, _, err := client.Actions.Get(ctx, 36804636)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.actions.find(id: 36804636)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.getenv("$DIGITALOCEAN_TOKEN"))

            get_resp = client.actions.get(action_id=36804636)
      security:
        - bearer_auth:
            - actions:read
  /v2/apps:
    get:
      operationId: apps_list
      summary: List All Apps
      description: >-
        List all apps on your account. Information about the current active
        deployment as well as any in progress ones will also be included for
        each app.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/with_projects'
      responses:
        '200':
          $ref: '#/components/responses/list_apps'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.apps.list()
      security:
        - bearer_auth:
            - app:read
    post:
      operationId: apps_create
      summary: Create a New App
      description: >-
        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/).
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/accept'
        - $ref: '#/components/parameters/content-type'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apps_create_app_request'
            example:
              spec:
                name: web-app
                region: nyc
                services:
                  - name: api
                    github:
                      branch: main
                      deploy_on_push: true
                      repo: digitalocean/sample-golang
                    run_command: bin/api
                    environment_slug: node-js
                    instance_count: 2
                    instance_size_slug: apps-s-1vcpu-0.5gb
                    routes:
                      - path: /api
                egress:
                  type: DEDICATED_IP
        required: true
      responses:
        '200':
          $ref: '#/components/responses/new_app'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps"
              -d '{"spec":{"name":"web-app","region":"nyc", \
              "services":[{"name":"api","github":{"branch":"main",\
              "deploy_on_push":true,"repo":"digitalocean/sample-golang"}, \
              "run_command":"bin/api","environment_slug":"node-js", \
              "instance_count":2,"instance_size_slug":"apps-s-1vcpu-0.5gb", \
              "routes":[{"path":"/api"}]}]}}'
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            create_resp = client.apps.create(
                {
                    "spec": {
                        "name": "web-app",
                        "region": "nyc",
                        "services": [
                            {
                                "name": "api",
                                "github": {},
                                "run_command": "bin/api",
                                "environment_slug": "node-js",
                                "instance_count": 2,
                                "instance_size_slug": "apps-s-1vcpu-0.5gb",
                                "routes": [],
                            }
                        ],
                    }
                }
            )
      security:
        - bearer_auth:
            - app:create
  /v2/apps/{id}:
    delete:
      operationId: apps_delete
      summary: Delete an App
      description: >-
        Delete an existing app. Once deleted, all active deployments will be
        permanently shut down and the app deleted. If needed, be sure to back up
        your app specification so that you may re-create it at a later time.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/id_app'
      responses:
        '200':
          $ref: '#/components/responses/delete_app'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{id}"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            delete_resp = client.apps.delete(id="b7d64052")
      security:
        - bearer_auth:
            - app:delete
    get:
      operationId: apps_get
      summary: Retrieve an Existing App
      description: >-
        Retrieve details about an existing app by either its ID or name. To
        retrieve an app by its name, do not include an ID in the request path.
        Information about the current active deployment as well as any in
        progress ones will also be included in the response.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/id_app'
        - $ref: '#/components/parameters/app_name'
      responses:
        '200':
          $ref: '#/components/responses/apps_get'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{id}"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            create_resp = client.apps.get(id="4f6c71e2")
      security:
        - bearer_auth:
            - app:read
    put:
      operationId: apps_update
      summary: Update an App
      description: >-
        Update an existing app by submitting a new 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/).
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/id_app'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apps_update_app_request'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/update_app'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{id}"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))
            req = {
            "spec": {
                "name": "web-app-01",
                "region": "nyc",
                "domains": [
                    {
                        "domain": "app.example.com",
                        "type": "DEFAULT",
                        "wildcard": True,
                        "zone": "example.com",
                        "minimum_tls_version": "1.3",
                    }
                ],
                "services": [],
                "static_sites": [
                    {
                        "cors": {
                            "allow_origins": [
                                {"exact": "https://www.example.com"},
                                {"regex": "^.*example.com"},
                            ],
                            "allow_methods": [
                                "GET",
                                "OPTIONS",
                                "POST",
                                "PUT",
                                "PATCH",
                                "DELETE",
                            ],
                            "allow_headers": ["Content-Type", "X-Custom-Header"],
                            "expose_headers": ["Content-Encoding", "X-Custom-Header"],
                            "max_age": "5h30m",
                            "allow_credentials": False,
                        },
                        "routes": [{"path": "/api", "preserve_path_prefix": True}],
                    }
                ],
                "jobs": [
                    {
                        "name": "api",
                        "gitlab": {
                            "branch": "main",
                            "deploy_on_push": True,
                            "repo": "digitalocean/sample-golang",
                        },
                        "image": {
                            "registry": "registry.hub.docker.com",
                            "registry_type": "DOCR",
                            "repository": "origin/master",
                            "tag": "latest",
                        },
                        "dockerfile_path": "path/to/Dockerfile",
                        "build_command": "npm run build",
                        "run_command": "bin/api",
                        "source_dir": "path/to/dir",
                        "envs": [
                            {
                                "key": "BASE_URL",
                                "scope": "BUILD_TIME",
                                "type": "GENERAL",
                                "value": "http://example.com",
                            }
                        ],
                        "environment_slug": "node-js",
                        "log_destinations": {
                            "name": "my_log_destination",
                            "papertrail": {
                                "endpoint": "https://mypapertrailendpoint.com"
                            },
                            "datadog": {
                                "endpoint": "https://mydatadogendpoint.com",
                                "api_key": "abcdefghijklmnopqrstuvwxyz0123456789",
                            },
                            "logtail": {
                                "token": "abcdefghijklmnopqrstuvwxyz0123456789"
                            },
                           "open_search": {
                                "endpoint": "https://myopensearchendpoint.com:9300"
                                "index_name": "logs"
                                "basic_auth": {
                                    "user": "doadmin",
                                    "password": "password"
                                }
                            },
                        },
                        "instance_count": 2,
                        "instance_size_slug": "apps-s-1vcpu-0.5gb",
                        "kind": "PRE_DEPLOY",
                    }
                ],
                "workers": [
                    {
                        "name": "api",
                        "gitlab": {
                            "branch": "main",
                            "deploy_on_push": True,
                            "repo": "digitalocean/sample-golang",
                        },
                        "image": {
                            "registry": "registry.hub.docker.com",
                            "registry_type": "DOCR",
                            "repository": "origin/master",
                            "tag": "latest",
                        },
                        "dockerfile_path": "path/to/Dockerfile",
                        "build_command": "npm run build",
                        "run_command": "bin/api",
                        "source_dir": "path/to/dir",
                        "envs": [
                            {
                                "key": "BASE_URL",
                                "scope": "BUILD_TIME",
                                "type": "GENERAL",
                                "value": "http://example.com",
                            }
                        ],
                        "environment_slug": "node-js",
                        "log_destinations": {
                            "name": "my_log_destination",
                            "papertrail": {
                                "endpoint": "https://mypapertrailendpoint.com"
                            },
                            "datadog": {
                                "endpoint": "https://mydatadogendpoint.com",
                                "api_key": "abcdefghijklmnopqrstuvwxyz0123456789",
                            },
                            "logtail": {
                                "token": "abcdefghijklmnopqrstuvwxyz0123456789"
                            },
                           "open_search": {
                                "endpoint": "https://myopensearchendpoint.com:9300"
                                "index_name": "logs"
                                "basic_auth": {
                                    "user": "doadmin",
                                    "password": "password"
                                }
                            },
                        },
                        "instance_count": 2,
                        "instance_size_slug": "apps-s-1vcpu-0.5gb",
                    }
                ],
                "functions": [
                    {
                        "cors": {
                            "allow_origins": [
                                {"exact": "https://www.example.com"},
                                {"regex": "^.*example.com"},
                            ],
                            "allow_methods": [
                                "GET",
                                "OPTIONS",
                                "POST",
                                "PUT",
                                "PATCH",
                                "DELETE",
                            ],
                            "allow_headers": ["Content-Type", "X-Custom-Header"],
                            "expose_headers": ["Content-Encoding", "X-Custom-Header"],
                            "max_age": "5h30m",
                            "allow_credentials": False,
                        },
                        "routes": [{"path": "/api", "preserve_path_prefix": True}],
                        "name": "api",
                        "source_dir": "path/to/dir",
                        "alerts": [
                            {
                                "rule": "CPU_UTILIZATION",
                                "disabled": False,
                                "operator": "GREATER_THAN",
                                "value": 2.32,
                                "window": "FIVE_MINUTES",
                            }
                        ],
                        "envs": [
                            {
                                "key": "BASE_URL",
                                "scope": "BUILD_TIME",
                                "type": "GENERAL",
                                "value": "http://example.com",
                            }
                        ],
                        "gitlab": {
                            "branch": "main",
                            "deploy_on_push": True,
                            "repo": "digitalocean/sample-golang",
                        },
                        "log_destinations": {
                            "name": "my_log_destination",
                            "papertrail": {
                                "endpoint": "https://mypapertrailendpoint.com"
                            },
                            "datadog": {
                                "endpoint": "https://mydatadogendpoint.com",
                                "api_key": "abcdefghijklmnopqrstuvwxyz0123456789",
                            },
                            "logtail": {
                                "token": "abcdefghijklmnopqrstuvwxyz0123456789"
                            },
                           "open_search": {
                                "endpoint": "https://myopensearchendpoint.com:9300"
                                "index_name": "logs"
                                "basic_auth": {
                                    "user": "doadmin",
                                    "password": "password"
                                }
                            },
                        },
                    }
                ],
                "databases": [
                    {
                        "cluster_name": "cluster_name",
                        "db_name": "my_db",
                        "db_user": "superuser",
                        "engine": "PG",
                        "name": "prod-db",
                        "production": True,
                        "version": "12",
                    }
                ],
            }
            }
            update_resp = client.apps.update(id="bb245ba", body=req)
      security:
        - bearer_auth:
            - app:update
  /v2/apps/{app_id}/components/{component_name}/logs:
    get:
      operationId: apps_get_logs_active_deployment
      summary: Retrieve Active Deployment Logs
      description: >-
        Retrieve the logs of the active deployment if one exists. The response
        will include links to either real-time logs of an in-progress or active
        deployment or archived logs of a past deployment. Note log_type=BUILD
        logs will return logs associated with the current active deployment
        (being served). To view build logs associated with in-progress build,
        the query must explicitly reference the deployment id.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
        - $ref: '#/components/parameters/component'
        - $ref: '#/components/parameters/live_updates'
        - $ref: '#/components/parameters/log_type'
        - $ref: '#/components/parameters/time_wait'
      responses:
        '200':
          $ref: '#/components/responses/list_logs'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{app_id}/components/{component_name}/logs"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp = client.apps.get_logs_active_deployment(app_id="a6adf840",
            component_name="component")
      security:
        - bearer_auth:
            - app:read
  /v2/apps/{app_id}/deployments:
    get:
      operationId: apps_list_deployments
      summary: List App Deployments
      description: List all deployments of an app.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
      responses:
        '200':
          $ref: '#/components/responses/existing_deployments'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{app_id}/deployments"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.apps.list_deployments(app_id="4f6c71e2")
      security:
        - bearer_auth:
            - app:read
    post:
      operationId: apps_create_deployment
      summary: Create an App Deployment
      description: >-
        Creating an app deployment will pull the latest changes from your
        repository and schedule a new deployment for your app.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apps_create_deployment_request'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/new_app_deployment'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{app_id}/deployments"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            create_resp = client.apps.create_deployment(app_id="b6bdf840",
            body={"force_build": True})
      security:
        - bearer_auth:
            - app:create
  /v2/apps/{app_id}/deployments/{deployment_id}:
    get:
      operationId: apps_get_deployment
      summary: Retrieve an App Deployment
      description: Retrieve information about an app deployment.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
        - $ref: '#/components/parameters/deployment_id'
      responses:
        '200':
          $ref: '#/components/responses/list_deployment'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{app_id}/deployments/{deployment_id}"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp = client.apps.get_deployment(app_id="a6adf840",
            deployment_id="b6bdf840")
      security:
        - bearer_auth:
            - app:read
  /v2/apps/{app_id}/deployments/{deployment_id}/cancel:
    post:
      operationId: apps_cancel_deployment
      summary: Cancel a Deployment
      description: Immediately cancel an in-progress deployment.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
        - $ref: '#/components/parameters/deployment_id'
      responses:
        '200':
          $ref: '#/components/responses/cancel_deployment'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{app_id}/deployments/{deployment_id}/cancel"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            cancel_resp = client.apps.cancel_deployment("12345", "24556")
      security:
        - bearer_auth:
            - app:update
  /v2/apps/{app_id}/deployments/{deployment_id}/components/{component_name}/logs:
    get:
      operationId: apps_get_logs
      summary: Retrieve Deployment Logs
      description: >-
        Retrieve the logs of a past, in-progress, or active deployment. The
        response will include links to either real-time logs of an in-progress
        or active deployment or archived logs of a past deployment.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
        - $ref: '#/components/parameters/deployment_id'
        - $ref: '#/components/parameters/component'
        - $ref: '#/components/parameters/live_updates'
        - $ref: '#/components/parameters/log_type'
        - $ref: '#/components/parameters/time_wait'
      responses:
        '200':
          $ref: '#/components/responses/list_logs'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{app_id}/deployments/{deployment_id}/components/{component_name}/logs"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp = client.apps.get_logs(app_id="4f6c71e2",
            deployment_id="3aa4d20e", component_name="component")
      security:
        - bearer_auth:
            - app:read
  /v2/apps/{app_id}/deployments/{deployment_id}/logs:
    get:
      operationId: apps_get_logs_aggregate
      summary: Retrieve Aggregate Deployment Logs
      description: >-
        Retrieve the logs of a past, in-progress, or active deployment. If a
        component name is specified, the logs will be limited to only that
        component. The response will include links to either real-time logs of
        an in-progress or active deployment or archived logs of a past
        deployment.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
        - $ref: '#/components/parameters/deployment_id'
        - $ref: '#/components/parameters/live_updates'
        - $ref: '#/components/parameters/log_type'
        - $ref: '#/components/parameters/time_wait'
      responses:
        '200':
          $ref: '#/components/responses/list_logs'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{app_id}/deployments/{deployment_id}/logs"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp = client.apps.get_logs_aggregate(app_id="b6bdf840",
            deployment_id="a6adf840")
      security:
        - bearer_auth:
            - app:read
  /v2/apps/{app_id}/logs:
    get:
      operationId: apps_get_logs_active_deployment_aggregate
      summary: Retrieve Active Deployment Aggregate Logs
      description: >-
        Retrieve the logs of the active deployment if one exists. The response
        will include links to either real-time logs of an in-progress or active
        deployment or archived logs of a past deployment. Note log_type=BUILD
        logs will return logs associated with the current active deployment
        (being served). To view build logs associated with in-progress build,
        the query must explicitly reference the deployment id.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
        - $ref: '#/components/parameters/live_updates'
        - $ref: '#/components/parameters/log_type'
        - $ref: '#/components/parameters/time_wait'
      responses:
        '200':
          $ref: '#/components/responses/list_logs'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{app_id}/logs"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.apps.get_logs_active_deployment_aggregate(app_id="a6adf840")
      security:
        - bearer_auth:
            - app:read
  /v2/apps/tiers/instance_sizes:
    get:
      operationId: apps_list_instanceSizes
      summary: List Instance Sizes
      description: List all instance sizes for `service`, `worker`, and `job` components.
      tags:
        - Apps
      responses:
        '200':
          $ref: '#/components/responses/list_instance'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/tiers/instance_sizes"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.apps.list_instance_sizes()
      security:
        - bearer_auth:
            - app:read
  /v2/apps/tiers/instance_sizes/{slug}:
    get:
      operationId: apps_get_instanceSize
      summary: Retrieve an Instance Size
      description: >-
        Retrieve information about a specific instance size for `service`,
        `worker`, and `job` components.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/slug_size'
      responses:
        '200':
          $ref: '#/components/responses/get_instance'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/tiers/instance_sizes/{slug}"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.apps.get_instance_size(slug="apps-s-1vcpu-0.5gb")
      security:
        - bearer_auth:
            - app:read
  /v2/apps/regions:
    get:
      operationId: apps_list_regions
      summary: List App Regions
      description: List all regions supported by App Platform.
      tags:
        - Apps
      responses:
        '200':
          $ref: '#/components/responses/list_regions'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/regions"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.apps.list_regions()
      security:
        - bearer_auth:
            - app:read
  /v2/apps/propose:
    post:
      operationId: apps_validate_appSpec
      summary: Propose an App Spec
      description: >-
        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.
      tags:
        - Apps
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/app_propose'
            example:
              spec:
                name: web-app
                region: nyc
                services:
                  - name: api
                    github:
                      branch: main
                      deploy_on_push: true
                      repo: digitalocean/sample-golang
                    run_command: bin/api
                    environment_slug: node-js
                    instance_count: 2
                    instance_size_slug: apps-s-1vcpu-0.5gb
                    routes:
                      - path: /api
              app_id: b6bdf840-2854-4f87-a36c-5f231c617c84
        required: true
      responses:
        '200':
          $ref: '#/components/responses/propose_app'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      security:
        - bearer_auth:
            - app:read
  /v2/apps/{app_id}/alerts:
    get:
      operationId: apps_list_alerts
      summary: List all app alerts
      description: >-
        List alerts associated to the app and any components. This includes
        configuration information about the alerts including emails, slack
        webhooks, and triggering events or conditions.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
      responses:
        '200':
          $ref: '#/components/responses/list_alerts'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{app_id}/alerts"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.apps.list_alerts(app_id="4f6c71e2")
      security:
        - bearer_auth:
            - app:read
  /v2/apps/{app_id}/alerts/{alert_id}/destinations:
    post:
      operationId: apps_assign_alertDestinations
      summary: Update destinations for alerts
      description: >-
        Updates the emails and slack webhook destinations for app alerts. Emails
        must be associated to a user with access to the app.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
        - $ref: '#/components/parameters/alert_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apps_assign_app_alert_destinations_request'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/assign_alert_destinations'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{id}/alerts/{alert_id}/destinations"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
                "emails": ["sammy@digitalocean.com"],
                "slack_webhooks": [
                    {
                        "url": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX",
                        "channel": "Channel Name",
                    }
                ],
            }


            post_resp = client.apps.assign_alert_destinations("12345", "24556",
            req)
      security:
        - bearer_auth:
            - app:update
  /v2/apps/{app_id}/rollback:
    post:
      operationId: apps_create_rollback
      summary: Rollback App
      description: >
        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.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apps_rollback_app_request'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/new_app_deployment'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{ "deployment_id": "3aa4d20e-5527-4c00-b496-601fbd22520a" }' \
              "https://api.digitalocean.com/v2/apps/{app_id}/rollback"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            create_resp = client.apps.create_rollback(app_id="b6bdf840")
      security:
        - bearer_auth:
            - app:update
  /v2/apps/{app_id}/rollback/validate:
    post:
      operationId: apps_validate_rollback
      summary: Validate App Rollback
      description: >
        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.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apps_rollback_app_request'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/apps_validate_rollback'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{ "deployment_id": "3aa4d20e-5527-4c00-b496-601fbd22520a" }' \
              "https://api.digitalocean.com/v2/apps/{app_id}/rollback/validate"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            validate_req = {"deployment_id": "2", "skip_pin": False}

            validate_resp = client.apps.validate_rollback("1", validate_req)
      security:
        - bearer_auth:
            - app:update
  /v2/apps/{app_id}/rollback/commit:
    post:
      operationId: apps_commit_rollback
      summary: Commit App Rollback
      description: >
        Commit an app rollback. This action permanently applies the rollback and
        unpins the app to resume new deployments.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
      responses:
        '200':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{app_id}/rollback/commit"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            commit_resp = client.apps.commit_rollback("1")
      security:
        - bearer_auth:
            - app:update
  /v2/apps/{app_id}/rollback/revert:
    post:
      operationId: apps_revert_rollback
      summary: Revert App Rollback
      description: >
        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.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
      responses:
        '200':
          $ref: '#/components/responses/new_app_deployment'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{app_id}/rollback/revert"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            revert_resp = client.apps.revert_rollback("1")
      security:
        - bearer_auth:
            - app:update
  /v2/apps/{app_id}/metrics/bandwidth_daily:
    get:
      operationId: apps_get_metrics_bandwidth_daily
      summary: Retrieve App Daily Bandwidth Metrics
      description: Retrieve daily bandwidth usage metrics for a single app.
      tags:
        - Apps
      parameters:
        - $ref: '#/components/parameters/app_id'
        - name: date
          description: >-
            Optional day to query. Only the date component of the timestamp will
            be considered. Default: yesterday.
          in: query
          schema:
            type: string
            format: date-time
          example: '2023-01-17T00:00:00Z'
      responses:
        '200':
          $ref: '#/components/responses/get_metrics_bandwidth_usage'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/{id}/metrics/bandwidth_daily"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.apps.get_metrics_bandwidth_daily(app_id="4f6c71e2")
      security:
        - bearer_auth:
            - app:read
  /v2/apps/metrics/bandwidth_daily:
    post:
      operationId: apps_list_metrics_bandwidth_daily
      summary: Retrieve Multiple Apps' Daily Bandwidth Metrics
      description: Retrieve daily bandwidth usage metrics for multiple apps.
      tags:
        - Apps
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/app_metrics_bandwidth_usage_request'
            example:
              app_ids:
                - 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
                - c2a93513-8d9b-4223-9d61-5e7272c81cf5
              date: '2023-01-17T00:00:00Z'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/list_metrics_bandwidth_usage'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/apps/metrics/bandwidth_daily" \
              -d '{ "app_ids": ["4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf"] }'
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
                "app_ids": [
                    "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf",
                    "c2a93513-8d9b-4223-9d61-5e7272c81cf5",
                ],
                "date": "2023-01-17T00:00:00Z",
            }

            get_resp = client.apps.list_metrics_bandwidth_daily(body=req)
      security:
        - bearer_auth:
            - app:read
  /v2/cdn/endpoints:
    get:
      operationId: cdn_list_endpoints
      summary: List All CDN Endpoints
      description: >-
        To list all of the CDN endpoints available on your account, send a GET
        request to `/v2/cdn/endpoints`.
      tags:
        - CDN Endpoints
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_cdn_endpoints'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/cdn/endpoints"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                cdns, _, err := client.CDNs.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            cdns = client.cdns.all
            cdns.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.cdn.list_endpoints()
      security:
        - bearer_auth:
            - cdn:read
    post:
      operationId: cdn_create_endpoint
      summary: Create a New CDN Endpoint
      description: >
        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.
      tags:
        - CDN Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/cdn_endpoint'
            examples:
              CDN Endpoint:
                value:
                  origin: static-images.nyc3.digitaloceanspaces.com
                  ttl: 3600
              CDN Endpoint With Custom Domain:
                value:
                  origin: static-images.nyc3.digitaloceanspaces.com
                  certificate_id: 892071a0-bb95-49bc-8021-3afd67a210bf
                  custom_domain: static.example.com
                  ttl: 3600
      responses:
        '201':
          $ref: '#/components/responses/existing_endpoint'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"origin": "static-images.nyc3.digitaloceanspaces.com","certificate_id": "892071a0-bb95-49bc-8021-3afd67a210bf","custom_domain": "static.example.com","ttl": 3600}' \
              "https://api.digitalocean.com/v2/cdn/endpoints"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.CDNCreateRequest{
                    Origin:        "static-images.nyc3.digitaloceanspaces.com",
                    TTL:           3600,
                    CustomDomain:  "static.example.com",
                    CertificateID: "892071a0-bb95-49bc-8021-3afd67a210b",
                }

                cdn, _, err := client.CDNs.Create(ctx, createRequest)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            cdn = DropletKit::CDN.new(
              origin: 'static-images.nyc3.digitaloceanspaces.com',
              custom_domain: 'static.example.com',
              certificate_id: '892071a0-bb95-49bc-8021-3afd67a210bf',
              ttl: 3600
            )

            client.cdns.create(cdn)
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            create_req = {"origin": "static-images.nyc3.digitaloceanspaces.com",
            "ttl": 3600}

            create_resp = client.cdn.create_endpoint(create_req)
      security:
        - bearer_auth:
            - cdn:create
  /v2/cdn/endpoints/{cdn_id}:
    get:
      operationId: cdn_get_endpoint
      summary: Retrieve an Existing CDN Endpoint
      description: >-
        To show information about an existing CDN endpoint, send a GET request
        to `/v2/cdn/endpoints/$ENDPOINT_ID`.
      tags:
        - CDN Endpoints
      parameters:
        - $ref: '#/components/parameters/cdn_endpoint_id'
      responses:
        '200':
          $ref: '#/components/responses/existing_endpoint'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/cdn/endpoints/19f06b6a-3ace-4315-b086-499a0e521b76"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                cdn, _, err := client.CDNs.Get(ctx, "19f06b6a-3ace-4315-b086-499a0e521b76")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.cdns.find(id: '19f06b6a-3ace-4315-b086-499a0e521b76')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.cdn.get_endpoint(cdn_id="aa34ba1")
      security:
        - bearer_auth:
            - cdn:read
    put:
      operationId: cdn_update_endpoints
      summary: Update a CDN Endpoint
      description: >
        To update the TTL, certificate ID, or the FQDN of the custom subdomain
        for

        an existing CDN endpoint, send a PUT request to

        `/v2/cdn/endpoints/$ENDPOINT_ID`.
      tags:
        - CDN Endpoints
      parameters:
        - $ref: '#/components/parameters/cdn_endpoint_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_endpoint'
      responses:
        '200':
          $ref: '#/components/responses/existing_endpoint'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X PUT \

            -H "Content-Type: application/json" \

            -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \

            -d '{"ttl": 1800}' \

            "https://api.digitalocean.com/v2/cdn/endpoints/19f06b6a-3ace-4315-b086-499a0e521b76" 
        - lang: Go
          source: |-
            import (
                "context"
                "github.com/digitalocean/godo"
            )

            func main() {
                pat := "mytoken"

                client := godo.NewFromToken(pat)
                ctx := context.TODO()

                updateRequest := &godo.CDNUpdateTTLRequest{TTL: 1800}
                cdn, _, err := client.CDNs.UpdateTTL(ctx, "19f06b6a-3ace-4315-b086-499a0e521b76", updateRequest)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token =
            '16f79fc8cd5adcfe528a0994311fa63cc877737b385b6ff7d12ed6684ba4fef5'

            client = DropletKit::Client.new(access_token: token)


            client.cdns.update_ttl(id: '19f06b6a-3ace-4315-b086-499a0e521b76',
            ttl: 1800)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            update_req = {
                "ttl": 3600,
                "certificate_id": "892071a0-bb95-49bc-8021-3afd67a210bf",
                "custom_domain": "static.example.com",
            }

            update_resp = client.cdn.update_endpoints("19f06b6a", update_req)
      security:
        - bearer_auth:
            - cdn:update
    delete:
      operationId: cdn_delete_endpoint
      summary: Delete a CDN Endpoint
      description: >
        To delete a specific CDN endpoint, send a DELETE request to

        `/v2/cdn/endpoints/$ENDPOINT_ID`.


        A status of 204 will be given. This indicates that the request was
        processed

        successfully, but that no response body is needed.
      tags:
        - CDN Endpoints
      parameters:
        - $ref: '#/components/parameters/cdn_endpoint_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/cdn/endpoints/19f06b6a-3ace-4315-b086-499a0e521b76"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.CDNs.Delete(ctx, "19f06b6a-3ace-4315-b086-499a0e521b76")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.cdns.delete(id: '19f06b6a-3ace-4315-b086-499a0e521b76')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            delete_resp = client.cdn.delete_endpoint(cdn_id="bba23af")
      security:
        - bearer_auth:
            - cdn:delete
  /v2/cdn/endpoints/{cdn_id}/cache:
    delete:
      operationId: cdn_purge_cache
      summary: Purge the Cache for an Existing CDN Endpoint
      description: >
        To purge cached content from a CDN endpoint, send a DELETE request to

        `/v2/cdn/endpoints/$ENDPOINT_ID/cache`. The body of the request should
        include

        a `files` attribute containing a list of cached file paths to be purged.
        A

        path may be for a single file or may contain a wildcard (`*`) to
        recursively

        purge all files under a directory. When only a wildcard is provided, all

        cached files will be purged. There is a rate limit of 50 files per 20
        seconds 

        that can be purged.
      tags:
        - CDN Endpoints
      parameters:
        - $ref: '#/components/parameters/cdn_endpoint_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/purge_cache'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"files": ["assets/img/hero.png","assets/css/*"]}' \
              "https://api.digitalocean.com/v2/cdn/endpoints/19f06b6a-3ace-4315-b086-499a0e521b76/cache"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                flushRequest := &godo.CDNFlushCacheRequest{
                    Files: []string{"assets/img/hero.png","assets/css/*"},
                }

                _, err := client.CDNs.FlushCache(ctx, "19f06b6a-3ace-4315-b086-499a0e521b76", flushRequest)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.cdns.flush_cache(
              id: '19f06b6a-3ace-4315-b086-499a0e521b76',
              files: ['assets/img/hero.png','assets/css/*']
            )
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            purge_req = {"files": ["path/to/image.png", "path/to/css/*"]}

            purge_resp = client.cdn.purge_cache("19f06b6a", purge_req)
      security:
        - bearer_auth:
            - cdn:delete
  /v2/certificates:
    get:
      operationId: certificates_list
      summary: List All Certificates
      description: >-
        To list all of the certificates available on your account, send a GET
        request to `/v2/certificates`.
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/certificate_name'
      tags:
        - Certificates
      responses:
        '200':
          $ref: '#/components/responses/all_certificates'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/certificates"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                certs, _, err := client.Certificates.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            certificates = client.certificates.all
            certificates.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.certificates.list()
      security:
        - bearer_auth:
            - cdn:read
    post:
      operationId: certificates_create
      summary: Create a New Certificate
      description: >
        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`.
      tags:
        - Certificates
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/certificate_request_lets_encrypt'
                - $ref: '#/components/schemas/certificate_request_custom'
      responses:
        '201':
          $ref: '#/components/responses/new_certificate'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "web-cert-01", "type": "custom", "private_key": "'"$(</path/to/privkey1.pem)"'","leaf_certificate": "'"$(</path/to/cert1.pem)"'","certificate_chain": "'"$(</path/to/fullchain1.pem)"'"}' \
              "https://api.digitalocean.com/v2/certificates"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                key, err := ioutil.ReadFile("/path/to/privkey1.pem")
                if err != nil {
                    fmt.Print(err)
                }

                cert, err := ioutil.ReadFile("/path/to/cert1.pem")
                if err != nil {
                    fmt.Print(err)
                }

                chain, err := ioutil.ReadFile("/path/to/fullchain1.pem")
                if err != nil {
                    fmt.Print(err)
                }

                createRequest := &godo.CertificateRequest{
                    Name:             "web-cert-01",
                    PrivateKey:       string(key),
                    LeafCertificate:  string(cert),
                    CertificateChain: string(chain),
                    Type:             "custom",
                }

                certObj, _, err := client.Certificates.Create(ctx, createRequest)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            key = File.open('/path/to/privkey1.pem', 'r'){ |file| file.read }

            cert = File.open('/path/to/cert1.pem', 'r'){ |file| file.read }

            chain = File.open('/path/to/fullchain1.pem', 'r'){ |file| file.read
            }


            certificate = DropletKit::Certificate.new(
                name: 'web-cert-01',
                private_key: key,
                leaf_certificate: cert,
                certificate_chain: chain,
                type: 'custom'
            )


            client.certificates.create(certificate)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            create_resp = client.certificates.create(
                {
                    "name": "web-cert-01",
                    "type": "lets_encrypt",
                    "private_key": "-----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-----",
                    "leaf_certificate": "-----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-----",
                    "certificate_chain": "-----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-----",
                }
            )
      security:
        - bearer_auth:
            - certificate:create
  /v2/certificates/{certificate_id}:
    get:
      operationId: certificates_get
      summary: Retrieve an Existing Certificate
      description: >-
        To show information about an existing certificate, send a GET request to
        `/v2/certificates/$CERTIFICATE_ID`.
      tags:
        - Certificates
      parameters:
        - $ref: '#/components/parameters/certificate_id'
      responses:
        '200':
          $ref: '#/components/responses/existing_certificate'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/certificates/892071a0-bb95-49bc-8021-3afd67a210bf"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                cert, _, err := client.Certificates.Get(ctx, "892071a0-bb95-49bc-8021-3afd67a210bf")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.certificates.find(id: '892071a0-bb95-49bc-8021-3afd67a210bf')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.certificates.get(
                certificate_id="892071a0-bb95-49bc-8021-3afd67a210bf"
            )
      security:
        - bearer_auth:
            - cdn:read
    delete:
      operationId: certificates_delete
      summary: Delete a Certificate
      description: |
        To delete a specific certificate, send a DELETE request to
        `/v2/certificates/$CERTIFICATE_ID`.
      tags:
        - Certificates
      parameters:
        - $ref: '#/components/parameters/certificate_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/certificates/892071a0-bb95-49bc-8021-3afd67a210bf"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Certificates.Delete(ctx, "892071a0-bb95-49bc-8021-3afd67a210bf")
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.certificates.delete(id:
            '892071a0-bb95-49bc-8021-3afd67a210bf')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            del_resp = client.certificates.delete(
                certificate_id="892071a0-bb95-49bc-8021-3afd67a210bf"
            )
      security:
        - bearer_auth:
            - certificate:delete
  /v2/customers/my/balance:
    get:
      operationId: balance_get
      summary: Get Customer Balance
      description: >-
        To retrieve the balances on a customer's account, send a GET request to
        `/v2/customers/my/balance`.
      tags:
        - Billing
      responses:
        '200':
          $ref: '#/components/responses/balance'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/customers/my/balance"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            balance = client.balance.get()
      security:
        - bearer_auth:
            - billing:read
  /v2/customers/my/billing_history:
    get:
      operationId: billingHistory_list
      summary: List Billing History
      description: >-
        To retrieve a list of all billing history entries, send a GET request to
        `/v2/customers/my/billing_history`.
      tags:
        - Billing
      responses:
        '200':
          $ref: '#/components/responses/billing_history'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/customers/my/billing_history"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            balance = client.billing_history.list()
      security:
        - bearer_auth:
            - billing:read
  /v2/customers/my/invoices:
    get:
      operationId: invoices_list
      summary: List All Invoices
      description: >-
        To retrieve a list of all invoices, send a GET request to
        `/v2/customers/my/invoices`.
      tags:
        - Billing
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/invoices'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/customers/my/invoices"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            balance = client.invoices.list()
      security:
        - bearer_auth:
            - billing:read
  /v2/customers/my/invoices/{invoice_uuid}:
    get:
      operationId: invoices_get_byUUID
      summary: Retrieve an Invoice by UUID
      description: >-
        To retrieve the invoice items for an invoice, send a GET request to
        `/v2/customers/my/invoices/$INVOICE_UUID`.
      tags:
        - Billing
      parameters:
        - $ref: '#/components/parameters/invoice_uuid'
      responses:
        '200':
          $ref: '#/components/responses/invoice'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/customers/my/invoices/22737513-0ea7-4206-8ceb-98a575af7681"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            invoices = client.invoices.get_by_uuid(invoice_uuid=1)
      security:
        - bearer_auth:
            - billing:read
  /v2/customers/my/invoices/{invoice_uuid}/csv:
    get:
      operationId: invoices_get_csvByUUID
      summary: Retrieve an Invoice CSV by UUID
      description: >-
        To retrieve a CSV for an invoice, send a GET request to
        `/v2/customers/my/invoices/$INVOICE_UUID/csv`.
      tags:
        - Billing
      parameters:
        - $ref: '#/components/parameters/invoice_uuid'
      responses:
        '200':
          $ref: '#/components/responses/invoice_csv'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: text/csv" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/customers/my/invoices/22737513-0ea7-4206-8ceb-98a575af7681/csv" --output invoice.csv
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            invoices = client.invoices.get_csv_by_uuid(invoice_uuid=1)
      security:
        - bearer_auth:
            - billing:read
  /v2/customers/my/invoices/{invoice_uuid}/pdf:
    get:
      operationId: invoices_get_pdfByUUID
      summary: Retrieve an Invoice PDF by UUID
      description: >-
        To retrieve a PDF for an invoice, send a GET request to
        `/v2/customers/my/invoices/$INVOICE_UUID/pdf`.
      tags:
        - Billing
      parameters:
        - $ref: '#/components/parameters/invoice_uuid'
      responses:
        '200':
          $ref: '#/components/responses/invoice_pdf'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/pdf" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/customers/my/invoices/22737513-0ea7-4206-8ceb-98a575af7681/pdf" --output invoice.pdf
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            invoices = client.invoices.get_pdf_by_uuid(invoice_uuid=1)
      security:
        - bearer_auth:
            - billing:read
  /v2/customers/my/invoices/{invoice_uuid}/summary:
    get:
      operationId: invoices_get_summaryByUUID
      summary: Retrieve an Invoice Summary by UUID
      description: >-
        To retrieve a summary for an invoice, send a GET request to
        `/v2/customers/my/invoices/$INVOICE_UUID/summary`.
      tags:
        - Billing
      parameters:
        - $ref: '#/components/parameters/invoice_uuid'
      responses:
        '200':
          $ref: '#/components/responses/invoice_summary'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/customers/my/invoices/22737513-0ea7-4206-8ceb-98a575af7681/summary"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            invoice = client.invoices.get_summary_by_uuid(invoice_uuid="1")
      security:
        - bearer_auth:
            - billing:read
  /v2/databases/options:
    get:
      operationId: databases_list_options
      summary: List Database Options
      description: >-
        To list all of the options available for the offered database engines,
        send a GET request to `/v2/databases/options`.

        The result will be a JSON object with an `options` key.
      tags:
        - Databases
      responses:
        '200':
          $ref: '#/components/responses/options'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/options"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                options, _, err := client.Databases.ListOptions(ctx)
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.databases.list_options()
      security:
        - bearer_auth:
            - database:read
  /v2/databases:
    get:
      operationId: databases_list_clusters
      summary: List All Database Clusters
      description: >-
        To list all of the database clusters available on your account, send a
        GET request to `/v2/databases`. To limit the results to database
        clusters with a specific tag, include the `tag_name` query parameter set
        to the name of the tag. For example, `/v2/databases?tag_name=$TAG_NAME`.


        The result will be a JSON object with a `databases` key. This will be
        set to an array of database objects, each of which will contain the
        standard database attributes.


        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).


        The embedded `maintenance_window` object will contain information about
        any scheduled maintenance for the database cluster.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/tag_name'
      responses:
        '200':
          $ref: '#/components/responses/database_clusters'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                clusters, _, err := client.Databases.List(ctx, opt)
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.databases.list_clusters(tag_name="production")
      security:
        - bearer_auth:
            - database:read
    post:
      operationId: databases_create_cluster
      summary: Create a New Database Cluster
      description: >-
        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.
      tags:
        - Databases
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/database_cluster'
                - type: object
                  properties:
                    backup_restore:
                      $ref: '#/components/schemas/database_backup'
            examples:
              Create a New Database Cluster:
                value:
                  name: backend
                  engine: pg
                  version: '14'
                  region: nyc3
                  size: db-s-2vcpu-4gb
                  storage_size_mib: 61440
                  num_nodes: 2
                  tags:
                    - production
              Create a New Database Cluster with trusted sources:
                value:
                  name: backend
                  engine: pg
                  version: '14'
                  region: nyc3
                  size: db-s-2vcpu-4gb
                  num_nodes: 2
                  storage_size_mib: 61440
                  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
              Restore from a Database Cluster Backup:
                value:
                  name: backend-restored
                  backup_restore:
                    database_name: backend
                    backup_created_at: '2019-01-31T19:25:22Z'
                  engine: pg
                  version: '14'
                  region: nyc3
                  size: db-s-2vcpu-4gb
                  num_nodes: 2
      responses:
        '201':
          $ref: '#/components/responses/database_cluster'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "backend", "engine": "pg", "version": "14", "region": "nyc3", "size": "db-s-2vcpu-4gb", "num_nodes": 2, "storage_size_mib": 61440, "tags": ["production"]}' \
              "https://api.digitalocean.com/v2/databases"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.DatabaseCreateRequest{
                    Name:       "backend",
                    EngineSlug: "pg",
                    Version:    "14",
                    Region:     "nyc3",
                    SizeSlug:   "db-s-2vcpu-4gb",
                    NumNodes:   2,
                    StorageSizeMiB : 61440,
                }

                cluster, _, err := client.Databases.Create(ctx, createRequest)
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            create_req = {
              "name": "backend",
              "engine": "pg",
              "version": "14",
              "region": "nyc3",
              "size": "db-s-2vcpu-4gb",
              "num_nodes": 2,
              "storage_size_mib": 61440,
              "tags": [
                "production"
              ]
            }

            create_resp = client.databases.create_cluster(body=create_req)
      security:
        - bearer_auth:
            - database:create
  /v2/databases/{database_cluster_uuid}:
    get:
      operationId: databases_get_cluster
      summary: Retrieve an Existing Database Cluster
      description: >-
        To show information about an existing database cluster, send a GET
        request to `/v2/databases/$DATABASE_ID`.


        The response will be a JSON object with a database key. This will be set
        to an object containing the standard database cluster attributes.


        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 contain the information needed to connect to the cluster's
        standby node(s).


        The embedded maintenance_window object will contain information about
        any scheduled maintenance for the database cluster.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/database_cluster'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                cluster, _, err := client.Databases.Get(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.get_cluster(database_cluster_uuid="a7a89a")
      security:
        - bearer_auth:
            - database:read
    delete:
      operationId: databases_destroy_cluster
      summary: Destroy a Database Cluster
      description: >-
        To destroy a specific database, send a DELETE request to
        `/v2/databases/$DATABASE_ID`.

        A status of 204 will be given. This indicates that the request was
        processed successfully, but that no response body is needed.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X DELETE \

            -H "Content-Type: application/json" \

            -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \

            "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30" 
        - lang: Go
          source: |-
            import (
                "context"
                "github.com/digitalocean/godo"
            )

            func main() {
                pat := "mytoken"

                client := godo.NewFromToken(pat)
                ctx := context.TODO()

                _, err := client.Databases.Delete(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            delete_resp =
            client.databases.destroy_cluster(database_cluster_uuid="a7abba8")
      security:
        - bearer_auth:
            - database:delete
  /v2/databases/{database_cluster_uuid}/config:
    get:
      operationId: databases_get_config
      summary: Retrieve an Existing Database Cluster Configuration
      description: >
        Shows configuration parameters for an existing database cluster by
        sending a GET request to

        `/v2/databases/$DATABASE_ID/config`.

        The response is a JSON object with a `config` key, which is set to an
        object

        containing any database configuration parameters.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/database_config'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/config"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.get_config(database_cluster_uuid="a7a90ab")
      security:
        - bearer_auth:
            - database:read
    patch:
      operationId: databases_patch_config
      summary: Update the Database Configuration for an Existing Database
      description: >
        To update the configuration for an existing database cluster, send a
        PATCH request to

        `/v2/databases/$DATABASE_ID/config`.
      tags:
        - Databases
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/database_config'
            example:
              config:
                sql_mode: >-
                  ANSI,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,STRICT_ALL_TABLES
                sql_require_primary_key: true
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PATCH \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"config": {"sql_mode": "ANSI,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,STRICT_ALL_TABLES","sql_require_primary_key": true}}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/config"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.databases.patch_config(database_cluster_uuid="a7aba9d")
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/ca:
    get:
      operationId: databases_get_ca
      summary: Retrieve the Public Certificate
      description: >
        To retrieve the public certificate used to secure the connection to the
        database cluster send a GET request to

        `/v2/databases/$DATABASE_ID/ca`.


        The response will be a JSON object with a `ca` key. This will be set to
        an object

        containing the base64 encoding of the public key certificate.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/ca'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/ca"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                ca, _, err := client.Databases.GetCA(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30")
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.databases.get_ca(database_cluster_uuid="aba77ada")
      security:
        - bearer_auth:
            - database:read
  /v2/databases/{database_cluster_uuid}/online-migration:
    get:
      operationId: databases_get_migrationStatus
      summary: Retrieve the Status of an Online Migration
      description: >-
        To retrieve the status of the most recent online migration, send a GET
        request to `/v2/databases/$DATABASE_ID/online-migration`. 
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/online_migration'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X GET \

            -H "Content-Type: application/json" \

            -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \

            "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/online-migration"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.get_migration_status(database_cluster_uuid="a7a7ab90")
      security:
        - bearer_auth:
            - database:read
    put:
      operationId: databases_update_onlineMigration
      summary: Start an Online Migration
      description: >-
        To start an online migration, send a PUT request to
        `/v2/databases/$DATABASE_ID/online-migration` endpoint. Migrating a
        cluster establishes a connection with an existing cluster and replicates
        its contents to the target cluster. Online migration is only available
        for MySQL, PostgreSQL, and Redis clusters.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/source_database'
            example:
              source:
                host: source-do-user-6607903-0.b.db.ondigitalocean.com
                dbname: defaultdb
                port: 25060
                username: doadmin
                password: paakjnfe10rsrsmf
              disable_ssl: false
              ignore_dbs:
                - db0
                - db1
      responses:
        '200':
          $ref: '#/components/responses/online_migration'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X PUT \

            -H "Content-Type: application/json" \

            -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \

            -d
            '{"source":{"host":"source-do-user-6607903-0.b.db.ondigitalocean.com","dbname":"defaultdb","port":25060,"username":"doadmin","password":"paakjnfe10rsrsmf"},"disable_ssl":false,"ignore_dbs":["db0","db1"]}'
            \

            "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/online-migration"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "source": {
                "host": "source-do-user-6607903-0.b.db.ondigitalocean.com",
                "dbname": "defaultdb",
                "port": 25060,
                "username": "doadmin",
                "password": "paakjnfe10rsrsmf"
              },
              "disable_ssl": False
              "ignore_dbs": ["db0","db1"]
            }


            update_resp =
            client.databases.update_online_migration(database_cluster_uuid="a7a8bas",
            body=req)
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/online-migration/{migration_id}:
    delete:
      operationId: databases_delete_onlineMigration
      summary: Stop an Online Migration
      description: >
        To stop an online migration, send a DELETE request to
        `/v2/databases/$DATABASE_ID/online-migration/$MIGRATION_ID`.


        A status of 204 will be given. This indicates that the request was
        processed successfully, but that no response body is needed.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/migration_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X DELETE \

            -H "Content-Type: application/json" \

            -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \

            "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/online-migration/77b28fc8-19ff-11eb-8c9c-c68e24557488"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            delete_resp =
            client.databases.delete_online_migration(database_cluster_uuid="9cc10173",
            migration="77b28fc8")
      security:
        - bearer_auth:
            - database:delete
  /v2/databases/{database_cluster_uuid}/migrate:
    put:
      operationId: databases_update_region
      summary: Migrate a Database Cluster to a New Region
      description: >
        To migrate a database cluster to a new region, send a `PUT` request to

        `/v2/databases/$DATABASE_ID/migrate`. The body of the request must
        specify a

        `region` attribute.


        A successful request will receive a 202 Accepted status code with no
        body in

        response. Querying the database cluster will show that its `status`
        attribute

        will now be set to `migrating`. This will transition back to `online`
        when the

        migration has completed.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                region:
                  type: string
                  example: lon1
                  description: >-
                    A slug identifier for the region to which the database
                    cluster will be migrated.
              required:
                - region
              example:
                region: lon1
      responses:
        '202':
          $ref: '#/components/responses/accepted'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"region":"lon1"}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/migrate"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                migrateRequest := &godo.DatabaseMigrateRequest{
                    Region: "lon1",
                }

                _, err := client.Databases.Migrate(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", migrateRequest)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "region": "lon1"
            }


            update_resp =
            client.databases.update_region(database_cluster_uuid="a7a8bas",
            body=req)
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/resize:
    put:
      operationId: databases_update_clusterSize
      summary: Resize a Database Cluster
      description: >-
        To resize a database cluster, send a PUT request to
        `/v2/databases/$DATABASE_ID/resize`. The body of the request must
        specify both the size and num_nodes attributes.

        A successful request will receive a 202 Accepted status code with no
        body in response. Querying the database cluster will show that its
        status attribute will now be set to resizing. This will transition back
        to online when the resize operation has completed.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/database_cluster_resize'
            example:
              size: db-s-4vcpu-8gb
              num_nodes: 3
              storage_size_mib: 163840
      responses:
        '202':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X PUT \

            -H "Content-Type: application/json" \

            -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \

            -d '{"size":"db-s-4vcpu-8gb", "num_nodes":3,
            "storage_size_mib":163840}' \

            "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/resize" 
        - lang: Go
          source: |-
            import (
                "context"
                "github.com/digitalocean/godo"
            )

            func main() {
                pat := "mytoken"

                client := godo.NewFromToken(pat)
                ctx := context.TODO()

                resizeRequest := &godo.DatabaseResizeRequest{
                    SizeSlug: "db-s-4vcpu-8gb",
                    NumNodes: 3,
                    StorageSizeMib: 163840,
                }
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "size": "db-s-4vcpu-8gb",
              "num_nodes": 3,
              "storage_size_mib": 163840
            }


            update_resp =
            client.databases.update_cluster_size(database_cluster_uuid="a7a8bas",
            body=req)
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/firewall:
    get:
      operationId: databases_list_firewall_rules
      summary: List Firewall Rules (Trusted Sources) for a Database Cluster
      description: >-
        To list all of a database cluster's firewall rules (known as "trusted
        sources" in the control panel), send a GET request to
        `/v2/databases/$DATABASE_ID/firewall`.

        The result will be a JSON object with a `rules` key.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/firewall_rules'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/firewall"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                rules, _, err := client.Databases.GetFirewallRules(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.list_firewall_rules(database_cluster_uuid="a7aab9a")
      security:
        - bearer_auth:
            - database:read
    put:
      operationId: databases_update_firewall_rules
      summary: Update Firewall Rules (Trusted Sources) for a Database
      description: >-
        To update a database cluster's firewall rules (known as "trusted
        sources" in the control panel), send a PUT request to
        `/v2/databases/$DATABASE_ID/firewall` specifying which resources should
        be able to open connections to the database. You may limit connections
        to specific Droplets, Kubernetes clusters, or IP addresses. When a tag
        is provided, any Droplet or Kubernetes node with that tag applied to it
        will have access. The firewall is limited to 100 rules (or trusted
        sources). When possible, we recommend [placing your databases into a VPC
        network](https://www.digitalocean.com/docs/networking/vpc/) to limit
        access to them instead of using a firewall.

        A successful
      tags:
        - Databases
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                rules:
                  type: array
                  items:
                    $ref: '#/components/schemas/firewall_rule'
            example:
              rules:
                - type: ip_addr
                  value: 192.168.1.1
                - type: k8s
                  value: ff2a6c52-5a44-4b63-b99c-0e98e7a63d61
                - type: droplet
                  value: '163973392'
                - type: tag
                  value: backend
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"rules": [{"type": "ip_addr","value": "192.168.1.1"},{"type": "droplet","value": "163973392"},{"type": "k8s","value": "ff2a6c52-5a44-4b63-b99c-0e98e7a63d61"},{"type": "tag","value": "backend"}]}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/firewall"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                req := godo.DatabaseUpdateFirewallRulesRequest{
                  Rules: []*godo.DatabaseFirewallRule{
                    {
                     Type:  "ip_addr",
                     Value: "192.168.1.1",
                   },
                    {
                     Type:  "droplet",
                     Value: "163973392",
                   },
                    {
                     Type:  "k8s",
                     Value: "ff2a6c52-5a44-4b63-b99c-0e98e7a63d61",
                    },
                  },
                }
                _, err := client.Databases.UpdateFirewallRules(ctx, dbID, &req)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "rules": [
                {
                  "type": "ip_addr",
                  "value": "192.168.1.1"
                },
                {
                  "type": "k8s",
                  "value": "ff2a6c52-5a44-4b63-b99c-0e98e7a63d61"
                },
                {
                  "type": "droplet",
                  "value": "163973392"
                },
                {
                  "type": "tag",
                  "value": "backend"
                }
              ]
            }

            update_resp =
            client.databases.update_firewall_rules(database_cluster_uuid="a7a8bas",
            body=req)
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/maintenance:
    put:
      operationId: databases_update_maintenanceWindow
      summary: Configure a Database Cluster's Maintenance Window
      description: >-
        To configure the window when automatic maintenance should be performed
        for a database cluster, send a PUT request to
        `/v2/databases/$DATABASE_ID/maintenance`.

        A successful request will receive a 204 No Content status code with no
        body in response.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/database_maintenance_window'
            example:
              day: tuesday
              hour: '14:00'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"day": "tuesday", "hour": "14:00"}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/maintenance"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                maintenanceRequest := &godo.DatabaseUpdateMaintenanceRequest{
                    Day:  "thursday",
                    Hour: "16:00",
                }

                _, err := client.Databases.UpdateMaintenance(ctx, "88055188-9e54-4f21-ab11-8a918ed79ee2", maintenanceRequest)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "day": "tuesday",
              "hour": "14:00"
            }


            update_resp =
            client.databases.update_maintenance_window(database_cluster_uuid="a7a8bas",
            body=req)
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/backups:
    get:
      operationId: databases_list_backups
      summary: List Backups for a Database Cluster
      description: >-
        To list all of the available backups of a PostgreSQL or MySQL database
        cluster, send a GET request to `/v2/databases/$DATABASE_ID/backups`.

        **Note**: Backups are not supported for Redis clusters.

        The result will be a JSON object with a `backups key`. This will be set
        to an array of backup objects, each of which will contain the size of
        the backup and the timestamp at which it was created.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/database_backups'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/backups"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                backups, _, err := client.Databases.ListBackups(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", nil)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.list_backups(database_cluster_uuid="a9a8a77")
      security:
        - bearer_auth:
            - database:read
  /v2/databases/{database_cluster_uuid}/replicas:
    get:
      operationId: databases_list_replicas
      summary: List All Read-only Replicas
      description: >-
        To list all of the read-only replicas associated with a database
        cluster, send a GET request to `/v2/databases/$DATABASE_ID/replicas`.


        **Note**: Read-only replicas are not supported for Redis clusters.


        The result will be a JSON object with a `replicas` key. This will be set
        to an array of database replica objects, each of which will contain the
        standard database replica attributes.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/database_replicas'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/replicas"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                replicas, _, err := client.Databases.ListReplicas(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", nil)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.list_replicas(database_cluster_uuid="a7aba3")
      security:
        - bearer_auth:
            - database:read
    post:
      operationId: databases_create_replica
      summary: Create a Read-only Replica
      description: >-
        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`.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/database_replica'
              required:
                - name
                - size
            example:
              name: read-nyc3-01
              region: nyc3
              size: db-s-2vcpu-4gb
              storage_size_mib: 61440
      responses:
        '201':
          $ref: '#/components/responses/database_replica'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"read-nyc3-01", "region":"nyc3", "size": "db-s-2vcpu-4gb", "storage_size_mib": 61440}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/replicas"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                replicaRequest := &godo.DatabaseCreateReplicaRequest{

                    Name:   "read-nyc3-01",
                    Region: "nyc3",
                    Size:   "db-s-2vcpu-4gb",
                    StorageSizeMiB : 61440,
                }

                replica, _, err := client.Databases.CreateReplica(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", replicaRequest)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            create_req = {
              "name": "read-nyc3-01",
              "region": "nyc3",
              "size": "db-s-2vcpu-4gb",
              "storage_size_mib": 61440,
            }


            create_resp =
            client.databases.create_replica(database_cluster_uuid="9cc10173",
            body=create_req)
      security:
        - bearer_auth:
            - database:create
  /v2/databases/{database_cluster_uuid}/events:
    get:
      operationId: databases_list_events_logs
      summary: List all Events Logs
      description: |
        To list all of the cluster events, send a GET request to
        `/v2/databases/$DATABASE_ID/events`.

        The result will be a JSON object with a `events` key.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/events_logs'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/events"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                replicas, _, err := client.Databases.ListProjectEvents(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", nil)
            }
      security:
        - bearer_auth:
            - database:read
  /v2/databases/{database_cluster_uuid}/replicas/{replica_name}:
    get:
      operationId: databases_get_replica
      summary: Retrieve an Existing Read-only Replica
      description: >-
        To show information about an existing database replica, send a GET
        request to `/v2/databases/$DATABASE_ID/replicas/$REPLICA_NAME`.


        **Note**: Read-only replicas are not supported for Redis clusters.


        The response will be a JSON object with a `replica key`. This will be
        set to an object containing the standard database replica attributes.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/replica_name'
      responses:
        '200':
          $ref: '#/components/responses/database_replica'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/replicas/read-nyc3-01"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                replica, _, err := client.Databases.GetReplica(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "read-nyc3-01")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.get_replica(database_cluster_uuid="a7a90a",
            replica_name="backend-replica")
      security:
        - bearer_auth:
            - database:read
    delete:
      operationId: databases_destroy_replica
      summary: Destroy a Read-only Replica
      description: >-
        To destroy a specific read-only replica, send a DELETE request to
        `/v2/databases/$DATABASE_ID/replicas/$REPLICA_NAME`.


        **Note**: Read-only replicas are not supported for Redis clusters.


        A status of 204 will be given. This indicates that the request was
        processed successfully, but that no response body is needed.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/replica_name'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/replicas/read-nyc3-01"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Databases.DeleteReplica(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "read-nyc3-01")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            delete_resp =
            client.databases.destroy_replica(database_cluster_uuid="ba88aab",
            replica_name="read_nyc_3")
      security:
        - bearer_auth:
            - database:delete
  /v2/databases/{database_cluster_uuid}/replicas/{replica_name}/promote:
    put:
      operationId: databases_promote_replica
      summary: Promote a Read-only Replica to become a Primary Cluster
      description: >-
        To promote a specific read-only replica, send a PUT request to
        `/v2/databases/$DATABASE_ID/replicas/$REPLICA_NAME/promote`.


        **Note**: Read-only replicas are not supported for Redis clusters.


        A status of 204 will be given. This indicates that the request was
        processed successfully, but that no response body is needed.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/replica_name'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/replicas/read-nyc3-01/promote"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Databases.PromoteReplicaToPrimary(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "read-nyc3-01")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.databases.promote_replica(database_cluster_uuid="a7a8bas",
            replica_name="ba8ab22")
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/users:
    get:
      operationId: databases_list_users
      summary: List all Database Users
      description: >
        To list all of the users for your database cluster, send a GET request
        to

        `/v2/databases/$DATABASE_ID/users`.


        Note: User management is not supported for Redis clusters.


        The result will be a JSON object with a `users` key. This will be set to
        an array

        of database user objects, each of which will contain the standard
        database user attributes.


        For MySQL clusters, additional options will be contained in the
        mysql_settings object.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/users'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/users"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                users, _, err := client.Databases.ListUsers(ctx, "88055188-9e54-4f21-ab11-8a918ed79ee2", nil)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.list_users(database_cluster_uuid="a7aba3")
      security:
        - bearer_auth:
            - database:read
    post:
      operationId: databases_add_user
      summary: Add a Database User
      description: >
        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.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              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.

                        This option is not currently supported for other
                        database engines.             
            examples:
              Add New User:
                value:
                  name: app-01
              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
              Add New User with Kafka ACLs:
                value:
                  name: app-03
                  settings:
                    acl:
                      - permission: produceconsume
                        topic: customer-events
                      - permission: produce
                        topic: customer-events.*
                      - permission: consume
                        topic: customer-events
      responses:
        '201':
          $ref: '#/components/responses/user'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "app-01"}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/users"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                addUserRequest := &godo.DatabaseCreateUserRequest{
                    Name: "app-01",
                }

                user, _, err := client.Databases.CreateUser(ctx, "88055188-9e54-4f21-ab11-8a918ed79ee2", addUserRequest)

            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            add_user_resp =
            client.databases.add_user(database_cluster_uuid="ab7bb7a",
            body={"name": "app-01"})
      security:
        - bearer_auth:
            - database:create
  /v2/databases/{database_cluster_uuid}/users/{username}:
    get:
      operationId: databases_get_user
      summary: Retrieve an Existing Database User
      description: >
        To show information about an existing database user, send a GET request
        to

        `/v2/databases/$DATABASE_ID/users/$USERNAME`.


        Note: User management is not supported for Redis clusters.


        The response will be a JSON object with a `user` key. This will be set
        to an object

        containing the standard database user attributes.


        For MySQL clusters, additional options will be contained in the
        `mysql_settings`

        object.


        For Kafka clusters, additional options will be contained in the
        `settings` object.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/username'
      responses:
        '200':
          $ref: '#/components/responses/user'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/users/app-01"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                user, _, err := client.Databases.GetUser(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "app-01")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp = client.databases.get_user(database_cluster_uuid="9a9aba",
            username="admin")
      security:
        - bearer_auth:
            - database:read
    delete:
      operationId: databases_delete_user
      summary: Remove a Database User
      description: >
        To remove a specific database user, send a DELETE request to

        `/v2/databases/$DATABASE_ID/users/$USERNAME`.


        A status of 204 will be given. This indicates that the request was
        processed

        successfully, but that no response body is needed.


        Note: User management is not supported for Redis clusters.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/username'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/users/app-01"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Databases.DeleteUser(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "app-01")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            delete_resp =
            client.databases.delete_user(database_cluster_uuid="aba134a",
            username="backend_user1")
      security:
        - bearer_auth:
            - database:delete
    put:
      operationId: databases_update_user
      summary: Update a Database User
      description: >
        To update an existing database user, send a PUT request to
        `/v2/databases/$DATABASE_ID/users/$USERNAME`

        with the desired settings.


        **Note**: only `settings` can be updated via this type of request. If
        you wish to change the name of a user,

        you must recreate a new user.


        The response will be a JSON object with a key called `user`. The value
        of this will be an

        object that contains the name of the update database user, along with
        the `settings` object that

        has been updated.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/username'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - type: object
                  properties:
                    settings:
                      $ref: '#/components/schemas/user_settings'
              required:
                - settings
            examples:
              Update User Kafka ACLs:
                value:
                  settings:
                    acl:
                      - id: acl128aaaa99239
                        permission: produceconsume
                        topic: customer-events
                      - id: acl293098flskdf
                        permission: produce
                        topic: customer-events.*
                      - id: acl128ajei20123
                        permission: consume
                        topic: customer-events
      responses:
        '201':
          $ref: '#/components/responses/user'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"settings": {"acl": [{"topic": "events", "permission": "produce"}]}}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/users"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()
                userName := "test-user"

                updateUserRequest := &godo.DatabaseUpdateUserRequest{
                  Settings: {
                    ACL: [
                      {
                        Permssion: "consume",
                        Topic: "events",
                      }
                      {
                        Permission: "produce",
                        Topic: "metrics",
                      }
                    ]
                  }
                }

                user, _, err := client.Databases.UpdateUser(ctx, "88055188-9e54-4f21-ab11-8a918ed79ee2", userName, updateUserRequest)
            }
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/users/{username}/reset_auth:
    post:
      operationId: databases_reset_auth
      summary: Reset a Database User's Password or Authentication Method
      description: >
        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.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/username'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                mysql_settings:
                  $ref: '#/components/schemas/mysql_settings'
            example:
              mysql_settings:
                auth_plugin: caching_sha2_password
      responses:
        '200':
          $ref: '#/components/responses/user'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"mysql_settings":{"auth_plugin": "caching_sha2_password"}}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/users/app-01/reset_auth"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                resetUserAuthRequest := &godo.DatabaseResetUserAuthRequest{
                    MySQLSettings: &DatabaseMySQLUserSettings{
                        AuthPlugin: "caching_sha2_password",
                     },
                }
                user, _, err := client.Databases.ResetUserAuth(ctx, "88055188-9e54-4f21-ab11-8a918ed79ee2", "app-01", resetuserAuthRequest)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "mysql_settings": {
                "auth_plugin": "caching_sha2_password"
              }
            }


            get_resp =
            client.databases.reset_auth(database_cluster_uuid="a7a8bas",
            username="admin", body=req)
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/dbs:
    get:
      operationId: databases_list
      summary: List All Databases
      description: >
        To list all of the databases in a clusters, send a GET request to

        `/v2/databases/$DATABASE_ID/dbs`.


        The result will be a JSON object with a `dbs` key. This will be set to
        an array

        of database objects, each of which will contain the standard database
        attributes.


        Note: Database management is not supported for Redis clusters.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/databases'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/dbs"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                dbs, _, err := client.Databases.ListDBs(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", nil)
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            get_resp = client.databases.list(database_cluster_uuid="a7aba9d")
      security:
        - bearer_auth:
            - database:read
    post:
      operationId: databases_add
      summary: Add a New Database
      description: >
        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.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/database'
            example:
              name: alpha
      responses:
        '201':
          $ref: '#/components/responses/database'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "alpha"}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/dbs"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createDBReq := &godo.DatabaseCreateDBRequest{
                    Name: "alpha",
                }

                db, _, err := client.Databases.CreateDB(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", createDBReq)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            add_resp = client.databases.add(database_cluster_uuid="9cc10173",
            body={"name": "alpha"})
      security:
        - bearer_auth:
            - database:create
  /v2/databases/{database_cluster_uuid}/dbs/{database_name}:
    get:
      operationId: databases_get
      summary: Retrieve an Existing Database
      description: >
        To show information about an existing database cluster, send a GET
        request to

        `/v2/databases/$DATABASE_ID/dbs/$DB_NAME`.


        Note: Database management is not supported for Redis clusters.


        The response will be a JSON object with a `db` key. This will be set to
        an object

        containing the standard database attributes.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/database_name'
      responses:
        '200':
          $ref: '#/components/responses/database'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/dbs/alpha"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                db, _, err := client.Databases.GetDB(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "alpha")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp = client.databases.get(database_cluster_uuid="a9a8a77",
            database_name="admin")
      security:
        - bearer_auth:
            - database:read
    delete:
      operationId: databases_delete
      summary: Delete a Database
      description: >
        To delete a specific database, send a DELETE request to

        `/v2/databases/$DATABASE_ID/dbs/$DB_NAME`.


        A status of 204 will be given. This indicates that the request was
        processed

        successfully, but that no response body is needed.


        Note: Database management is not supported for Redis clusters.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/database_name'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/dbs/alpha"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Databases.DeleteDB(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "alpha")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            delete_resp =
            client.databases.delete(database_cluster_uuid="a7abda",
            database_name="ba1341")
      security:
        - bearer_auth:
            - database:delete
  /v2/databases/{database_cluster_uuid}/pools:
    get:
      operationId: databases_list_connectionPools
      summary: List Connection Pools (PostgreSQL)
      description: >-
        To list all of the connection pools available to a PostgreSQL database
        cluster, send a GET request to `/v2/databases/$DATABASE_ID/pools`.

        The result will be a JSON object with a `pools` key. This will be set to
        an array of connection pool objects.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/connection_pools'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X GET /

            -H "Content-Type: application/json" /

            -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" /

            "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/pools" 
        - lang: Go
          source: |-
            import (
                "context"
                "github.com/digitalocean/godo"
            )

            func main() {
                pat := "mytoken"

                client := godo.NewFromToken(pat)
                ctx := context.TODO()

                pools, _, err := client.Databases.ListPools(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", nil)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.list_connection_pools(database_cluster_uuid="a7aab9a")
      security:
        - bearer_auth:
            - database:read
    post:
      operationId: databases_add_connectionPool
      summary: Add a New Connection Pool (PostgreSQL)
      description: >
        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.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/connection_pool'
            example:
              name: backend-pool
              mode: transaction
              size: 10
              db: defaultdb
              user: doadmin
      responses:
        '201':
          $ref: '#/components/responses/connection_pool'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X POST \

            -H "Content-Type: application/json" \

            -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \

            -d '{"name": "backend-pool","mode": "transaction","size": 10,"db":
            "defaultdb","user": "doadmin"}' \

            "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/pools" 
        - lang: Go
          source: |-
            import (
                "context"
                "github.com/digitalocean/godo"
            )

            func main() {
                pat := "mytoken"

                client := godo.NewFromToken(pat)
                ctx := context.TODO()

                createPoolReq := &godo.DatabaseCreatePoolRequest{
                    Name:     "backend-pool",
                    Database: "defaultdb",
                    Size:     10,
                    User:     "doadmin",
                    Mode:     "transaction",
                }

                pool, _, err := client.Databases.CreatePool(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", createPoolReq)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            add_conn_pool_req = {
              "name": "backend-pool",
              "mode": "transaction",
              "size": 10,
              "db": "defaultdb",
              "user": "doadmin"
            }    


            add_conn_pool_resp =
            client.databases.add_connection_pool(database_cluster_uuid="9cc10173",
            body=add_conn_pool_req)
      security:
        - bearer_auth:
            - database:create
  /v2/databases/{database_cluster_uuid}/pools/{pool_name}:
    get:
      operationId: databases_get_connectionPool
      summary: Retrieve Existing Connection Pool (PostgreSQL)
      description: >-
        To show information about an existing connection pool for a PostgreSQL
        database cluster, send a GET request to
        `/v2/databases/$DATABASE_ID/pools/$POOL_NAME`.

        The response will be a JSON object with a `pool` key.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/pool_name'
      responses:
        '200':
          $ref: '#/components/responses/connection_pool'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X GET /

            -H "Content-Type: application/json" /

            -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" /

            "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/pools/backend-pool" 
        - lang: Go
          source: |-
            import (
                "context"
                "github.com/digitalocean/godo"
            )

            func main() {
                pat := "mytoken"

                client := godo.NewFromToken(pat)
                ctx := context.TODO()

                pool, _, err := client.Databases.GetPool(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "backend-pool")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.get_connection_pool(database_cluster_uuid="a7aba8a",
            pool_name="backend-pool") 
      security:
        - bearer_auth:
            - database:read
    put:
      operationId: databases_update_connectionPool
      summary: Update Connection Pools (PostgreSQL)
      description: >-
        To update a connection pool for a PostgreSQL database cluster, send a
        PUT request to  `/v2/databases/$DATABASE_ID/pools/$POOL_NAME`.
      tags:
        - Databases
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/connection_pool_update'
            example:
              mode: transaction
              size: 10
              db: defaultdb
              user: doadmin
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/pool_name'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X PUT \

            -H "Content-Type: application/json" \

            -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \

            -d '{"mode": "transaction", "size": 15, "db": "defaultdb", "user":
            "doadmin"}' \

            "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/pools/backend-pool" 
        - lang: Go
          source: |-
            import (
                "context"
                "github.com/digitalocean/godo"
            )

            func main() {
                pat := "mytoken"

                client := godo.NewFromToken(pat)
                ctx := context.TODO()

                updateReq := &godo.DatabaseUpdatePoolRequest{
                    User:     "doadmin",
                    Size:     15,
                    Database: "defaultdb",
                    Mode:     "transaction",
                }

                _, err := client.Databases.UpdatePool(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "backend-pool", updateReq)

            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
                "mode": "transaction",
                "size": 10,
                "db": "defaultdb",
                "user": "doadmin"
            }


            update_resp =
            client.databases.update_connection_pool(database_cluster_uuid="a7a8bas",
            pool_name="conn_pool", body=req)
      security:
        - bearer_auth:
            - database:update
    delete:
      operationId: databases_delete_connectionPool
      summary: Delete a Connection Pool (PostgreSQL)
      description: >
        To delete a specific connection pool for a PostgreSQL database cluster,
        send

        a DELETE request to `/v2/databases/$DATABASE_ID/pools/$POOL_NAME`.


        A status of 204 will be given. This indicates that the request was
        processed

        successfully, but that no response body is needed.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/pool_name'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X GET \

            -H "Content-Type: application/json" \

            -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \

            "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/pools/backend-pool"
        - lang: Go
          source: |-
            import (
                "context"
                "github.com/digitalocean/godo"
            )

            func main() {
                pat := "mytoken"

                client := godo.NewFromToken(pat)
                ctx := context.TODO()

                _, err := client.Databases.DeletePool(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "backend-pool")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            delete_conn_pool =
            client.databases.delete_connection_pool(database_cluster_uuid="9cc10173",
            pool_name="backend-pool")
      security:
        - bearer_auth:
            - database:delete
  /v2/databases/{database_cluster_uuid}/eviction_policy:
    get:
      operationId: databases_get_evictionPolicy
      summary: Retrieve the Eviction Policy for a Redis Cluster
      description: >-
        To retrieve the configured eviction policy for an existing Redis
        cluster, send a GET request to
        `/v2/databases/$DATABASE_ID/eviction_policy`.

        The response will be a JSON object with an `eviction_policy` key. This
        will be set to a string representing the eviction policy.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/eviction_policy_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cdb64e5-61e4-4b30-b711-11ef66d84558/eviction_policy"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                db, _, err := client.Databases.GetEvictionPolicy(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.get_eviction_policy(database_cluster_uuid="a7aa89a")
      security:
        - bearer_auth:
            - database:read
    put:
      operationId: databases_update_evictionPolicy
      summary: Configure the Eviction Policy for a Redis Cluster
      description: >-
        To configure an eviction policy for an existing Redis cluster, send a
        PUT request to `/v2/databases/$DATABASE_ID/eviction_policy` specifying
        the desired policy.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - eviction_policy
              properties:
                eviction_policy:
                  $ref: '#/components/schemas/eviction_policy_model'
            example:
              eviction_policy: allkeys_lru
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"eviction_policy":"allkeys_lru"}' \
              "https://api.digitalocean.com/v2/databases/9cdb64e5-61e4-4b30-b711-11ef66d84558/eviction_policy"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                db, _, err := client.Databases.SetEvictionPolicy(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", "allkeys_lru")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "eviction_policy": "allkeys_lru"
            }


            update_resp =
            client.databases.update_eviction_policy(database_cluster_uuid="a7a8bas",
            body=req)
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/sql_mode:
    get:
      operationId: databases_get_sql_mode
      summary: Retrieve the SQL Modes for a MySQL Cluster
      description: >-
        To retrieve the configured SQL modes for an existing MySQL cluster, send
        a GET request to `/v2/databases/$DATABASE_ID/sql_mode`.

        The response will be a JSON object with a `sql_mode` key. This will be
        set to a string representing the configured SQL modes.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/sql_mode'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cdb64e5-61e4-4b30-b711-11ef66d84558/sql_mode"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                sqlMode, _, err := client.Databases.GetSQLMode(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp =
            client.databases.get_sql_mode(database_cluster_uuid="90abaa8")
      security:
        - bearer_auth:
            - database:read
    put:
      operationId: databases_update_sql_mode
      summary: Update SQL Mode for a Cluster
      description: >-
        To configure the SQL modes for an existing MySQL cluster, send a PUT
        request to `/v2/databases/$DATABASE_ID/sql_mode` specifying the desired
        modes. See the official MySQL 8 documentation for a [full list of
        supported SQL
        modes](https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-full).

        A successful request will receive a 204 No Content status code with no
        body in response.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/sql_mode'
            example:
              sql_mode: >-
                ANSI,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"sql_mode":"ANSI,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE"}' \
              "https://api.digitalocean.com/v2/databases/9cdb64e5-61e4-4b30-b711-11ef66d84558/sql_mode"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                sqlMode := "ANSI,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE"
                _, err := client.Databases.SetSQLMode(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", sqlMode)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "sql_mode": "ANSI,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE"
            }


            update_resp =
            client.databases.update_sql_mode(database_cluster_uuid="a7a8bas",
            body=req)
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/upgrade:
    put:
      operationId: databases_update_major_version
      summary: Upgrade Major Version for a Database
      description: >-
        To upgrade the major version of a database, send a PUT request to
        `/v2/databases/$DATABASE_ID/upgrade`, specifying the target version.

        A successful request will receive a 204 No Content status code with no
        body in response.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/version-2'
            example:
              version: '14'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"version":"14"}' \
              "https://api.digitalocean.com/v2/databases/9cdb64e5-61e4-4b30-b711-11ef66d84558/upgrade"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "version": "14"
            }


            update_resp =
            client.databases.update_major_version(database_cluster_uuid="a7a8bas",
            body=req)
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/topics:
    get:
      operationId: databases_list_kafka_topics
      summary: List Topics for a Kafka Cluster
      description: |
        To list all of a Kafka cluster's topics, send a GET request to
        `/v2/databases/$DATABASE_ID/topics`.

        The result will be a JSON object with a `topics` key.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/kafka_topics'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/topics"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                replicas, _, err := client.Databases.ListTopics(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", nil)
            }
      security:
        - bearer_auth:
            - database:read
    post:
      operationId: databases_create_kafka_topic
      summary: Create Topic for a Kafka Cluster
      description: |
        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.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/kafka_topic_create'
              required:
                - name
            example:
              name: customer-events
              partitions: 3
              replication: 2
              config:
                retention_bytes: -1
                retention_ms: 100000
      responses:
        '201':
          $ref: '#/components/responses/kafka_topic'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"customer-events", "partition_count":3, "replication_factor": 3, "config": {"retentionMS": 1000000}}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/topics"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &DatabaseCreateTopicRequest{
                  Name:              "events",
                  PartitionCount:    3,
                  ReplicationFactor: 2,
                  Config: &TopicConfig{
                    RetentionMS: 60000,
                  }
                },

                cluster, _, err := client.Databases.CreateTopic(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", createRequest)
            }
      security:
        - bearer_auth:
            - database:create
  /v2/databases/{database_cluster_uuid}/topics/{topic_name}:
    get:
      operationId: databases_get_kafka_topic
      summary: Get Topic for a Kafka Cluster
      description: >
        To retrieve a given topic by name from the set of a Kafka cluster's
        topics,

        send a GET request to `/v2/databases/$DATABASE_ID/topics/$TOPIC_NAME`.


        The result will be a JSON object with a `topic` key.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/kafka_topic_name'
      responses:
        '200':
          $ref: '#/components/responses/kafka_topic'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/topics/customer-events"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()
              
                topicName := "events"

                user, _, err := client.Databases.GetTopic(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", topicName)
            }
      security:
        - bearer_auth:
            - database:read
    put:
      operationId: databases_update_kafka_topic
      summary: Update Topic for a Kafka Cluster
      description: |
        To update a topic attached to a Kafka cluster, send a PUT request to
        `/v2/databases/$DATABASE_ID/topics/$TOPIC_NAME`.

        The result will be a JSON object with a `topic` key.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/kafka_topic_name'
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/kafka_topic_update'
            example:
              partitions: 3
              replication: 2
              config:
                retention_bytes: -1
                retention_ms: 100000
      responses:
        '200':
          $ref: '#/components/responses/kafka_topic'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"partition_count":3, "replication_factor": 3, "config": {"retentionMS": 1000000}}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/topics/customer-events"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                topicName := "events"
                updateRequest := &DatabaseUpdateTopicRequest{
                  PartitionCount:    3,
                  ReplicationFactor: 2,
                  Config: &TopicConfig{
                    RetentionMS: 60000,
                  },
                }

                _, err := client.Databases.UpdateTopic(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", topicName, updateRequest)
            }
      security:
        - bearer_auth:
            - database:update
    delete:
      operationId: databases_delete_kafka_topic
      summary: Delete Topic for a Kafka Cluster
      description: |
        To delete a single topic within a Kafka cluster, send a DELETE request
        to `/v2/databases/$DATABASE_ID/topics/$TOPIC_NAME`.

        A status of 204 will be given. This indicates that the request was
        processed successfully, but that no response body is needed.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/kafka_topic_name'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/topics/customer-events"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                topicName := "events"

                _, err := client.Databases.DeleteTopic(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", topicName)
            }
      security:
        - bearer_auth:
            - database:delete
  /v2/databases/{database_cluster_uuid}/logsink:
    get:
      operationId: databases_list_logsink
      summary: |
        List Logsinks for a Database Cluster
      description: |
        To list logsinks for a database cluster, send a GET request to
        `/v2/databases/$DATABASE_ID/logsink`.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '201':
          $ref: '#/components/responses/logsinks'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/logsink"
      security:
        - bearer_auth:
            - database:read
    post:
      operationId: databases_create_logsink
      summary: |
        Create Logsink for a Database Cluster
      description: |
        To create logsink for a database cluster, send a POST request to
        `/v2/databases/$DATABASE_ID/logsink`.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/logsink_create'
              required:
                - sink_name
                - sink_type
                - config
            examples:
              Create an opensearch logsink:
                value:
                  sink_name: logs-sink
                  sink_type: opensearch
                  config:
                    url: https://user:passwd@192.168.0.1:25060
                    index_prefix: opensearch-logs
                    index_days_max: 5
              Create an elasticsearch logsink:
                value:
                  sink_name: logs-sink
                  sink_type: elasticsearch
                  config:
                    url: https://user:passwd@192.168.0.1:25060
                    index_prefix: elasticsearch-logs
                    index_days_max: 5
              Create a rsyslog logsink:
                value:
                  sink_name: logs-sink
                  sink_type: rsyslog
                  config:
                    server: 192.168.0.1
                    port: 514
                    tls: false
                    format: rfc5424
      responses:
        '201':
          $ref: '#/components/responses/logsink'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"sink_name": "logsink", "sink_type": "rsyslog", "config": {"server": "192.168.10.1", "port": 514, "tls": false, "format": "rfc5424"}}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/logsink"
      security:
        - bearer_auth:
            - database:create
  /v2/databases/{database_cluster_uuid}/logsink/{logsink_id}:
    get:
      operationId: databases_get_logsink
      summary: |
        Get Logsink for a Database Cluster
      description: |
        To get a logsink for a database cluster, send a GET request to
        `/v2/databases/$DATABASE_ID/logsink/$LOGSINK_ID`.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/logsink_id'
      responses:
        '201':
          $ref: '#/components/responses/logsink'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/logsink/77b28fc8-19ff-11eb-8c9c-c68e24557488"
      security:
        - bearer_auth:
            - database:read
    put:
      operationId: databases_update_logsink
      summary: |
        Update Logsink for a Database Cluster
      description: |
        To update a logsink for a database cluster, send a PUT request to
        `/v2/databases/$DATABASE_ID/logsink/$LOGSINK_ID`.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/logsink_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/logsink_update'
            example:
              config:
                server: 192.168.0.1
                port: 514
                tls: false
                format: rfc3164
      responses:
        '200':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"config": {"server": "192.168.1.1", "port": 514, "tls": false, "format": "rfc3164"}}' \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/logsink/77b28fc8-19ff-11eb-8c9c-c68e24557488"
      security:
        - bearer_auth:
            - database:update
    delete:
      operationId: databases_delete_logsink
      summary: |
        Delete Logsink for a Database Cluster
      description: |
        To delete a logsink for a database cluster, send a DELETE request to
        `/v2/databases/$DATABASE_ID/logsink/$LOGSINK_ID`.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/logsink_id'
      responses:
        '200':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/logsink/77b28fc8-19ff-11eb-8c9c-c68e24557488"
      security:
        - bearer_auth:
            - database:delete
  /v2/databases/metrics/credentials:
    get:
      operationId: databases_get_cluster_metrics_credentials
      summary: Retrieve Database Clusters' Metrics Endpoint Credentials
      description: >-
        To show the credentials for all database clusters' metrics endpoints,
        send a GET request to `/v2/databases/metrics/credentials`. The result
        will be a JSON object with a `credentials` key.
      tags:
        - Databases
      responses:
        '200':
          $ref: '#/components/responses/database_metrics_auth'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/metrics/credentials"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                creds, _, _ := client.Databases.GetMetricsCredentials(ctx)
            }
      security:
        - bearer_auth:
            - database:update
    put:
      operationId: databases_update_cluster_metrics_credentials
      summary: Update Database Clusters' Metrics Endpoint Credentials
      description: >-
        To update the credentials for all database clusters' metrics endpoints,
        send a PUT request to `/v2/databases/metrics/credentials`. A successful
        request will receive a 204 No Content status code  with no body in
        response.
      tags:
        - Databases
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/database_metrics_credentials'
            example:
              credentials:
                basic_auth_username: new_username
                basic_auth_password: new_password
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"credentials": {"basic_auth_username": "new_username", "basic_auth_password": "new_password"}}'\
              "https://api.digitalocean.com/v2/databases/metrics/credentials"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, _ = client.Databases.UpdateMetricsCredentials(ctx, &godo.DatabaseUpdateMetricsCredentialsRequest{
                  Credentials: &godo.DatabaseMetricsCredentials{
                    BasicAuthUsername: "a_new_username",
                    BasicAuthPassword: "a_new_password",
                  },
                })
            }
      security:
        - bearer_auth:
            - database:update
  /v2/databases/{database_cluster_uuid}/indexes:
    get:
      operationId: databases_list_opeasearch_indexes
      summary: List Indexes for a OpenSearch Cluster
      description: |
        To list all of a OpenSearch cluster's indexes, send a GET request to
        `/v2/databases/$DATABASE_ID/indexes`.

        The result will be a JSON object with a `indexes` key.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
      responses:
        '200':
          $ref: '#/components/responses/opensearch_indexes'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/indexes"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                replicas, _, err := client.Databases.ListIndexes(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", nil)
            }
      security:
        - bearer_auth:
            - database:read
  /v2/databases/{database_cluster_uuid}/indexes/{index_name}:
    delete:
      operationId: databases_delete_opensearch_index
      summary: Delete Index for OpenSearch Cluster
      description: >
        To delete a single index within OpenSearch cluster, send a DELETE
        request

        to `/v2/databases/$DATABASE_ID/indexes/$INDEX_NAME`.


        A status of 204 will be given. This indicates that the request was

        processed successfully, but that no response body is needed.
      tags:
        - Databases
      parameters:
        - $ref: '#/components/parameters/database_cluster_uuid'
        - $ref: '#/components/parameters/opensearch_index_name'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/databases/9cc10173-e9ea-4176-9dbc-a4cee4c4ff30/indexes/sample-index"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                indexName := "sampe-index"

                _, err := client.Databases.DeleteIndex(ctx, "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", indexName)
            }
      security:
        - bearer_auth:
            - database:delete
  /v2/domains:
    get:
      operationId: domains_list
      summary: List All Domains
      description: >-
        To retrieve a list of all of the domains in your account, send a GET
        request to `/v2/domains`.
      tags:
        - Domains
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_domains_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/domains"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                  Page:    1,
                  PerPage: 200,
                }

            domains, _, err := client.Domains.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            domains = client.domains.all
            domains.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.domains.list()
      security:
        - bearer_auth:
            - domain:read
    post:
      operationId: domains_create
      summary: Create a New Domain
      description: >
        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.
      tags:
        - Domains
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/domain'
            example:
              name: example.com
      responses:
        '201':
          $ref: '#/components/responses/create_domain_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"example.com","ip_address":"1.2.3.4"}' \
              "https://api.digitalocean.com/v2/domains"
        - lang: Go
          source: |-
            import (
              "context"
              "os"

              "github.com/digitalocean/godo"
              )

            func main() {
              token := os.Getenv("DIGITALOCEAN_TOKEN")

              client := godo.NewFromToken(token)
              ctx := context.TODO()

              createRequest := &godo.DomainCreateRequest{
                Name:      "example.com",
                IPAddress: "1.2.3.4",
              }

              domain, _, err := client.Domains.Create(ctx, createRequest)

            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            domain = DropletKit::Domain.new(
              name: 'example.com',
              ip_address: '1.2.3.4'
            )
            client.domains.create(domain)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "example.com"
            }

            resp = client.domains.create(body=req)
      security:
        - bearer_auth:
            - domain:create
  /v2/domains/{domain_name}:
    get:
      operationId: domains_get
      summary: Retrieve an Existing Domain
      description: >-
        To get details about a specific domain, send a GET request to
        `/v2/domains/$DOMAIN_NAME`.
      tags:
        - Domains
      parameters:
        - $ref: '#/components/parameters/domain_name'
      responses:
        '200':
          $ref: '#/components/responses/existing_domain'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/domains/example.com"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                domain, _, err := client.Domains.Get(ctx, "example.com")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.domains.find(name: 'example.com')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.domains.get(domain_name="example.com")
      security:
        - bearer_auth:
            - domain:read
    delete:
      operationId: domains_delete
      summary: Delete a Domain
      description: |
        To delete a domain, send a DELETE request to `/v2/domains/$DOMAIN_NAME`.
      tags:
        - Domains
      parameters:
        - $ref: '#/components/parameters/domain_name'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/domains/example.com"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Domains.Delete(ctx, "example.com")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.domains.delete(name: 'example.com')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            delete_resp = client.domains.delete(domain_name="example.com")
      security:
        - bearer_auth:
            - domain:delete
  /v2/domains/{domain_name}/records:
    get:
      operationId: domains_list_records
      summary: List All Domain Records
      description: >+
        To get a listing of all records configured for a domain, send a GET
        request to `/v2/domains/$DOMAIN_NAME/records`.

        The list of records returned can be filtered by using the `name` and
        `type` query parameters. For example, to only include A records for a
        domain, send a GET request to `/v2/domains/$DOMAIN_NAME/records?type=A`.
        `name` must be a fully qualified record name. For example, to only
        include records matching `sub.example.com`, send a GET request to
        `/v2/domains/$DOMAIN_NAME/records?name=sub.example.com`. Both name and
        type may be used together.

      tags:
        - Domain Records
      parameters:
        - $ref: '#/components/parameters/domain_name'
        - $ref: '#/components/parameters/domain_name_query'
        - $ref: '#/components/parameters/domain_type_query'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_domain_records_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/domains/example.com/records"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                  Page:    1,
                  PerPage: 200,
                }

            domains, _, err := client.Domains.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            records = client.domain_records.all(for_domain: 'example.com')
            records.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.domains.list_records(domain_name="example.com")
      security:
        - bearer_auth:
            - domain:read
    post:
      operationId: domains_create_record
      summary: Create a New Domain Record
      description: >
        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](#tag/Domain-Records) for details regarding
        record

        types and their respective required attributes.
      tags:
        - Domain Records
      parameters:
        - $ref: '#/components/parameters/domain_name'
      requestBody:
        content:
          application/json:
            schema:
              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:
                propertyName: type
                mapping:
                  A: '#/components/schemas/domain_record_a'
                  AAAA: '#/components/schemas/domain_record_aaaa'
                  CAA: '#/components/schemas/domain_record_caa'
                  CNAME: '#/components/schemas/domain_record_cname'
                  MX: '#/components/schemas/domain_record_mx'
                  NS: '#/components/schemas/domain_record_ns'
                  SOA: '#/components/schemas/domain_record_soa'
                  SRV: '#/components/schemas/domain_record_srv'
                  TXT: '#/components/schemas/domain_record_txt'
            example:
              type: A
              name: www
              data: 162.10.66.0
              priority: null
              port: null
              ttl: 1800
              weight: null
              flags: null
              tag: null
      responses:
        '201':
          $ref: '#/components/responses/created_domain_record'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"A","name":"www","data":"162.10.66.0","priority":null,"port":null,"ttl":1800,"weight":null,"flags":null,"tag":null}' \
              "https://api.digitalocean.com/v2/domains/example.com/records"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.DomainRecordEditRequest{
                  Type: "A",
                  Name: "www",
                  Data: "1.2.3.4",
                }

                domainRecord, _, err := client.Domains.CreateRecord(ctx, "example.com", createRequest)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            record = DropletKit::DomainRecord.new(
              type: 'A',
              name: 'www',
              data: '162.10.66.0'
            )
            client.domain_records.create(record, for_domain: 'example.com')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "type": "A",
              "name": "www",
              "data": "162.10.66.0",
              "priority": None,
              "port": None,
              "ttl": 1800,
              "weight": None,
              "flags": None,
              "tag": None
            }


            resp = client.domains.create_record(domain_name="example.com",
            body=req)
      security:
        - bearer_auth:
            - domain:create
  /v2/domains/{domain_name}/records/{domain_record_id}:
    get:
      operationId: domains_get_record
      summary: Retrieve an Existing Domain Record
      description: >-
        To retrieve a specific domain record, send a GET request to
        `/v2/domains/$DOMAIN_NAME/records/$RECORD_ID`.
      tags:
        - Domain Records
      parameters:
        - $ref: '#/components/parameters/domain_name'
        - $ref: '#/components/parameters/domain_record_id'
      responses:
        '200':
          $ref: '#/components/responses/domain_record'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/domains/example.com/records/3352896"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                record, _, err := client.Domains.Record(ctx, "example.com", 3352896)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.domain_records.find(for_domain: 'example.com', id: 3352896)
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            get_resp = client.domains.get_record(domain_name="example.com",
            domain_record_id=3352896)
      security:
        - bearer_auth:
            - domain:read
    patch:
      operationId: domains_patch_record
      summary: Update a Domain Record
      description: >
        To update an existing record, send a PATCH request to

        `/v2/domains/$DOMAIN_NAME/records/$DOMAIN_RECORD_ID`. Any attribute
        valid for

        the record type can be set to a new value for the record.


        See the [attribute table](#tag/Domain-Records) for details regarding
        record

        types and their respective attributes.
      tags:
        - Domain Records
      parameters:
        - $ref: '#/components/parameters/domain_name'
        - $ref: '#/components/parameters/domain_record_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/domain_record'
            example:
              name: blog
              type: A
      responses:
        '200':
          $ref: '#/components/responses/domain_record'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PATCH \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"blog","type":"A"}' \
              "https://api.digitalocean.com/v2/domains/example.com/records/3352896"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "name": "blog",
              "type": "A"
            }


            resp = client.domains.patch_record(domain_name="example.com",
            domain_record_id=2432342, body=req)
      security:
        - bearer_auth:
            - domain:update
    put:
      operationId: domains_update_record
      summary: Update a Domain Record
      description: >
        To update an existing record, send a PUT request to

        `/v2/domains/$DOMAIN_NAME/records/$DOMAIN_RECORD_ID`. Any attribute
        valid for

        the record type can be set to a new value for the record.


        See the [attribute table](#tag/Domain-Records) for details regarding
        record

        types and their respective attributes.
      tags:
        - Domain Records
      parameters:
        - $ref: '#/components/parameters/domain_name'
        - $ref: '#/components/parameters/domain_record_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/domain_record'
            example:
              name: blog
              type: CNAME
      responses:
        '200':
          $ref: '#/components/responses/domain_record'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"blog"}' \
              "https://api.digitalocean.com/v2/domains/example.com/records/3352896"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                editRequest := &godo.DomainRecordEditRequest{
                  Type: "A",
                  Name: "blog",
                }

                domainRecord, _, err := client.Domains.EditRecord(ctx, "example.com", 3352896, editRequest)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            record = DropletKit::DomainRecord.new(name: 'blog')

            client.domain_records.update(record, for_domain: 'example.com', id:
            3352896)
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "name": "blog",
              "type": "CNAME"
            }


            resp = client.domains.update_record(domain_name="example.com",
            domain_record_id=2432342, body=req)
      security:
        - bearer_auth:
            - domain:update
    delete:
      operationId: domains_delete_record
      summary: Delete a Domain Record
      description: |
        To delete a record for a domain, send a DELETE request to
        `/v2/domains/$DOMAIN_NAME/records/$DOMAIN_RECORD_ID`.

        The record will be deleted and the response status will be a 204. This
        indicates a successful request with no body returned.
      tags:
        - Domain Records
      parameters:
        - $ref: '#/components/parameters/domain_name'
        - $ref: '#/components/parameters/domain_record_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/domains/example.com/records/3352896"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Domains.DeleteRecord(ctx, "example.com", 3352896)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.domain_records.delete(for_domain: 'example.com', id: 3352896)
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "name": "example.com"
            }


            resp = client.domains.delete_record(domain_name="example.com",
            domain_record_id=3352896)
      security:
        - bearer_auth:
            - domain:delete
  /v2/droplets:
    get:
      operationId: droplets_list
      summary: List All Droplets
      description: >
        To list all Droplets in your account, send a GET request to
        `/v2/droplets`.


        The response body will be a JSON object with a key of `droplets`. This
        will be

        set to an array containing objects each representing a Droplet. These
        will

        contain the standard Droplet attributes.


        ### Filtering Results by Tag


        It's possible to request filtered results by including certain query
        parameters.

        To only list Droplets assigned to a specific tag, include the `tag_name`
        query

        parameter set to the name of the tag in your GET request. For example,

        `/v2/droplets?tag_name=$TAG_NAME`.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/droplet_tag_name'
        - $ref: '#/components/parameters/droplet_name'
      responses:
        '200':
          $ref: '#/components/responses/all_droplets'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets?page=1&per_page=1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                droplets, _, err := client.Droplets.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            droplets = client.droplets.all
            droplets.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.droplets.list()
      security:
        - bearer_auth:
            - droplet:read
    post:
      operationId: droplets_create
      summary: Create a New Droplet
      description: >
        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.
      tags:
        - Droplets
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/droplet_single_create'
                - $ref: '#/components/schemas/droplet_multi_create'
            examples:
              Single Droplet Create Request:
                $ref: '#/components/examples/droplet_create_request'
              Multiple Droplet Create Request:
                $ref: '#/components/examples/droplet_multi_create_request'
      responses:
        '202':
          $ref: '#/components/responses/droplet_create'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"example.com","region":"nyc3","size":"s-1vcpu-1gb","image":"ubuntu-20-04-x64","ssh_keys":[289794,"3b:16:e4:bf:8b:00:8b:b8:59:8c:a9:d3:f0:19:fa:45"],"backups":true,"ipv6":true,"monitoring":true,"tags":["env:prod","web"],"user_data":"#cloud-config\nruncmd:\n  - touch /test.txt\n","vpc_uuid":"760e09ef-dc84-11e8-981e-3cfdfeaae000"}' \
              "https://api.digitalocean.com/v2/droplets"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.DropletCreateRequest{
                    Name:   "example.com",
                    Region: "nyc3",
                    Size:   "s-1vcpu-1gb",
                    Image: godo.DropletCreateImage{
                        Slug: "ubuntu-20-04-x64",
                    },
                    SSHKeys: []godo.DropletCreateSSHKey{
                        godo.DropletCreateSSHKey{ID: 289794},
                        godo.DropletCreateSSHKey{Fingerprint: "3b:16:e4:bf:8b:00:8b:b8:59:8c:a9:d3:f0:19:fa:45"}
                    },
                    Backups: true,
                    IPv6: true,
                    Monitoring: true,
                    Tags: []string{"env:prod","web"},
                    UserData: "#cloud-config\nruncmd:\n  - touch /test.txt\n",
                    VPCUUID: "760e09ef-dc84-11e8-981e-3cfdfeaae000",
                }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            droplet = DropletKit::Droplet.new(
              name: 'example.com',
              region: 'nyc3',
              size: 's-1vcpu-1gb',
              image: 'ubuntu-20-04-x64',
              ssh_keys: [289794,"3b:16:e4:bf:8b:00:8b:b8:59:8c:a9:d3:f0:19:fa:45"],
              backups: true,
              ipv6: true,
              monitoring: true,
              tags: ["env:prod","web"],
              user_data: "#cloud-config\nruncmd:\n  - touch /test.txt\n",
              vpc_uuid: "760e09ef-dc84-11e8-981e-3cfdfeaae000",
            )
            client.droplets.create(droplet)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "example.com",
              "region": "nyc3",
              "size": "s-1vcpu-1gb",
              "image": "ubuntu-20-04-x64",
              "ssh_keys": [
                289794,
                "3b:16:e4:bf:8b:00:8b:b8:59:8c:a9:d3:f0:19:fa:45"
              ],
              "backups": True,
              "ipv6": True,
              "monitoring": True,
              "tags": [
                "env:prod",
                "web"
              ],
              "user_data": "#cloud-config\nruncmd:\n  - touch /test.txt\n",
              "vpc_uuid": "760e09ef-dc84-11e8-981e-3cfdfeaae000"
            }

            resp = client.droplets.create(body=req)
      security:
        - bearer_auth:
            - droplet:create
    delete:
      operationId: droplets_destroy_byTag
      summary: Deleting Droplets by Tag
      description: >
        To delete **all** Droplets assigned to a specific tag, include the
        `tag_name`

        query parameter set to the name of the tag in your DELETE request. For

        example,  `/v2/droplets?tag_name=$TAG_NAME`.


        A successful request will receive a 204 status code with no body in
        response.

        This indicates that the request was processed successfully.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_delete_tag_name'
      responses:
        '204':
          $ref: '#/components/responses/no_content_with_content_type'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets?tag_name=awesome"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                client.Droplets.DeleteByTag(ctx, "awesome") 
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.droplets.delete_for_tag(tag_name: awesome)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.droplets.destroy_by_tag(tag_name="production")
      security:
        - bearer_auth:
            - droplet:delete
  /v2/droplets/{droplet_id}:
    get:
      operationId: droplets_get
      summary: Retrieve an Existing Droplet
      description: |
        To show information about an individual Droplet, send a GET request to
        `/v2/droplets/$DROPLET_ID`.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
      responses:
        '200':
          $ref: '#/components/responses/existing_droplet'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3164494"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                droplet, _, err := client.Droplets.Get(ctx, 3164494)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.droplets.find(id: 3164494)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.droplets.get(droplet_id=594828)
      security:
        - bearer_auth:
            - droplet:read
    delete:
      operationId: droplets_destroy
      summary: Delete an Existing Droplet
      description: >
        To delete a Droplet, send a DELETE request to
        `/v2/droplets/$DROPLET_ID`.


        A successful request will receive a 204 status code with no body in
        response.

        This indicates that the request was processed successfully.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content_with_content_type'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3164494"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Droplets.Delete(ctx, 3164494)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.droplets.delete(id: 3164494)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.droplets.destroy(droplet_id=553456)
      security:
        - bearer_auth:
            - droplet:delete
  /v2/droplets/{droplet_id}/backups:
    get:
      operationId: droplets_list_backups
      summary: List Backups for a Droplet
      description: >
        To retrieve any backups associated with a Droplet, send a GET request to

        `/v2/droplets/$DROPLET_ID/backups`.


        You will get back a JSON object that has a `backups` key. This will be
        set to

        an array of backup objects, each of which contain the standard

        Droplet backup attributes.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_droplet_backups'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3067509/backups"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                backups, _, err := client.Droplets.Backups(ctx, 3164494, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            backups = client.droplets.backups(id: 3164494)
            backups.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.droplets.list_backups(droplet_id=594828)
      security:
        - bearer_auth:
            - droplet:read
  /v2/droplets/{droplet_id}/snapshots:
    get:
      operationId: droplets_list_snapshots
      summary: List Snapshots for a Droplet
      description: >
        To retrieve the snapshots that have been created from a Droplet, send a
        GET

        request to `/v2/droplets/$DROPLET_ID/snapshots`.


        You will get back a JSON object that has a `snapshots` key. This will be
        set

        to an array of snapshot objects, each of which contain the standard
        Droplet

        snapshot attributes.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_droplet_snapshots'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3164494/snapshots?page=1&per_page=1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                snapshots, _, err := client.Droplets.Snapshots(ctx, 3164494, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            snapshots = client.droplets.snapshots(id: 3164494)
            snapshots.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.droplets.list_snapshots(droplet_id=3929391)
      security:
        - bearer_auth:
            - droplet:read
  /v2/droplets/{droplet_id}/actions:
    get:
      operationId: dropletActions_list
      summary: List Actions for a Droplet
      description: >
        To retrieve a list of all actions that have been executed for a Droplet,
        send

        a GET request to `/v2/droplets/$DROPLET_ID/actions`.


        The results will be returned as a JSON object with an `actions` key.
        This will

        be set to an array filled with `action` objects containing the standard

        `action` attributes.
      tags:
        - Droplet Actions
      parameters:
        - $ref: '#/components/parameters/droplet_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_droplet_actions'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3164494/actions?page=1&per_page=1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                actions, _, err := client.Droplets.Actions(ctx, 3164494, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            actions = client.droplets.actions(id: 3164494)
            actions.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "blog",
              "type": "CNAME"
            }

            resp = client.droplet_actions.list(droplet_id=3164494)
      security:
        - bearer_auth:
            - droplet:read
    post:
      operationId: dropletActions_post
      summary: Initiate a Droplet Action
      description: >
        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. |
      tags:
        - Droplet Actions
      parameters:
        - $ref: '#/components/parameters/droplet_id'
      requestBody:
        description: >
          The `type` attribute set in the request body will specify the  action
          that

          will be taken on the Droplet. Some actions will require additional

          attributes to be set as well.
        content:
          application/json:
            schema:
              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:
                propertyName: type
                mapping:
                  enable_backups: '#/components/schemas/droplet_action'
                  disable_backups: '#/components/schemas/droplet_action'
                  reboot: '#/components/schemas/droplet_action'
                  power_cycle: '#/components/schemas/droplet_action'
                  shutdown: '#/components/schemas/droplet_action'
                  power_off: '#/components/schemas/droplet_action'
                  power_on: '#/components/schemas/droplet_action'
                  password_reset: '#/components/schemas/droplet_action'
                  restore: '#/components/schemas/droplet_action_restore'
                  resize: '#/components/schemas/droplet_action_resize'
                  rebuild: '#/components/schemas/droplet_action_rebuild'
                  rename: '#/components/schemas/droplet_action_rename'
                  change_kernel: '#/components/schemas/droplet_action_change_kernel'
                  enable_ipv6: '#/components/schemas/droplet_action'
                  snapshot: '#/components/schemas/droplet_action_snapshot'
      responses:
        '201':
          $ref: '#/components/responses/droplet_action'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            # Enable Backups
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"enable_backups"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Disable Backups
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"disable_backups"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Reboot a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"reboot"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Power cycle a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"power_cycle"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Shutdown and Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"shutdown"}' \
              "https://api.digitalocean.com/v2/droplets/3067649/actions"

            # Power off a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"power_off"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Power on a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"power_on"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Restore a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"restore", "image": 12389723 }' \
              "https://api.digitalocean.com/v2/droplets/3067649/actions"

            # Password Reset a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"password_reset"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Resize a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"resize","size":"1gb"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Rebuild a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"rebuild","image":"ubuntu-16-04-x64"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Rename a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"rename","name":"nifty-new-name"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Change the Kernel
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"change_kernel","kernel":991}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Enable IPv6
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"enable_ipv6"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Enable Private Networking
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"enable_private_networking"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Snapshot a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"snapshot","name":"Nifty New Snapshot"}' \
              "https://api.digitalocean.com/v2/droplets/3164450/actions"

            # Acting on Tagged Droplets
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"enable_backups"}' \
              "https://api.digitalocean.com/v2/droplets/actions?tag_name=awesome"

            # Retrieve a Droplet Action
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3164444/actions/36804807"
        - lang: Go
          source: >-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )


            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()
            // Enable Backups
                action, _, err := client.DropletActions.EnableBackups(ctx, 3164450)

            // Disable Backups

            //  action, _, err := client.DropletActions.DisableBackups(ctx,
            3164450)


            // Reboot a Droplet

            //  action, _, err := client.DropletActions.Reboot(ctx, 3164450)


            // Power Cycle a Droplet

            //  action, _, err := client.DropletActions.PowerCycle(ctx, 3164450)


            // Shutdown a Droplet

            //  action, _, err := client.DropletActions.Shutdown(ctx, 3067649)


            // Power Off a Droplet

            //  action, _, err := client.DropletActions.PowerOff(ctx, 3164450)


            // Power On a Droplet

            //  action, _, err := client.DropletActions.PowerOn(ctx, 3164450)


            // Restore a Droplet

            //  action, _, err := client.DropletActions.Restore(ctx, 3164449,
            12389723)


            // Password Reset a Droplet

            //  action, _, err := client.DropletActions.PasswordReset(ctx,
            3164450)


            // Resize a Droplet

            //  action, _, err := client.DropletActions.Resize(ctx, 3164450,
            "1gb", true)


            // Rebuild a Droplet

            //  action, _, err := client.DropletActions.RebuildByImageSlug(ctx,
            3164450, "ubuntu-16-04-x64")


            // Rename a Droplet

            //  action, _, err := client.DropletActions.Rename(ctx, 3164450,
            "nifty-new-name")


            // Change the Kernel

            //  action, _, err := client.DropletActions.ChangeKernel(ctx,
            3164450, 991)


            // Enable IPv6

            //  action, _, err := client.DropletActions.EnableIPv6(ctx, 3164450)


            // Enable Private Networking

            //  action, _, err :=
            client.DropletActions.EnablePrivateNetworking(ctx, 3164450)


            // Snapshot a Droplet

            //  action, _, err := client.DropletActions.Snapshot(ctx, 3164450,
            "Nifty New Snapshot")


            // Retrieve a Droplet Action

            //  action, _, err := client.DropletActions.Get(ctx, 3164450,
            36804807)


            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            # Enable Backups

            client.droplet_actions.enable_backups(droplet_id: 3164450)


            # Disable Backups

            # client.droplet_actions.disable_backups(droplet_id: 3164450)


            # Reboot a Droplet

            # client.droplet_actions.reboot(droplet_id: 3164450)


            # Power Cycle a Droplet

            # client.droplet_actions.power_cycle(droplet_id: 3164450)


            # Shutdown a Droplet

            # client.droplet_actions.shutdown(droplet_id: 3067649)


            # Power Off a Droplet

            # client.droplet_actions.power_off(droplet_id: 3164450)


            # Power On a Droplet

            # client.droplet_actions.power_on(droplet_id: 3164450)


            # Restore a Droplet

            # client.droplet_actions.restore(droplet_id: 3067649, image:
            12389723)


            # Password Reset a Droplet

            # client.droplet_actions.password_reset(droplet_id: 3164450)


            # Resize a Droplet

            # client.droplet_actions.resize(droplet_id: 3164450, size: '1gb')


            # Rebuild a Droplet

            # client.droplet_actions.rebuild(droplet_id: 3164450, image:
            'ubuntu-16-04-x64')


            # Rename a Droplet

            # client.droplet_actions.rename(droplet_id: 3164450, name:
            'nifty-new-name')


            # Change the Kernel

            # client.droplet_actions.change_kernel(droplet_id: 3164450, kernel:
            991)


            # Enable IPv6

            # client.droplet_actions.enable_ipv6(droplet_id: 3164450)


            # Enable Private Networking

            # client.droplet_actions.enable_private_networking(droplet_id:
            3164450)


            # Snapshot a Droplet

            # client.droplet_actions.snapshot(droplet_id: 3164450, name: 'Nifty
            New Snapshot')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            # enable back ups example
            req = {
              "type": "enable_backups"
            }

            resp = client.droplet_actions.post(droplet_id=346652, body=req)
      security:
        - bearer_auth:
            - droplet:update
  /v2/droplets/actions:
    post:
      operationId: dropletActions_post_byTag
      summary: Acting on Tagged Droplets
      description: >
        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`
      tags:
        - Droplet Actions
      parameters:
        - $ref: '#/components/parameters/droplet_tag_name'
      requestBody:
        description: >
          The `type` attribute set in the request body will specify the  action
          that

          will be taken on the Droplet. Some actions will require additional

          attributes to be set as well.
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/droplet_action'
                - $ref: '#/components/schemas/droplet_action_snapshot'
              discriminator:
                propertyName: type
                mapping:
                  enable_backups: '#/components/schemas/droplet_action'
                  disable_backups: '#/components/schemas/droplet_action'
                  power_cycle: '#/components/schemas/droplet_action'
                  shutdown: '#/components/schemas/droplet_action'
                  power_off: '#/components/schemas/droplet_action'
                  power_on: '#/components/schemas/droplet_action'
                  enable_ipv6: '#/components/schemas/droplet_action'
                  snapshot: '#/components/schemas/droplet_action_snapshot'
      responses:
        '201':
          $ref: '#/components/responses/droplet_actions_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"enable_backups"}' \
              "https://api.digitalocean.com/v2/droplets/actions?tag_name=awesome"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                action, _, err := client.DropletActions.PowerOffByTag(ctx, "awesome")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.droplet_actions.power_off_for_tag(tag: 'awesome')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {

            "type": "enable_backups"

            }


            resp =
            client.droplet_actions.post_by_tag(tag_name="production",body=req)
      security:
        - bearer_auth:
            - droplet:update
  /v2/droplets/{droplet_id}/actions/{action_id}:
    get:
      operationId: dropletActions_get
      summary: Retrieve a Droplet Action
      description: >
        To retrieve a Droplet action, send a GET request to

        `/v2/droplets/$DROPLET_ID/actions/$ACTION_ID`.


        The response will be a JSON object with a key called `action`. The value
        will

        be a Droplet action object.
      tags:
        - Droplet Actions
      parameters:
        - $ref: '#/components/parameters/droplet_id'
        - $ref: '#/components/parameters/action_id'
      responses:
        '200':
          $ref: '#/components/responses/action'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3164444/actions/36804807"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                action, _, err := client.DropletActions.Get(ctx, 3164450, 36804807)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.droplet_actions.find(droplet_id: 3164444, id: 36804807)
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp = client.droplet_actions.get(droplet_id=3934132,
            action_id=2432342)
      security:
        - bearer_auth:
            - droplet:read
  /v2/droplets/{droplet_id}/kernels:
    get:
      operationId: droplets_list_kernels
      summary: List All Available Kernels for a Droplet
      description: >
        To retrieve a list of all kernels available to a Droplet, send a GET
        request

        to `/v2/droplets/$DROPLET_ID/kernels`


        The response will be a JSON object that has a key called `kernels`. This
        will

        be set to an array of `kernel` objects, each of which contain the
        standard

        `kernel` attributes.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_kernels'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3164494/kernels?page=1&per_page=1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                kernels, _, err := client.Droplets.Kernels(ctx, 3164494, opt) 
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            kernels = client.droplets.kernels(id: 3164494)
            kernels.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.droplets.list_kernels(droplet_id=594828)
      security:
        - bearer_auth:
            - droplet:read
  /v2/droplets/{droplet_id}/firewalls:
    get:
      operationId: droplets_list_firewalls
      summary: List all Firewalls Applied to a Droplet
      description: >
        To retrieve a list of all firewalls available to a Droplet, send a GET
        request

        to `/v2/droplets/$DROPLET_ID/firewalls`


        The response will be a JSON object that has a key called `firewalls`.
        This will

        be set to an array of `firewall` objects, each of which contain the
        standard

        `firewall` attributes.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_firewalls'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      security:
        - bearer_auth:
            - firewall:read
  /v2/droplets/{droplet_id}/neighbors:
    get:
      operationId: droplets_list_neighbors
      summary: List Neighbors for a Droplet
      description: >
        To retrieve a list of any "neighbors" (i.e. Droplets that are co-located
        on

        the same physical hardware) for a specific Droplet, send a GET request
        to

        `/v2/droplets/$DROPLET_ID/neighbors`.


        The results will be returned as a JSON object with a key of `droplets`.
        This

        will be set to an array containing objects representing any other
        Droplets

        that share the same physical hardware. An empty array indicates that the

        Droplet is not co-located any other Droplets associated with your
        account.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
      responses:
        '200':
          $ref: '#/components/responses/neighbor_droplets'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3164494/neighbors"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.droplets.list_neighbors(droplet_id=594828)
      security:
        - bearer_auth:
            - droplet:read
  /v2/droplets/{droplet_id}/destroy_with_associated_resources:
    get:
      operationId: droplets_list_associatedResources
      summary: List Associated Resources for a Droplet
      description: >
        To list the associated billable resources that can be destroyed along
        with a

        Droplet, send a GET request to the

        `/v2/droplets/$DROPLET_ID/destroy_with_associated_resources` endpoint.


        The response will be a JSON object containing `snapshots`, `volumes`,
        and

        `volume_snapshots` keys. Each will be set to an array of objects
        containing

        information about the associated resources.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
      responses:
        '200':
          $ref: '#/components/responses/associated_resources_list'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3164494/destroy_with_associated_resources"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.droplets.list_associated_resources(droplet_id=594828)
      security:
        - bearer_auth:
            - droplet:read
  /v2/droplets/{droplet_id}/destroy_with_associated_resources/selective:
    delete:
      operationId: droplets_destroy_withAssociatedResourcesSelective
      summary: Selectively Destroy a Droplet and its Associated Resources
      description: >
        To destroy a Droplet along with a sub-set of its associated resources,
        send a

        DELETE request to the
        `/v2/droplets/$DROPLET_ID/destroy_with_associated_resources/selective`

        endpoint. The JSON body of the request should include `reserved_ips`,
        `snapshots`, `volumes`,

        or `volume_snapshots` keys each set to an array of IDs for the
        associated

        resources to be destroyed. The IDs can be found by querying the
        Droplet's

        associated resources. Any associated resource not included in the
        request

        will remain and continue to accrue changes on your account.


        A successful response will include a 202 response code and no content.
        Use

        the status endpoint to check on the success or failure of the
        destruction of

        the individual resources.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/selective_destroy_associated_resource'
      responses:
        '202':
          $ref: '#/components/responses/accepted'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"reserved_ips":["6186916"],"snapshots": ["61486916"],"volumes": ["ba49449a-7435-11ea-b89e-0a58ac14480f"],"volume_snapshots": ["edb0478d-7436-11ea-86e6-0a58ac144b91"]}' \
              "https://api.digitalocean.com/v2/droplets/187000742/destroy_with_associated_resources/selective"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.droplets.destroy_with_associated_resources_selective(droplet_id=524512)
      security:
        - bearer_auth:
            - droplet:delete
  /v2/droplets/{droplet_id}/destroy_with_associated_resources/dangerous:
    delete:
      operationId: droplets_destroy_withAssociatedResourcesDangerous
      summary: Destroy a Droplet and All of its Associated Resources (Dangerous)
      description: >
        To destroy a Droplet along with all of its associated resources, send a
        DELETE

        request to the
        `/v2/droplets/$DROPLET_ID/destroy_with_associated_resources/dangerous`

        endpoint. The headers of this request must include an `X-Dangerous` key
        set to

        `true`. To preview which resources will be destroyed, first query the

        Droplet's associated resources. This operation _can not_ be reverse and
        should

        be used with caution.


        A successful response will include a 202 response code and no content.
        Use the

        status endpoint to check on the success or failure of the destruction of
        the

        individual resources.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
        - $ref: '#/components/parameters/x_dangerous'
      responses:
        '202':
          $ref: '#/components/responses/accepted'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE -H "X-Dangerous: true" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/187000742/destroy_with_associated_resources/dangerous"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.droplets.destroy_with_associated_resources_dangerous(droplet_id=524512)
      security:
        - bearer_auth:
            - droplet:delete
  /v2/droplets/{droplet_id}/destroy_with_associated_resources/status:
    get:
      operationId: droplets_get_DestroyAssociatedResourcesStatus
      summary: Check Status of a Droplet Destroy with Associated Resources Request
      description: >
        To check on the status of a request to destroy a Droplet with its
        associated

        resources, send a GET request to the

        `/v2/droplets/$DROPLET_ID/destroy_with_associated_resources/status`
        endpoint.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
      responses:
        '200':
          $ref: '#/components/responses/associated_resources_status'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3164494/destroy_with_associated_resources/status"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.droplets.get_destroy_associated_resources_status(droplet_id=5624512)
      security:
        - bearer_auth:
            - droplet:read
  /v2/droplets/{droplet_id}/destroy_with_associated_resources/retry:
    post:
      operationId: droplets_destroy_retryWithAssociatedResources
      summary: Retry a Droplet Destroy with Associated Resources Request
      description: >
        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.
      tags:
        - Droplets
      parameters:
        - $ref: '#/components/parameters/droplet_id'
      responses:
        '202':
          $ref: '#/components/responses/accepted'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/conflict'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/droplets/3164494/destroy_with_associated_resources/retry"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.droplets.destroy_retry_with_associated_resources(droplet_id=524512)
      security:
        - bearer_auth:
            - droplet:delete
  /v2/firewalls:
    get:
      operationId: firewalls_list
      summary: List All Firewalls
      description: >-
        To list all of the firewalls available on your account, send a GET
        request to `/v2/firewalls`.
      tags:
        - Firewalls
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/list_firewalls_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/firewalls"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                firewalls, _, err := client.Firewalls.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            firewalls = client.firewalls.all
            firewalls.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.firewalls.list()
      security:
        - bearer_auth:
            - firewall:read
    post:
      operationId: firewalls_create
      summary: Create a New Firewall
      description: >
        To create a new firewall, send a POST request to `/v2/firewalls`. The
        request

        must contain at least one inbound or outbound access rule.
      tags:
        - Firewalls
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/firewall'
                - required:
                    - name
                - anyOf:
                    - title: Inbound Rules
                      required:
                        - inbound_rules
                    - title: Outbound Rules
                      required:
                        - outbound_rules
            example:
              name: firewall
              inbound_rules:
                - protocol: tcp
                  ports: '80'
                  sources:
                    load_balancer_uids:
                      - 4de7ac8b-495b-4884-9a69-1050c6793cd6
                - protocol: tcp
                  ports: '22'
                  sources:
                    tags:
                      - gateway
                    addresses:
                      - 18.0.0.0/8
              outbound_rules:
                - protocol: tcp
                  ports: '80'
                  destinations:
                    addresses:
                      - 0.0.0.0/0
                      - '::/0'
              droplet_ids:
                - 8043964
      responses:
        '202':
          $ref: '#/components/responses/create_firewall_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"firewall","inbound_rules":[{"protocol":"tcp","ports":"80","sources":{"load_balancer_uids": ["4de7ac8b-495b-4884-9a69-1050c6793cd6"]}},{"protocol": "tcp","ports": "22","sources":{"tags": ["gateway"],"addresses": ["18.0.0.0/8"]}}],"outbound_rules":[{"protocol":"tcp","ports":"80","destinations":{"addresses":["0.0.0.0/0","::/0"]}}],"droplet_ids":[8043964]}' \
              "https://api.digitalocean.com/v2/firewalls"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.FirewallRequest{
                    Name: 'firewall',
                    InboundRules: []godo.InboundRule{
                        {
                            Protocol: 'tcp',
                            PortRange: '80',
                            Sources: &godo.Sources{
                                LoadBalancerUIDs: []string{'4de7ac8b-495b-4884-9a69-1050c6793cd6'},
                            },
                        },
                        {
                            Protocol:  'tcp',
                            PortRange: '22',
                            Sources: &godo.Sources{
                                Addresses: []string{'18.0.0.0/8'},
                                Tags: []string{'gateway'},
                            },
                        },
                    },
                    OutboundRules: []godo.OutboundRule{
                        {
                            Protocol: 'tcp',
                            PortRange: '80',
                            Destinations: &godo.Destinations{
                                Addresses: []string{'0.0.0.0/0', '::/0'},
                            },
                        },
                    },
                    DropletIDs: []int{8043964},
                }

                firewall, req, err := client.Firewalls.Create(ctx, createRequest)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            firewall = DropletKit::Firewall.new(
              name: 'firewall',
              inbound_rules: [
                DropletKit::FirewallInboundRule.new(
                  protocol: 'tcp',
                  ports: '80',
                  sources: {
                    load_balancer_uids: ['4de7ac8b-495b-4884-9a69-1050c6793cd6']
                  }
                ),
                DropletKit::FirewallInboundRule.new(
                  protocol: 'tcp',
                  ports: '22',
                  sources: {
                    tags: ['gateway'],
                    addresses: ['18.0.0.0/8']
                  }
                )
              ],
              outbound_rules: [
                DropletKit::FirewallOutboundRule.new(
                  protocol: 'tcp',
                  ports: '80',
                  destinations: {
                    addresses: ['0.0.0.0/0', '::/0'],
                  }
                )
              ],
              droplet_ids: [8043964]
            )

            client.firewalls.create(firewall)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "firewall",
              "inbound_rules": [
                {
                  "protocol": "tcp",
                  "ports": "80",
                  "sources": {
                    "load_balancer_uids": [
                      "4de7ac8b-495b-4884-9a69-1050c6793cd6"
                    ]
                  }
                },
                {
                  "protocol": "tcp",
                  "ports": "22",
                  "sources": {
                    "tags": [
                      "gateway"
                    ],
                    "addresses": [
                      "18.0.0.0/8"
                    ]
                  }
                }
              ],
              "outbound_rules": [
                {
                  "protocol": "tcp",
                  "ports": "80",
                  "destinations": {
                    "addresses": [
                      "0.0.0.0/0",
                      "::/0"
                    ]
                  }
                }
              ],
              "droplet_ids": [
                8043964
              ]
            }

            resp = client.firewalls.create(body=req)
      security:
        - bearer_auth:
            - firewall:create
  /v2/firewalls/{firewall_id}:
    get:
      operationId: firewalls_get
      summary: Retrieve an Existing Firewall
      description: >-
        To show information about an existing firewall, send a GET request to
        `/v2/firewalls/$FIREWALL_ID`.
      tags:
        - Firewalls
      parameters:
        - $ref: '#/components/parameters/firewall_id'
      responses:
        '200':
          $ref: '#/components/responses/get_firewall_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/firewalls/bb4b2611-3d72-467b-8602-280330ecd65c"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                firewall, _, err := client.Firewalls.Get(ctx, 'bb4b2611-3d72-467b-8602-280330ecd65c')
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.firewalls.find(id: 'bb4b2611-3d72-467b-8602-280330ecd65c')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.firewalls.get(firewall_id= "as9di9d")
      security:
        - bearer_auth:
            - firewall:read
    put:
      operationId: firewalls_update
      summary: Update a Firewall
      description: >
        To update the configuration of an existing firewall, send a PUT request
        to

        `/v2/firewalls/$FIREWALL_ID`. The request should contain a full
        representation

        of the firewall including existing attributes. **Note that any
        attributes that

        are not provided will be reset to their default values.**
      tags:
        - Firewalls
      parameters:
        - $ref: '#/components/parameters/firewall_id'
      requestBody:
        content:
          application/json:
            schema:
              required:
                - name
              allOf:
                - $ref: '#/components/schemas/firewall'
                - anyOf:
                    - title: Inbound Rules
                      required:
                        - inbound_rules
                    - title: Outbound Rules
                      required:
                        - outbound_rules
            example:
              name: frontend-firewall
              inbound_rules:
                - protocol: tcp
                  ports: '8080'
                  sources:
                    load_balancer_uids:
                      - 4de7ac8b-495b-4884-9a69-1050c6793cd6
                - protocol: tcp
                  ports: '22'
                  sources:
                    tags:
                      - gateway
                    addresses:
                      - 18.0.0.0/8
              outbound_rules:
                - protocol: tcp
                  ports: '8080'
                  destinations:
                    addresses:
                      - 0.0.0.0/0
                      - '::/0'
              droplet_ids:
                - 8043964
              tags:
                - frontend
      responses:
        '200':
          $ref: '#/components/responses/put_firewall_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"firewall","inbound_rules":[{"protocol":"tcp","ports":"8080","sources":{"load_balancer_uids": ["4de7ac8b-495b-4884-9a69-1050c6793cd6"]}},{"protocol": "tcp","ports": "22","sources":{"tags": ["gateway"],"addresses": ["18.0.0.0/8"]}}],"outbound_rules":[{"protocol":"tcp","ports":"8080","destinations":{"addresses":["0.0.0.0/0","::/0"]}}],"droplet_ids":[8043964],"tags":["frontend"]}' \
              "https://api.digitalocean.com/v2/firewalls/bb4b2611-3d72-467b-8602-280330ecd65c"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                updateRequest := &godo.FirewallRequest{
                    Name: 'firewall',
                    InboundRules: []godo.InboundRule{
                        {
                            Protocol: 'tcp',
                            PortRange: '8080',
                            Sources: &godo.Sources{
                                LoadBalancerUIDs: []string{'4de7ac8b-495b-4884-9a69-1050c6793cd6'},
                            },
                        },
                        {
                            Protocol:  'tcp',
                            PortRange: '22',
                            Sources: &godo.Sources{
                                Addresses: []string{'18.0.0.0/8'},
                                Tags: []string{'gateway'},
                            },
                        },
                    },
                    OutboundRules: []godo.OutboundRule{
                        {
                            Protocol: 'tcp',
                            PortRange: '8080',
                            Destinations: &godo.Destinations{
                                Addresses: []string{'0.0.0.0/0', '::/0'},
                            },
                        },
                    },
                    DropletIDs: []int{8043964},
                    Tags: []string{'frontend'}
                }

                firewall, req, err := client.Firewalls.Create(ctx, 'bb4b2611-3d72-467b-8602-280330ecd65c', updateRequest)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            firewall = DropletKit::Firewall.new(
              name: 'firewall',
              inbound_rules: [
                DropletKit::FirewallInboundRule.new(
                  protocol: 'tcp',
                  ports: '8080',
                  sources: {
                    load_balancer_uids: ['4de7ac8b-495b-4884-9a69-1050c6793cd6']
                  }
                ),
                DropletKit::FirewallInboundRule.new(
                  protocol: 'tcp',
                  ports: '22',
                  sources: {
                    tags: ['gateway'],
                    addresses: ['18.0.0.0/8']
                  }
                )
              ],
              outbound_rules: [
                DropletKit::FirewallOutboundRule.new(
                  protocol: 'tcp',
                  ports: '8080',
                  destinations: {
                    addresses: ['0.0.0.0/0', '::/0'],
                  }
                )
              ],
              droplet_ids: [8043964],
              tags: ['frontend']
            )


            client.firewalls.update(firewall, id:
            'bb4b2611-3d72-467b-8602-280330ecd65c')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "frontend-firewall",
              "inbound_rules": [
                {
                  "protocol": "tcp",
                  "ports": "8080",
                  "sources": {
                    "load_balancer_uids": [
                      "4de7ac8b-495b-4884-9a69-1050c6793cd6"
                    ]
                  }
                },
                {
                  "protocol": "tcp",
                  "ports": "22",
                  "sources": {
                    "tags": [
                      "gateway"
                    ],
                    "addresses": [
                      "18.0.0.0/8"
                    ]
                  }
                }
              ],
              "outbound_rules": [
                {
                  "protocol": "tcp",
                  "ports": "8080",
                  "destinations": {
                    "addresses": [
                      "0.0.0.0/0",
                      "::/0"
                    ]
                  }
                }
              ],
              "droplet_ids": [
                8043964
              ],
              "tags": [
                "frontend"
              ]
            }

            resp = client.firewalls.update(firewall_id="3afda9", body=req)
      security:
        - bearer_auth:
            - firewall:update
    delete:
      operationId: firewalls_delete
      summary: Delete a Firewall
      description: >
        To delete a firewall send a DELETE request to
        `/v2/firewalls/$FIREWALL_ID`.


        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.
      tags:
        - Firewalls
      parameters:
        - $ref: '#/components/parameters/firewall_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/firewalls/bb4b2611-3d72-467b-8602-280330ecd65c"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Firewalls.Delete(ctx, 'bb4b2611-3d72-467b-8602-280330ecd65c')
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.firewalls.delete(id: 'bb4b2611-3d72-467b-8602-280330ecd65c')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.firewalls.delete(firewall_id= "as9di9d")
      security:
        - bearer_auth:
            - firewall:delete
  /v2/firewalls/{firewall_id}/droplets:
    post:
      operationId: firewalls_assign_droplets
      summary: Add Droplets to a Firewall
      description: >
        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.
      tags:
        - Firewalls
      parameters:
        - $ref: '#/components/parameters/firewall_id'
      requestBody:
        content:
          application/json:
            schema:
              properties:
                droplet_ids:
                  type: array
                  description: >-
                    An array containing the IDs of the Droplets to be assigned
                    to the firewall.
                  items:
                    type: integer
                  example:
                    - 49696269
              required:
                - droplet_ids
            example:
              droplet_ids:
                - 49696269
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"droplet_ids":[49696269]}' \
              "https://api.digitalocean.com/v2/firewalls/bb4b2611-3d72-467b-8602-280330ecd65c/droplets"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Firewalls.AddDroplets(ctx, 'bb4b2611-3d72-467b-8602-280330ecd65c', 49696269) 
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.firewalls.add_droplets([49696269], id:
            'bb4b2611-3d72-467b-8602-280330ecd65c')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "droplet_ids": [
                49696269
              ]
            }


            resp = client.firewalls.assign_droplets(firewall_id="39fa4gz",
            body=req)
      security:
        - bearer_auth:
            - firewall:create
    delete:
      operationId: firewalls_delete_droplets
      summary: Remove Droplets from a Firewall
      description: >
        To remove a Droplet from a firewall, send a DELETE 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.
      tags:
        - Firewalls
      parameters:
        - $ref: '#/components/parameters/firewall_id'
      requestBody:
        content:
          application/json:
            schema:
              properties:
                droplet_ids:
                  type: array
                  description: >-
                    An array containing the IDs of the Droplets to be removed
                    from the firewall.
                  items:
                    type: integer
                  example:
                    - 49696269
              required:
                - droplet_ids
            example:
              droplet_ids:
                - 49696269
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"droplet_ids":[49696269]}' \
              "https://api.digitalocean.com/v2/firewalls/bb4b2611-3d72-467b-8602-280330ecd65c/droplets"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Firewalls.RemoveDroplets(ctx, 'bb4b2611-3d72-467b-8602-280330ecd65c', 49696269)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.firewalls.remove_droplets([49696269], id:
            'bb4b2611-3d72-467b-8602-280330ecd65c')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "droplet_ids": [
                49696269
              ]
            }


            resp = client.firewalls.delete_droplets(firewall_id="39fa4gz",
            body=req)
      security:
        - bearer_auth:
            - firewall:delete
  /v2/firewalls/{firewall_id}/tags:
    post:
      operationId: firewalls_add_tags
      summary: Add Tags to a Firewall
      description: >
        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.
      tags:
        - Firewalls
      parameters:
        - $ref: '#/components/parameters/firewall_id'
      requestBody:
        content:
          application/json:
            schema:
              properties:
                tags:
                  $ref: '#/components/schemas/tags_array'
                  description: >-
                    An array containing the names of the Tags to be assigned
                    to the firewall.
              required:
                - tags
            example:
              tags:
                - frontend
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"tags":["frontend"]}' \
              "https://api.digitalocean.com/v2/firewalls/bb4b2611-3d72-467b-8602-280330ecd65c/tags"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Firewalls.AddTags(ctx, 'bb4b2611-3d72-467b-8602-280330ecd65c', 'frontend') 
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.firewalls.add_tags(['frontend'], id:
            'bb4b2611-3d72-467b-8602-280330ecd65c')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "tags": [
                "frontend"
              ]
            }

            resp = client.firewalls.add_tags(firewall_id="39fa4gz", body=req)
      security:
        - bearer_auth:
            - firewall:create
    delete:
      operationId: firewalls_delete_tags
      summary: Remove Tags from a Firewall
      description: >
        To remove a tag representing a group of Droplets from a firewall, send a

        DELETE 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.
      tags:
        - Firewalls
      parameters:
        - $ref: '#/components/parameters/firewall_id'
      requestBody:
        content:
          application/json:
            schema:
              properties:
                tags:
                  $ref: '#/components/schemas/tags_array'
                  description: >-
                    An array containing the names of the Tags to be removed
                    from the firewall.
              required:
                - tags
            example:
              tags:
                - frontend
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"tags":["frontend"]}' \
              "https://api.digitalocean.com/v2/firewalls/bb4b2611-3d72-467b-8602-280330ecd65c/tags"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Firewalls.RemoveTags(ctx, 'bb4b2611-3d72-467b-8602-280330ecd65c', 'frontend')
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.firewalls.remove_tags(['frontend'], id:
            'bb4b2611-3d72-467b-8602-280330ecd65c')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "tags": [
                "frontend"
              ]
            }

            resp = client.firewalls.delete_tags(firewall_id="39fa4gz", body=req)
      security:
        - bearer_auth:
            - firewall:delete
  /v2/firewalls/{firewall_id}/rules:
    post:
      operationId: firewalls_add_rules
      summary: Add Rules to a Firewall
      description: >
        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.
      tags:
        - Firewalls
      parameters:
        - $ref: '#/components/parameters/firewall_id'
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/firewall_rules'
                - anyOf:
                    - title: Inbound Rules
                      required:
                        - inbound_rules
                    - title: Outbound Rules
                      required:
                        - outbound_rules
            example:
              inbound_rules:
                - protocol: tcp
                  ports: '3306'
                  sources:
                    droplet_ids:
                      - 49696269
              outbound_rules:
                - protocol: tcp
                  ports: '3306'
                  destinations:
                    droplet_ids:
                      - 49696269
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"inbound_rules":[{"protocol":"tcp","ports":"3306","sources":{"droplet_ids":[49696269]}}],"outbound_rules":[{"protocol":"tcp","ports":"3306","destinations":{"droplet_ids":[49696269]}}]}' \
              "https://api.digitalocean.com/v2/firewalls/bb4b2611-3d72-467b-8602-280330ecd65c/rules" 
        - lang: Go
          source: >-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )


            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

            ruleRequest := &godo.FirewallRulesRequest{
                InboundRules: []godo.InboundRule{
                    {
                        Protocol:      'tcp',
                        PortRange:     '3306',
                        Sources: &godo.Sources{
                            DropletIDs: []int{49696269},
                        },
                    },
                },
                OutboundRules: []godo.OutboundRule{
                    {
                        Protocol:      'tcp',
                        PortRange:     '3306',
                        Destinations: &godo.Destinations{
                            DropletIDs: []int{49696269},
                        },
                    },
                },
            }


            _, err := c.Firewalls.AddRules(ctx,
            'bb4b2611-3d72-467b-8602-280330ecd65c', ruleRequest)

            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            inbound_rule = DropletKit::FirewallInboundRule.new(
              protocol: 'tcp',
              ports: '3306',
              sources: {
                droplet_ids: [49696269]
              }
            )


            outbound_rule = DropletKit::FirewallOutboundRule.new(
              protocol: 'tcp',
              ports: '3306',
              destinations: {
                droplet_ids: [49696269]
              }
            )


            client.firewalls.add_rules(inbound_rules: [inbound_rule],
            outbound_rules: [outbound_rule], id:
            'bb4b2611-3d72-467b-8602-280330ecd65c')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "inbound_rules": [
                {
                  "protocol": "tcp",
                  "ports": "3306",
                  "sources": {
                    "droplet_ids": [
                      49696269
                    ]
                  }
                }
              ],
              "outbound_rules": [
                {
                  "protocol": "tcp",
                  "ports": "3306",
                  "destinations": {
                    "droplet_ids": [
                      49696269
                    ]
                  }
                }
              ]
            }

            resp = client.firewalls.add_rules(firewall_id="39fa4gz", body=req)
      security:
        - bearer_auth:
            - firewall:create
    delete:
      operationId: firewalls_delete_rules
      summary: Remove Rules from a Firewall
      description: >
        To remove access rules from a firewall, send a DELETE 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 removed.


        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.
      tags:
        - Firewalls
      parameters:
        - $ref: '#/components/parameters/firewall_id'
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/firewall_rules'
                - anyOf:
                    - title: Inbound Rules
                      required:
                        - inbound_rules
                    - title: Outbound Rules
                      required:
                        - outbound_rules
            example:
              inbound_rules:
                - protocol: tcp
                  ports: '3306'
                  sources:
                    droplet_ids:
                      - 49696269
              outbound_rules:
                - protocol: tcp
                  ports: '3306'
                  destinations:
                    droplet_ids:
                      - 49696269
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"inbound_rules":[{"protocol":"tcp","ports":"3306","sources":{"droplet_ids":[49696269]}}],"outbound_rules":[{"protocol":"tcp","ports":"3306","destinations":{"droplet_ids":[49696269]}}]}' \
              "https://api.digitalocean.com/v2/firewalls/bb4b2611-3d72-467b-8602-280330ecd65c/rules"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                ruleRequest := &godo.FirewallRulesRequest{
                    InboundRules: []godo.InboundRule{
                        {
                            Protocol:      'tcp',
                            PortRange:     '3306',
                            Sources: &godo.Sources{
                                DropletIDs: []int{49696269},
                            },
                        },
                    },
                    OutboundRules: []godo.OutboundRule{
                        {
                            Protocol:      'tcp',
                            PortRange:     '3306',
                            Destinations: &godo.Destinations{
                                DropletIDs: []int{49696269},
                            },
                        },
                    },
                }

                _, err := c.Firewalls.RemoveRules(ctx, 'bb4b2611-3d72-467b-8602-280330ecd65c', ruleRequest)

            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            inbound_rule = DropletKit::FirewallInboundRule.new(
              protocol: 'tcp',
              ports: '3306',
              sources: {
                droplet_ids: [49696269]
              }
            )


            outbound_rule = DropletKit::FirewallOutboundRule.new(
              protocol: 'tcp',
              ports: '3306',
              destinations: {
                droplet_ids: [49696269]
              }
            )


            client.firewalls.remove_rules(inbound_rules: [inbound_rule],
            outbound_rules: [outbound_rule], id:
            'bb4b2611-3d72-467b-8602-280330ecd65c')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "inbound_rules": [
                {
                  "protocol": "tcp",
                  "ports": "3306",
                  "sources": {
                    "droplet_ids": [
                      49696269
                    ]
                  }
                }
              ],
              "outbound_rules": [
                {
                  "protocol": "tcp",
                  "ports": "3306",
                  "destinations": {
                    "droplet_ids": [
                      49696269
                    ]
                  }
                }
              ]
            }


            resp = client.firewalls.delete_rules(firewall_id="39fa4gz",
            body=req)
      security:
        - bearer_auth:
            - firewall:delete
  /v2/floating_ips:
    get:
      operationId: floatingIPs_list
      summary: List All Floating IPs
      description: >-
        To list all of the floating IPs available on your account, send a GET
        request to `/v2/floating_ips`.
      tags:
        - Floating IPs
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/floating_ip_list'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/floating_ips?page=1&per_page=20" 
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                floatingIPs, _, err := client.FloatingIPs.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            floating_ips = client.floating_ips.all
            floating_ips.each
      security:
        - bearer_auth:
            - firewall:read
    post:
      operationId: floatingIPs_create
      summary: Create a New Floating IP
      description: >-
        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.
      tags:
        - Floating IPs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/floating_ip_create'
      responses:
        '202':
          $ref: '#/components/responses/floating_ip_created'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"droplet_id": 123456}' \
              "https://api.digitalocean.com/v2/floating_ips" 
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.FloatingIPCreateRequest{
                    DropletID: 123456,

                }
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            floating_ip = DropletKit::FloatingIp.new(droplet_id: 123456)
            client.floating_ips.create(floating_ip) 
      security:
        - bearer_auth:
            - reserved_ip:create
  /v2/floating_ips/{floating_ip}:
    get:
      operationId: floatingIPs_get
      summary: Retrieve an Existing Floating IP
      description: >-
        To show information about a floating IP, send a GET request to
        `/v2/floating_ips/$FLOATING_IP_ADDR`.
      tags:
        - Floating IPs
      parameters:
        - $ref: '#/components/parameters/floating_ip'
      responses:
        '200':
          $ref: '#/components/responses/floating_ip'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/floating_ips/45.55.96.47" 
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                floatingIP, _, err := client.FloatingIPs.Get(ctx, "45.55.96.47")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.floating_ips.find(ip: '45.55.96.47')
      security:
        - bearer_auth:
            - firewall:read
    delete:
      operationId: floatingIPs_delete
      summary: Delete a Floating IP
      description: >
        To delete a floating IP and remove it from your account, send a DELETE
        request

        to `/v2/floating_ips/$FLOATING_IP_ADDR`.


        A successful request will receive a 204 status code with no body in
        response.

        This indicates that the request was processed successfully.
      tags:
        - Floating IPs
      parameters:
        - $ref: '#/components/parameters/floating_ip'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/floating_ips/45.55.96.47"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.FloatingIPs.Delete(ctx, "45.55.96.34")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.floating_ips.delete(ip: '45.55.96.47') 
      security:
        - bearer_auth:
            - reserved_ip:delete
  /v2/floating_ips/{floating_ip}/actions:
    get:
      operationId: floatingIPsAction_list
      summary: List All Actions for a Floating IP
      description: >-
        To retrieve all actions that have been executed on a floating IP, send a
        GET request to `/v2/floating_ips/$FLOATING_IP/actions`.
      tags:
        - Floating IP Actions
      parameters:
        - $ref: '#/components/parameters/floating_ip'
      responses:
        '200':
          $ref: '#/components/responses/floating_ip_actions'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/floating_ips/45.55.96.47/actions?page=1&per_page=1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                actions, _, err := client.FloatingIPActions.List(ctx, '45.55.96.47', opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            actions = client.floating_ip_actions.all(ip: '45.55.96.47')
            actions.each
      security:
        - bearer_auth:
            - firewall:read
    post:
      operationId: floatingIPsAction_post
      summary: Initiate a Floating IP Action
      description: >
        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
      tags:
        - Floating IP Actions
      parameters:
        - $ref: '#/components/parameters/floating_ip'
      requestBody:
        description: >
          The `type` attribute set in the request body will specify the action
          that

          will be taken on the floating IP.
        content:
          application/json:
            schema:
              anyOf:
                - $ref: '#/components/schemas/floating_ip_action_unassign'
                - $ref: '#/components/schemas/floating_ip_action_assign'
              discriminator:
                propertyName: type
                mapping:
                  unassign: '#/components/schemas/floating_ip_action_unassign'
                  assign: '#/components/schemas/floating_ip_action_assign'
      responses:
        '201':
          $ref: '#/components/responses/floating_ip_action'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            # Assign a Floating IP to a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"assign","droplet_id":8219222}' \
              "https://api.digitalocean.com/v2/floating_ips/45.55.96.47/actions"

            # Unassign a Floating IP
            # curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"unassign"}' \
              "https://api.digitalocean.com/v2/floating_ips/45.55.96.47/actions"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

              // Assign a Floating IP to a Droplet
                action, _, err := client.FloatingIPActions.Assign(ctx, "45.55.96.47", 8219222)

              // Unassign a Floating IP
              // action, _, err := client.FloatingIPActions.Unassign(ctx, "45.55.96.47")  
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            # Assign a Floating IP to a Droplet

            client.floating_ip_actions.assign(ip: '45.55.96.47', droplet_id:
            8219222)


            # Unassign a Floating IP

            # client.floating_ip_actions.unassign(ip: '45.55.96.47')
      security:
        - bearer_auth:
            - reserved_ip:update
  /v2/floating_ips/{floating_ip}/actions/{action_id}:
    get:
      operationId: floatingIPsAction_get
      summary: Retrieve an Existing Floating IP Action
      description: >-
        To retrieve the status of a floating IP action, send a GET request to
        `/v2/floating_ips/$FLOATING_IP/actions/$ACTION_ID`.
      tags:
        - Floating IP Actions
      parameters:
        - $ref: '#/components/parameters/floating_ip'
        - $ref: '#/components/parameters/action_id'
      responses:
        '200':
          $ref: '#/components/responses/floating_ip_action'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/floating_ips/45.55.96.47/actions/72531856"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                action, _, err := client.FloatingIPActions.Get(ctx, "45.55.96.47", 72531856)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.floating_ip_actions.find(ip: '45.55.96.47', id: 72531856)
      security:
        - bearer_auth:
            - firewall:read
  /v2/functions/namespaces:
    get:
      operationId: functions_list_namespaces
      summary: List Namespaces
      description: >-
        Returns a list of namespaces associated with the current user. To get
        all namespaces, send a GET request to `/v2/functions/namespaces`.
      tags:
        - Functions
      responses:
        '200':
          $ref: '#/components/responses/list_namespaces'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/functions/namespaces"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.functions.list_namespaces()
      security:
        - bearer_auth:
            - function:read
            - function:admin
    post:
      operationId: functions_create_namespace
      summary: Create Namespace
      description: >-
        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.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_namespace'
      tags:
        - Functions
      responses:
        '200':
          $ref: '#/components/responses/namespace_created'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/namespace_bad_request'
        '422':
          $ref: '#/components/responses/namespace_limit_reached'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"region": "nyc1", "label": "my namespace label"}' \
              "https://api.digitalocean.com/v2/functions/namespaces"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "region": "nyc1",
              "label": "my namespace"
            }

            resp = client.functions.create_namespace(body=req)
      security:
        - bearer_auth:
            - function:create
            - function:admin
  /v2/functions/namespaces/{namespace_id}:
    get:
      operationId: functions_get_namespace
      summary: Get Namespace
      description: >-
        Gets the namespace details for the given namespace UUID. To get
        namespace details, send a GET request to
        `/v2/functions/namespaces/$NAMESPACE_ID` with no parameters.
      tags:
        - Functions
      parameters:
        - $ref: '#/components/parameters/namespace_id'
      responses:
        '200':
          $ref: '#/components/responses/namespace_created'
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/namespace_not_allowed'
        '404':
          $ref: '#/components/responses/namespace_not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/functions/namespaces/{{namespace_id}}"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.functions.get_namespace(namespace_id="aff93af3")
      security:
        - bearer_auth:
            - function:admin
    delete:
      operationId: functions_delete_namespace
      summary: Delete Namespace
      description: >-
        Deletes the given namespace.  When a namespace is deleted all assets, in
        the namespace are deleted, this includes packages, functions and
        triggers. Deleting a namespace is a destructive operation and assets in
        the namespace are not recoverable after deletion. Some metadata is
        retained, such as activations, or soft deleted for reporting purposes.

        To delete namespace, send a DELETE request to
        `/v2/functions/namespaces/$NAMESPACE_ID`.

        A successful deletion returns a 204 response.
      tags:
        - Functions
      parameters:
        - $ref: '#/components/parameters/namespace_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/namespace_not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/functions/namespaces/{{namespace_id}}"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.functions.delete_namespace(namespace_id="aff93af3")
      security:
        - bearer_auth:
            - function:delete
            - function:admin
  /v2/functions/namespaces/{namespace_id}/triggers:
    get:
      operationId: functions_list_triggers
      summary: List Triggers
      description: >-
        Returns a list of triggers associated with the current user and
        namespace. To get all triggers, send a GET request to
        `/v2/functions/namespaces/$NAMESPACE_ID/triggers`.
      parameters:
        - $ref: '#/components/parameters/namespace_id'
      tags:
        - Functions
      responses:
        '200':
          $ref: '#/components/responses/list_triggers'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/namespace_not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/functions/namespaces/{{namespace_id}}/triggers"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.functions.list_triggers(namespace_id="39f3ca")
      security:
        - bearer_auth:
            - function:read
            - function:admin
    post:
      operationId: functions_create_trigger
      summary: Create Trigger
      description: >-
        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.
      parameters:
        - $ref: '#/components/parameters/namespace_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_trigger'
      tags:
        - Functions
      responses:
        '200':
          $ref: '#/components/responses/trigger_response'
        '400':
          $ref: '#/components/responses/trigger_bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/namespace_not_found'
        '422':
          $ref: '#/components/responses/trigger_limit_reached'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "my trigger", "function": "hello", "type": "SCHEDULED", "is_enabled": true, "scheduled_details": {"cron": "* * * * *", "body": {"name": "Welcome to DO!"}}}' \
              "https://api.digitalocean.com/v2/functions/namespaces/{{namespace_id}}/triggers"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
                "name": "my trigger",
                "function": "hello",
                "type": "SCHEDULED",
                "is_enabled": True,
                "scheduled_details": {
                "cron": "* * * * *",
                "body": {
                    "name": "Welcome to DO!"
                }
            }

            }


            resp = client.functions.create_trigger(namespace_id="aff93af3",
            body=req)
      security:
        - bearer_auth:
            - function:create
            - function:admin
  /v2/functions/namespaces/{namespace_id}/triggers/{trigger_name}:
    get:
      operationId: functions_get_trigger
      summary: Get Trigger
      description: >-
        Gets the trigger details. To get the trigger details, send a GET request
        to `/v2/functions/namespaces/$NAMESPACE_ID/triggers/$TRIGGER_NAME`.
      parameters:
        - $ref: '#/components/parameters/namespace_id'
        - $ref: '#/components/parameters/trigger_name'
      tags:
        - Functions
      responses:
        '200':
          $ref: '#/components/responses/trigger_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/trigger_not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/functions/namespaces/{{namespace_id}}/triggers/{{trigger_name}}"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp = client.functions.get_trigger(namespace_id="aff93af3",
            trigger_name="trig_name")
      security:
        - bearer_auth:
            - function:read
            - function:admin
    put:
      operationId: functions_update_trigger
      summary: Update Trigger
      description: >-
        Updates the details of the given trigger. To update a trigger, send a
        PUT request to
        `/v2/functions/namespaces/$NAMESPACE_ID/triggers/$TRIGGER_NAME` with new
        values for the `is_enabled ` or `scheduled_details` properties.
      parameters:
        - $ref: '#/components/parameters/namespace_id'
        - $ref: '#/components/parameters/trigger_name'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_trigger'
      tags:
        - Functions
      responses:
        '200':
          $ref: '#/components/responses/trigger_response'
        '400':
          $ref: '#/components/responses/trigger_bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/trigger_not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"is_enabled": true, "scheduled_details": {"cron": "* * * * *", "body": {"name": "Welcome to DO!"}}}' \
              "https://api.digitalocean.com/v2/functions/namespaces/{{namespace_id}}/triggers/{{trigger_name}}"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "is_enabled": true,
              "scheduled_details": {
                "cron": "* * * * *",
                "body": {
                  "name": "Welcome to DO!"
                }
              }
            }


            resp = client.functions.update_trigger(namespace_id="39f3ca",
            trigger_name="trig_name", body=req)
      security:
        - bearer_auth:
            - function:update
            - function:admin
    delete:
      operationId: functions_delete_trigger
      summary: Delete Trigger
      description: >-
        Deletes the given trigger.

        To delete trigger, send a DELETE request to
        `/v2/functions/namespaces/$NAMESPACE_ID/triggers/$TRIGGER_NAME`.

        A successful deletion returns a 204 response.
      tags:
        - Functions
      parameters:
        - $ref: '#/components/parameters/namespace_id'
        - $ref: '#/components/parameters/trigger_name'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/trigger_not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/functions/namespaces/{{namespace_id}}/triggers/{{trigger_name}}"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp = client.functions.delete_trigger(namespace_id="aff93af3",
            trigger_name="trig_name")
      security:
        - bearer_auth:
            - function:delete
            - function:admin
  /v2/images:
    get:
      operationId: images_list
      summary: List All Images
      description: >
        To list all of the images available on your account, send a GET request
        to /v2/images.


        ## Filtering Results

        -----


        It's possible to request filtered results by including certain query
        parameters.


        **Image Type**


        Either 1-Click Application or OS Distribution images can be filtered by
        using the `type` query parameter.


        > Important: The `type` query parameter does not directly relate to the
        `type` attribute.


        To retrieve only ***distribution*** images, include the `type` query
        parameter set to distribution, `/v2/images?type=distribution`.


        To retrieve only ***application*** images, include the `type` query
        parameter set to application, `/v2/images?type=application`.


        **User Images**


        To retrieve only the private images of a user, include the `private`
        query parameter set to true, `/v2/images?private=true`.


        **Tags**


        To list all images assigned to a specific tag, include the `tag_name`
        query parameter set to the name of the tag in your GET request. For
        example, `/v2/images?tag_name=$TAG_NAME`.
      tags:
        - Images
      parameters:
        - $ref: '#/components/parameters/type'
        - $ref: '#/components/parameters/private'
        - $ref: '#/components/parameters/tag'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_images'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/images?page=1&per_page=1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                // List all images
                images, _, err := client.Images.List(ctx, opt)

                // List all application images
                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                images, _, err := client.Images.ListApplication(ctx, opt) 
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            # List all images
            images = client.images.all
            images.each

            # List all application images
            images = client.images.all(type: 'application')
            images.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.images.list()
      security:
        - bearer_auth:
            - image:read
    post:
      operationId: images_create_custom
      summary: Create a Custom Image
      description: >
        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.
      tags:
        - Images
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/image_new_custom'
      responses:
        '202':
          $ref: '#/components/responses/new_custom_image'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "ubuntu-18.04-minimal", "url": "http://cloud-images.ubuntu.com/minimal/releases/bionic/release/ubuntu-18.04-minimal-cloudimg-amd64.img", "distribution": "Ubuntu", "region": "nyc3", "description": "Cloud-optimized image w/ small footprint", "tags":["base-image", "prod"]}' \
              "https://api.digitalocean.com/v2/images"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "ubuntu-18.04-minimal",
              "url": "http://cloud-images.ubuntu.com/minimal/releases/bionic/release/ubuntu-18.04-minimal-cloudimg-amd64.img",
              "distribution": "Ubuntu",
              "region": "nyc3",
              "description": "Cloud-optimized image w/ small footprint",
              "tags": [
                "base-image",
                "prod"
              ]
            }

            resp = client.images.create_custom(body=req)
      security:
        - bearer_auth:
            - image:create
  /v2/images/{image_id}:
    get:
      operationId: images_get
      summary: Retrieve an Existing Image
      description: |
        To retrieve information about an image, send a `GET` request to
        `/v2/images/$IDENTIFIER`.
      tags:
        - Images
      parameters:
        - in: path
          name: image_id
          description: >
            A unique number (id) or string (slug) used to identify and reference
            a

            specific image.


            **Public** images can be identified by image `id` or `slug`.


            **Private** images *must* be identified by image `id`.
          required: true
          schema:
            anyOf:
              - type: integer
              - type: string
          examples:
            byId:
              summary: Retrieve a public or private image by id
              value: 62137902
            bySlug:
              summary: Retrieve a public image by slug
              value: ubuntu-16-04-x64
      responses:
        '200':
          $ref: '#/components/responses/existing_image'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            # Get existing image by ID
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/images/7555620"

            # Get existing image by slug
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/images/ubuntu-16-04-x64"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                // Get existing image by ID
                image, _, err := client.Images.GetByID(ctx, 7555620)

                // Get existing image by slug
                // image, _, err := client.Images.GetBySlug(ctx, "ubuntu-16-04-x64") 
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            # Retrieve image by ID
            client.images.find(id: '7555620')

            # Retrieve image by slug
            client.images.find(id: 'ubuntu-16-04-x64')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.images.get(image_id=134215)
      security:
        - bearer_auth:
            - image:read
    put:
      operationId: images_update
      summary: Update an Image
      description: >
        To update an image, send a `PUT` request to `/v2/images/$IMAGE_ID`.

        Set the `name` attribute to the new value you would like to use.

        For custom images, the `description` and `distribution` attributes may
        also be updated.
      tags:
        - Images
      parameters:
        - $ref: '#/components/parameters/image_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/image_update'
      responses:
        '200':
          $ref: '#/components/responses/updated_image'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"new-image-name"}' \
              "https://api.digitalocean.com/v2/images/7938391"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                updateRequest := &godo.ImageUpdateRequest{
                    Name: "new-image-name",
                }

                image, _, err := client.Images.Update(ctx, id, updateRequest)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            image = DropletKit::Image.new(name: 'new-image-name')
            client.images.update(image, id: 7938391)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "Nifty New Snapshot",
              "distribution": "Ubuntu",
              "description": " "
            }

            resp = client.images.update(image_id=234532, body=req)
      security:
        - bearer_auth:
            - image:update
    delete:
      operationId: images_delete
      summary: Delete an Image
      description: >
        To delete a snapshot or custom image, send a `DELETE` request to
        `/v2/images/$IMAGE_ID`.
      tags:
        - Images
      parameters:
        - $ref: '#/components/parameters/image_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/images/7938391"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Images.Delete(ctx, 7938391)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.images.delete(id: 7938391)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.images.delete(image_id=134215)
      security:
        - bearer_auth:
            - image:delete
  /v2/images/{image_id}/actions:
    get:
      operationId: imageActions_list
      summary: List All Actions for an Image
      description: >-
        To retrieve all actions that have been executed on an image, send a GET
        request to `/v2/images/$IMAGE_ID/actions`.
      tags:
        - Image Actions
      parameters:
        - $ref: '#/components/parameters/image_id'
      responses:
        '200':
          $ref: '#/components/responses/get_image_actions_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/images/7555620/actions?page=1&per_page=1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.image_actions.list(image_id=7938269)
      security:
        - bearer_auth:
            - image:read
    post:
      operationId: imageActions_post
      summary: Initiate an Image Action
      description: >
        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.
      tags:
        - Image Actions
      parameters:
        - $ref: '#/components/parameters/image_id'
      requestBody:
        content:
          application/json:
            schema:
              anyOf:
                - $ref: '#/components/schemas/image_action_base'
                - $ref: '#/components/schemas/image_action_transfer'
              discriminator:
                propertyName: type
                mapping:
                  convert: '#/components/schemas/image_action_base'
                  transfer: '#/components/schemas/image_action_transfer'
      responses:
        '201':
          $ref: '#/components/responses/post_image_action_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            # Transfer an Existing Image
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"transfer","region":"nyc2"}' \
              "https://api.digitalocean.com/v2/images/7938269/actions"

            # Convert an Image into a Snapshot
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"convert"}' \
              "https://api.digitalocean.com/v2/images/7938291/actions"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                // Transfer an existing image
                transferRequest := &godo.ActionRequest{
                    "type":   "transfer",
                    "region": "nyc2",
                }
              # Transfer an Image
                transfer, _, err := client.ImageActions.Transfer(ctx, 7938269, transferRequest)

              # Convert an Image to a Snapshot
              # client.image_actions.convert(image_id: 7938269)

            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            # Transfer an Image
            client.image_actions.transfer(image_id: 7938269, region: 'nyc2')

            # Convert an Image to a Snapshot
            # client.image_actions.convert(image_id: 7938269)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "type": "convert"
            }
            resp = client.image_actions.post(image_id=342341, body=req)
      security:
        - bearer_auth:
            - image:create
  /v2/images/{image_id}/actions/{action_id}:
    get:
      operationId: imageActions_get
      summary: Retrieve an Existing Action
      description: >-
        To retrieve the status of an image action, send a GET request to
        `/v2/images/$IMAGE_ID/actions/$IMAGE_ACTION_ID`.
      tags:
        - Image Actions
      parameters:
        - $ref: '#/components/parameters/image_id'
        - $ref: '#/components/parameters/action_id'
      responses:
        '200':
          $ref: '#/components/responses/get_image_action_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/images/7938269/actions/36805527"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                action, _, err := client.ImageActions.Get(ctx, 7938269, 36805527)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.image_actions.find(image_id: 7938269, id: 36805527)
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp = client.image_actions.get(action_id=36805527,
            image_id=7938269)
      security:
        - bearer_auth:
            - image:read
  /v2/kubernetes/clusters:
    get:
      operationId: kubernetes_list_clusters
      summary: List All Kubernetes Clusters
      description: >
        To list all of the Kubernetes clusters on your account, send a GET
        request

        to `/v2/kubernetes/clusters`.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_clusters'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                clusters, _, err := client.Kubernetes.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            clusters = client.kubernetes_clusters.all
            clusters.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.kubernetes.list_clusters()
      security:
        - bearer_auth:
            - kubernetes:read
    post:
      operationId: kubernetes_create_cluster
      summary: Create a New Kubernetes Cluster
      description: >
        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.
      tags:
        - Kubernetes
      requestBody:
        required: true
        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'
      responses:
        '201':
          $ref: '#/components/responses/cluster_create'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "prod-cluster-01","region": "nyc1","version": "1.14.1\
              -do.4","tags": ["production","web-team"],"node_pools": [{"size": "s-1vcpu-2gb","count": 3,"name": "frontend-pool","tags": ["frontend"],"labels": {"service": "frontend", "priority": "high"}},{"size": "c-4","count": 2,"name": "backend-pool"}]}' \
              "https://api.digitalocean.com/v2/kubernetes/clusters"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.KubernetesClusterCreateRequest{
                    Name:        "prod-cluster-01",
                    RegionSlug:  "nyc1",
                    VersionSlug: "1.14.1-do.4",
                    Tags:        []string{"production", "web-team"},
                    NodePools: []*godo.KubernetesNodePoolCreateRequest{
                        &godo.KubernetesNodePoolCreateRequest{
                            Name:  "frontend-pool",
                            Size:  "s-2vcpu-2gb",
                            Count: 3,
                            Tags:  []string{"frontend"},
                            Labels:  map[string]string{"service": "frontend", "priority": "high"},
                        },
                        &godo.KubernetesNodePoolCreateRequest{
                            Name:  "backend-pool",
                            Size:  "c-4",
                            Count: 2,
                        },
                    },
                }

                cluster, _, err := client.Kubernetes.Create(ctx, createRequest)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            cluster = DropletKit::KubernetesCluster.new(
              name: 'prod-cluster-01',
              region: 'nyc1',
              version: '1.14.1-do.4',
              tags: ['production', 'web-team'],
              node_pools: [
                {
                  name: 'frontend-pool',
                  size: 's-2vcpu-2gb',
                  count: 3,
                  tags: ['frontend'],
                  labels: {service: 'frontend', priority: 'high'}
                },
                {
                  name: 'backend-pool',
                  size: 'c-4',
                  count: 2
                }
              ]
            )

            client.kubernetes_clusters.create(cluster)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "prod-cluster-01",
              "region": "nyc1",
              "version": "1.18.6-do.0",
              "node_pools": [
                {
                  "size": "s-1vcpu-2gb",
                  "count": 3,
                  "name": "worker-pool"
                }
              ]
            }

            resp = client.kubernetes.create_cluster(body=req)
      security:
        - bearer_auth:
            - kubernetes:create
  /v2/kubernetes/clusters/{cluster_id}:
    get:
      operationId: kubernetes_get_cluster
      summary: Retrieve an Existing Kubernetes Cluster
      description: >
        To show information about an existing Kubernetes cluster, send a GET
        request

        to `/v2/kubernetes/clusters/$K8S_CLUSTER_ID`.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      responses:
        '200':
          $ref: '#/components/responses/existing_cluster'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                cluster, _, err := client.Kubernetes.Get(ctx, "bd5f5959-5e1e-4205-a714-a914373942af")
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.kubernetes_clusters.find(id:
            'bd5f5959-5e1e-4205-a714-a914373942af')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.kubernetes.get_cluster(cluster_id="da8fda8")
      security:
        - bearer_auth:
            - kubernetes:read
    put:
      operationId: kubernetes_update_cluster
      summary: Update a Kubernetes Cluster
      description: |
        To update a Kubernetes cluster, send a PUT request to
        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID` and specify one or more of the
        attributes below.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/cluster_update'
      responses:
        '202':
          $ref: '#/components/responses/updated_cluster'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "stage-cluster-01", "tags":["staging", "web-team"]}' \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                updateRequest := &godo.KubernetesClusterUpdateRequest{
                    Name: "stage-cluster-01",
                    Tags: []string{"staging", "web-team"},
                }

                cluster, _, err := client.Kubernetes.Update(ctx, "bd5f5959-5e1e-4205-a714-a914373942af", updateRequest)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            cluster = DropletKit::KubernetesCluster.new(
              name: 'foo',
              tags: ['staging', 'web-team']
            )


            client.kubernetes_clusters.update(cluster, id:
            'bd5f5959-5e1e-4205-a714-a914373942af')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "name": "prod-cluster-01",
              "tags": [
                "k8s",
                "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
                "production",
                "web-team"
              ],
              "maintenance_policy": {
                "start_time": "12:00",
                "day": "any"
              },
              "auto_upgrade": True,
              "surge_upgrade": True,
              "ha": True
            }


            resp = client.kubernetes.update_cluster(cluster_id="1fd32a",
            body=req)
      security:
        - bearer_auth:
            - kubernetes:update
    delete:
      operationId: kubernetes_delete_cluster
      summary: Delete a Kubernetes Cluster
      description: >
        To delete a Kubernetes cluster and all services deployed to it, send a
        DELETE

        request to `/v2/kubernetes/clusters/$K8S_CLUSTER_ID`.


        A 204 status code with no body will be returned in response to a
        successful

        request.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Kubernetes.Delete(ctx, "bd5f5959-5e1e-4205-a714-a914373942af")
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.kubernetes_clusters.delete(id:
            'bd5f5959-5e1e-4205-a714-a914373942af')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.kubernetes.delete_cluster(cluster_id="da8fda8")
      security:
        - bearer_auth:
            - kubernetes:delete
  /v2/kubernetes/clusters/{cluster_id}/destroy_with_associated_resources:
    get:
      operationId: kubernetes_list_associatedResources
      summary: List Associated Resources for Cluster Deletion
      description: >-
        To list the associated billable resources that can be destroyed along
        with a cluster, send a GET request to the
        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/destroy_with_associated_resources`
        endpoint.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      responses:
        '200':
          $ref: '#/components/responses/associated_kubernetes_resources_list'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/destroy_with_associated_resources"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Kubernetes.ListAssociatedResourcesForDeletion(ctx, "bd5f5959-5e1e-4205-a714-a914373942af")

            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.kubernetes.list_associated_resources(cluster_id="da8fda8")
      security:
        - bearer_auth:
            - kubernetes:read
  /v2/kubernetes/clusters/{cluster_id}/destroy_with_associated_resources/selective:
    delete:
      operationId: kubernetes_destroy_associatedResourcesSelective
      summary: Selectively Delete a Cluster and its Associated Resources
      description: >
        To delete a Kubernetes cluster along with a subset of its associated
        resources,

        send a DELETE request to
        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/destroy_with_associated_resources/selective`.


        The JSON body of the request should include `load_balancers`, `volumes`,
        or

        `volume_snapshots` keys each set to an array of IDs for the associated

        resources to be destroyed.


        The IDs can be found by querying the cluster's associated resources
        endpoint.

        Any associated resource not included in the request will remain and
        continue

        to accrue changes on your account.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/destroy_associated_kubernetes_resources'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"load_balancers": ["4de7ac8b-495b-4884-9a69-1050c6793cd6"],"volumes": ["ba49449a-7435-11ea-b89e-0a58ac14480f"],"volume_snapshots": ["edb0478d-7436-11ea-86e6-0a58ac144b91"]}' \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/destroy_with_associated_resources/selective"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                deleteReq := &godo.KubernetesClusterDeleteSelectiveRequest{Volumes: []string{"ba49449a-7435-11ea-b89e-0a58ac14480f"}}, _, err := client.Kubernetes.DeleteSelective(ctx, "bd5f5959-5e1e-4205-a714-a914373942af", deleteReq)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "load_balancers": [
                "4de7ac8b-495b-4884-9a69-1050c6793cd6"
              ],
              "volumes": [
                "ba49449a-7435-11ea-b89e-0a58ac14480f"
              ],
              "volume_snapshots": [
                "edb0478d-7436-11ea-86e6-0a58ac144b91"
              ]
            }


            resp =
            client.kubernetes.destroy_associated_resources_selective(cluster_id="da8fda8",
            body=req)
      security:
        - bearer_auth:
            - kubernetes:delete
  /v2/kubernetes/clusters/{cluster_id}/destroy_with_associated_resources/dangerous:
    delete:
      operationId: kubernetes_destroy_associatedResourcesDangerous
      summary: Delete a Cluster and All of its Associated Resources (Dangerous)
      description: >
        To delete a Kubernetes cluster with all of its associated resources,
        send a

        DELETE request to
        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/destroy_with_associated_resources/dangerous`.

        A 204 status code with no body will be returned in response to a
        successful request.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/destroy_with_associated_resources/dangerous"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Kubernetes.DeleteDangerous(ctx, "bd5f5959-5e1e-4205-a714-a914373942af")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.kubernetes.destroy_associated_resources_dangerous(cluster_id="da8fda8")
      security:
        - bearer_auth:
            - kubernetes:delete
  /v2/kubernetes/clusters/{cluster_id}/kubeconfig:
    get:
      operationId: kubernetes_get_kubeconfig
      summary: Retrieve the kubeconfig for a Kubernetes Cluster
      description: >
        This endpoint returns a kubeconfig file in YAML format. It can be used
        to

        connect to and administer the cluster using the Kubernetes command line
        tool,

        `kubectl`, or other programs supporting kubeconfig files (e.g., client
        libraries).


        The resulting kubeconfig file uses token-based authentication for
        clusters

        supporting it, and certificate-based authentication otherwise. For a
        list of

        supported versions and more information, see "[How to Connect to a
        DigitalOcean

        Kubernetes Cluster with
        kubectl](https://www.digitalocean.com/docs/kubernetes/how-to/connect-with-kubectl/)".


        To retrieve a kubeconfig file for use with a Kubernetes cluster, send a
        GET

        request to `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/kubeconfig`.


        Clusters supporting token-based authentication may define an expiration
        by

        passing a duration in seconds as a query parameter to

        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/kubeconfig?expiry_seconds=$DURATION_IN_SECONDS`.

        If not set or 0, then the token will have a 7 day expiry. The query
        parameter

        has no impact in certificate-based authentication.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
        - $ref: '#/components/parameters/kubernetes_expiry_seconds'
      responses:
        '200':
          $ref: '#/components/responses/kubeconfig'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/kubeconfig"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                config, _, err := client.Kubernetes.GetKubeConfig(ctx, "bd5f5959-5e1e-4205-a714-a914373942af")

                kubeConfigFile := string(config.KubeconfigYAML)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.kubernetes_clusters.kubeconfig(id:
            'bd5f5959-5e1e-4205-a714-a914373942af')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.kubernetes.get_kubeconfig(cluster_id="da8fda8")
      security:
        - bearer_auth:
            - kubernetes:access_cluster
  /v2/kubernetes/clusters/{cluster_id}/credentials:
    get:
      operationId: kubernetes_get_credentials
      summary: Retrieve Credentials for a Kubernetes Cluster
      description: >
        This endpoint returns a JSON object . It can be used to programmatically

        construct Kubernetes clients which cannot parse kubeconfig files.


        The resulting JSON object contains token-based authentication for
        clusters

        supporting it, and certificate-based authentication otherwise. For a
        list of

        supported versions and more information, see "[How to Connect to a
        DigitalOcean

        Kubernetes Cluster with
        kubectl](https://www.digitalocean.com/docs/kubernetes/how-to/connect-with-kubectl/)".


        To retrieve credentials for accessing a Kubernetes cluster, send a GET

        request to `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/credentials`.


        Clusters supporting token-based authentication may define an expiration
        by

        passing a duration in seconds as a query parameter to

        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/credentials?expiry_seconds=$DURATION_IN_SECONDS`.

        If not set or 0, then the token will have a 7 day expiry. The query
        parameter

        has no impact in certificate-based authentication.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
        - $ref: '#/components/parameters/kubernetes_expiry_seconds'
      responses:
        '200':
          $ref: '#/components/responses/credentials'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/credentials"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                credentials, _, err := client.Kubernetes.GetCredentials(ctx, "bd5f5959-5e1e-4205-a714-a914373942af")
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.kubernetes_clusters.credentials(id:
            'bd5f5959-5e1e-4205-a714-a914373942af')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.kubernetes.get_credentials(cluster_id="da8fda8")
      security:
        - bearer_auth:
            - kubernetes:access_cluster
  /v2/kubernetes/clusters/{cluster_id}/upgrades:
    get:
      operationId: kubernetes_get_availableUpgrades
      summary: Retrieve Available Upgrades for an Existing Kubernetes Cluster
      description: >
        To determine whether a cluster can be upgraded, and the versions to
        which it

        can be upgraded, send a GET request to

        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/upgrades`.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      responses:
        '200':
          $ref: '#/components/responses/available_upgrades'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/upgrades"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                upgrades, _, err := client.Kubernetes.GetUpgrades(ctx, "bd5f5959-5e1e-4205-a714-a914373942af")
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.kubernetes.get_available_upgrades(cluster_id="da8fda8")
      security:
        - bearer_auth:
            - kubernetes:read
  /v2/kubernetes/clusters/{cluster_id}/upgrade:
    post:
      operationId: kubernetes_upgrade_cluster
      summary: Upgrade a Kubernetes Cluster
      description: >
        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`.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              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.
      responses:
        '202':
          $ref: '#/components/responses/accepted'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/upgrades"
        - lang: Go
          source: "import (\n    \"context\"\n    \"os\"\n\n    \"github.com/digitalocean/godo\"\n)\n\nfunc main() {\n    token := os.Getenv(\"DIGITALOCEAN_TOKEN\")\n\n    client := godo.NewFromToken(token)\n    ctx := context.TODO()\n\n    upgradeRequest := &godo.KubernetesClusterUpgradeRequest{\n    \tVersionSlug: \"1.12.3-do.1\",\n    }\n}"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "version": "1.16.13-do.0"
            }


            resp = client.kubernetes.upgrade_cluster(cluster_id="1fd32a",
            body=req)
      security:
        - bearer_auth:
            - kubernetes:update
  /v2/kubernetes/clusters/{cluster_id}/node_pools:
    get:
      operationId: kubernetes_list_nodePools
      summary: List All Node Pools in a Kubernetes Clusters
      description: >
        To list all of the node pools in a Kubernetes clusters, send a GET
        request to

        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/node_pools`.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      responses:
        '200':
          $ref: '#/components/responses/all_node_pools'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/node_pools"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                nodePools, _, err := client.Kubernetes.ListNodePools(ctx, "9b729d1c-730c-42e1-b136-59326fb1b3bb", opt)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            node_pools = client.kubernetes_clusters.node_pools(id:
            'bd5f5959-5e1e-4205-a714-a914373942af')

            node_pools.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.kubernetes.list_node_pools(cluster_id="a8fsa8d")
      security:
        - bearer_auth:
            - kubernetes:read
    post:
      operationId: kubernetes_add_nodePool
      summary: Add a Node Pool to a Kubernetes Cluster
      description: >
        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.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/kubernetes_node_pool'
            example:
              size: s-1vcpu-2gb
              count: 3
              name: new-pool
              tags:
                - frontend
              auto_scale: true
              min_nodes: 3
              max_nodes: 6
      responses:
        '201':
          $ref: '#/components/responses/node_pool_create'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"size": "s-2vcpu-4gb","count": 1,"name": "pool-02","tags": ["web"], "labels": {"service": "web", "priority": "high"}}' \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/node_pools"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.KubernetesNodePoolCreateRequest{
                    Name:  "pool-02",
                    Size:  "s-2vcpu-4gb",
                    Count: 1,
                    Tags:  []string{"web"},
                    Labels:  map[string]string{"service": "web", "priority": "high"},
                }

                nodePool, _, err := client.Kubernetes.CreateNodePool(ctx, "bd5f5959-5e1e-4205-a714-a914373942af", createRequest)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            node_pool = DropletKit::KubernetesNodePool.new(
              name: 'pool-02',
              size: 's-2vcpu-4gb',
              count: 1,
              tags: ['web']
              labels: {service: 'web', priority: 'high'}
            )


            client.kubernetes_clusters.create_node_pool(node_pool, id:
            'bd5f5959-5e1e-4205-a714-a914373942af')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "size": "s-1vcpu-2gb",
              "count": 3,
              "name": "new-pool",
              "tags": [
                "frontend"
              ],
              "auto_scale": True,
              "min_nodes": 3,
              "max_nodes": 6
            }


            resp = client.kubernetes.add_node_pool(cluster_id="ba9d8da",
            body=req)
      security:
        - bearer_auth:
            - kubernetes:create
  /v2/kubernetes/clusters/{cluster_id}/node_pools/{node_pool_id}:
    get:
      operationId: kubernetes_get_nodePool
      summary: Retrieve a Node Pool for a Kubernetes Cluster
      description: >
        To show information about a specific node pool in a Kubernetes cluster,
        send

        a GET request to
        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/node_pools/$NODE_POOL_ID`.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
        - $ref: '#/components/parameters/kubernetes_node_pool_id'
      responses:
        '200':
          $ref: '#/components/responses/existing_node_pool'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/credentials"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                nodePool, _, err := client.Kubernetes.GetNodePool(ctx, "bd5f5959-5e1e-4205-a714-a914373942af", "cdda885e-7663-40c8-bc74-3a036c66545d")
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.kubernetes_clusters.find_node_pool(id:
            'bd5f5959-5e1e-4205-a714-a914373942af', pool_id:
            'cdda885e-7663-40c8-bc74-3a036c66545d')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp = client.kubernetes.get_node_pool(cluster_id="da8fda8",
            node_pool_id="a8a8fsa")
      security:
        - bearer_auth:
            - kubernetes:read
    put:
      operationId: kubernetes_update_nodePool
      summary: Update a Node Pool in a Kubernetes Cluster
      description: >
        To update the name of a node pool, edit the tags applied to it, or
        adjust its

        number of nodes, send a PUT request to

        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/node_pools/$NODE_POOL_ID` with
        the

        following attributes.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
        - $ref: '#/components/parameters/kubernetes_node_pool_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/kubernetes_node_pool_update'
      responses:
        '202':
          $ref: '#/components/responses/node_pool_update'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "frontend","count": 1, "tags":["frontend"], "labels": {"service": "frontend", "priority": "high"}}' \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/node_pools/86c9bc8c-b2c3-4d40-8000-b0c7bee27305"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                updateRequest := &godo.KubernetesNodePoolUpdateRequest{
                        Name:  "frontend",
                        Count: 1,
                        Tags:  []string{"frontend"},
                    Labels:  map[string]string{"service": "frontend", "priority": "high"},
                    }

                nodePool, _, err := client.Kubernetes.UpdateNodePool(ctx, "9b729d1c-730c-42e1-b136-59326fb1b3bb", "e7ed8f7c-6c1e-472f-adfb-4a9a1688b999", updateRequest)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            node_pool = DropletKit::KubernetesNodePool.new(
              name: 'frontend',
              count: 1,
              tags: ['frontend']
              labels: {service: 'frontend', priority: 'high'}
            )


            client.kubernetes_clusters.update_node_pool(node_pool, id:
            'bd5f5959-5e1e-4205-a714-a914373942af', pool_id:
            '86c9bc8c-b2c3-4d40-8000-b0c7bee27305')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "name": "frontend-pool",
              "count": 3,
              "tags": [
                "k8s",
                "k8s:bd5f5959-5e1e-4205-a714-a914373942af",
                "k8s-worker",
                "production",
                "web-team"
              ],
              "labels": None,
              "taints": [
                {
                  "key": "priority",
                  "value": "high",
                  "effect": "NoSchedule"
                }
              ],
              "auto_scale": True,
              "min_nodes": 3,
              "max_nodes": 6
            }


            resp = client.kubernetes.update_node_pool(cluster_id="1fd32a",
            node_pool_id="392fa3a", body=req)
      security:
        - bearer_auth:
            - kubernetes:update
    delete:
      operationId: kubernetes_delete_nodePool
      summary: Delete a Node Pool in a Kubernetes Cluster
      description: >
        To delete a node pool, send a DELETE request to

        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/node_pools/$NODE_POOL_ID`.


        A 204 status code with no body will be returned in response to a
        successful

        request. Nodes in the pool will subsequently be drained and deleted.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
        - $ref: '#/components/parameters/kubernetes_node_pool_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/node_pools/86c9bc8c-b2c3-4d40-8000-b0c7bee27305"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Kubernetes.DeleteNodePool(ctx, "bd5f5959-5e1e-4205-a714-a914373942af", "86c9bc8c-b2c3-4d40-8000-b0c7bee27305")
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.kubernetes_clusters.delete_node_pool(id:
            'bd5f5959-5e1e-4205-a714-a914373942af', pool_id:
            '86c9bc8c-b2c3-4d40-8000-b0c7bee27305')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp = client.kubernetes.delete_node_pool(cluster_id="da8fda8",
            node_pool_id="a8f3da")
      security:
        - bearer_auth:
            - kubernetes:delete
  /v2/kubernetes/clusters/{cluster_id}/node_pools/{node_pool_id}/nodes/{node_id}:
    delete:
      operationId: kubernetes_delete_node
      summary: Delete a Node in a Kubernetes Cluster
      description: >
        To delete a single node in a pool, send a DELETE request to

        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/node_pools/$NODE_POOL_ID/nodes/$NODE_ID`.


        Appending the `skip_drain=1` query parameter to the request causes node

        draining to be skipped. Omitting the query parameter or setting its
        value to

        `0` carries out draining prior to deletion.


        Appending the `replace=1` query parameter to the request causes the node
        to

        be replaced by a new one after deletion. Omitting the query parameter or

        setting its value to `0` deletes without replacement.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
        - $ref: '#/components/parameters/kubernetes_node_pool_id'
        - $ref: '#/components/parameters/kubernetes_node_id'
        - $ref: '#/components/parameters/kubernetes_node_skip_drain'
        - $ref: '#/components/parameters/kubernetes_node_replace'
      responses:
        '202':
          $ref: '#/components/responses/accepted'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/node_pools/86c9bc8c-b2c3-4d40-8000-b0c7bee27305/nodes/478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f?skip_drain=0&replace=1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                recycleRequest := &godo.KubernetesNodePoolRecycleNodesRequest{
                    Nodes: []string{"3385619f-8ec3-42ba-bb23-8d21b8ba7518", "4b8f60ff-ba06-4523-a6a4-b8148244c7e6"},
                }

                _, err := client.Kubernetes.RecycleNodePoolNodes(ctx, "bd5f5959-5e1e-4205-a714-a914373942af", "86c9bc8c-b2c3-4d40-8000-b0c7bee27305", recycleRequest)
            }
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp = client.kubernetes.delete_node(cluster_id="da8fda8",
            node_pool_id="a8f3da", node_id="fa09daf")
      security:
        - bearer_auth:
            - kubernetes:delete
  /v2/kubernetes/clusters/{cluster_id}/node_pools/{node_pool_id}/recycle:
    post:
      operationId: kubernetes_recycle_node_pool
      deprecated: true
      summary: Recycle a Kubernetes Node Pool
      description: >
        The endpoint has been deprecated. Please use the DELETE

        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/node_pools/$NODE_POOL_ID/nodes/$NODE_ID`

        method instead.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
        - $ref: '#/components/parameters/kubernetes_node_pool_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                nodes:
                  type: array
                  items:
                    type: string
                  example:
                    - d8db5e1a-6103-43b5-a7b3-8a948210a9fc
      responses:
        '202':
          $ref: '#/components/responses/accepted'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      security:
        - bearer_auth:
            - kubernetes:delete
  /v2/kubernetes/clusters/{cluster_id}/user:
    get:
      operationId: kubernetes_get_clusterUser
      summary: Retrieve User Information for a Kubernetes Cluster
      description: >
        To show information the user associated with a Kubernetes cluster, send
        a GET

        request to `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/user`.
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      responses:
        '200':
          $ref: '#/components/responses/cluster_user'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/user"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.kubernetes.get_cluster_user(cluster_id="da8fda8")
      security:
        - bearer_auth:
            - kubernetes:read
  /v2/kubernetes/options:
    get:
      operationId: kubernetes_list_options
      summary: List Available Regions, Node Sizes, and Versions of Kubernetes
      description: >-
        To list the versions of Kubernetes available for use, the regions that
        support Kubernetes, and the available node sizes, send a GET request to
        `/v2/kubernetes/options`.
      tags:
        - Kubernetes
      responses:
        '200':
          $ref: '#/components/responses/all_options'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/options"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                options, _, err := client.Kubernetes.GetOptions(ctx)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.kubernetes_options.all
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.kubernetes.list_options()
      security:
        - bearer_auth:
            - kubernetes:read
  /v2/kubernetes/clusters/{cluster_id}/clusterlint:
    post:
      operationId: kubernetes_run_clusterLint
      summary: Run Clusterlint Checks on a Kubernetes Cluster
      description: >
        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).
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/clusterlint_request'
      responses:
        '202':
          $ref: '#/components/responses/clusterlint_run'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"include_groups": ["basic"], "include_checks": ["bare-pods"]}' \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/clusterlint"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "include_groups": [
                "basic",
                "doks",
                "security"
              ],
              "include_checks": [
                "bare-pods",
                "resource-requirements"
              ],
              "exclude_groups": [
                "workload-health"
              ],
              "exclude_checks": [
                "default-namespace"
              ]
            }


            resp = client.kubernetes.run_cluster_lint(cluster_id="1fd32a",
            body=req)
      security:
        - bearer_auth:
            - kubernetes:create
    get:
      operationId: kubernetes_get_clusterLintResults
      summary: Fetch Clusterlint Diagnostics for a Kubernetes Cluster
      description: >
        To request clusterlint diagnostics for your cluster, send a GET request
        to

        `/v2/kubernetes/clusters/$K8S_CLUSTER_ID/clusterlint`. If the `run_id`
        query

        parameter is provided, then the diagnostics for the specific run is
        fetched.

        By default, the latest results are shown.


        To find out how to address clusterlint feedback, please refer to

        [the clusterlint check
        documentation](https://github.com/digitalocean/clusterlint/blob/master/checks.md).
      tags:
        - Kubernetes
      parameters:
        - $ref: '#/components/parameters/kubernetes_cluster_id'
        - $ref: '#/components/parameters/clusterlint_run_id'
      responses:
        '200':
          $ref: '#/components/responses/clusterlint_results'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/kubernetes/clusters/bd5f5959-5e1e-4205-a714-a914373942af/clusterlint"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.kubernetes.get_cluster_lint_results(cluster_id="da8fda8")
      security:
        - bearer_auth:
            - kubernetes:read
  /v2/kubernetes/registry:
    post:
      operationId: kubernetes_add_registry
      summary: Add Container Registry to Kubernetes Clusters
      description: >-
        To integrate the container registry with Kubernetes clusters, send a
        POST request to `/v2/kubernetes/registry`.
      tags:
        - Kubernetes
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/cluster_registries'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"cluster_uuids": ["bd5f5959-5e1e-4205-a714-a914373942af", "50c2f44c-011d-493e-aee5-361a4a0d1844"]}' \
              "https://api.digitalocean.com/v2/kubernetes/registry"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Kubernetes.AddRegistry(ctx, &godo.KubernetesClusterRegistryRequest{ClusterUUIDs: []string{"bd5f5959-5e1e-4205-a714-a914373942af"}})
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "cluster_uuids": [
                "bd5f5959-5e1e-4205-a714-a914373942af",
                "50c2f44c-011d-493e-aee5-361a4a0d1844"
              ]
            }

            resp = client.kubernetes.add_registry(body=req)
      security:
        - bearer_auth:
            - kubernetes:create
    delete:
      operationId: kubernetes_remove_registry
      summary: Remove Container Registry from Kubernetes Clusters
      description: >-
        To remove the container registry from Kubernetes clusters, send a DELETE
        request to `/v2/kubernetes/registry`.
      tags:
        - Kubernetes
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/cluster_registries'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"cluster_uuids": ["bd5f5959-5e1e-4205-a714-a914373942af", "50c2f44c-011d-493e-aee5-361a4a0d1844"]}' \
              "https://api.digitalocean.com/v2/kubernetes/registry"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Kubernetes.RemoveRegistry(ctx, &godo.KubernetesClusterRegistryRequest{ClusterUUIDs: []string{"bd5f5959-5e1e-4205-a714-a914373942af"}})
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "cluster_uuids": [
                "bd5f5959-5e1e-4205-a714-a914373942af",
                "50c2f44c-011d-493e-aee5-361a4a0d1844"
              ]
            }

            resp = client.kubernetes.remove_registry(body=req)
      security:
        - bearer_auth:
            - kubernetes:delete
  /v2/load_balancers:
    post:
      operationId: loadBalancers_create
      summary: Create a New Load Balancer
      description: >
        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.
      tags:
        - Load Balancers
      requestBody:
        required: true
        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
      responses:
        '202':
          $ref: '#/components/responses/load_balancer_create'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            # Create new load balancer
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "example-lb-01","size_unit": 1, "region": "nyc3", "forwarding_rules":[{"entry_protocol":"http","entry_port":80,"target_protocol":"http","target_port":80,"certificate_id":"","tls_passthrough":false}, {"entry_protocol": "https","entry_port": 444,"target_protocol": "https","target_port": 443,"tls_passthrough": true}], "health_check":{"protocol":"http","port":80,"path":"/","check_interval_seconds":10,"response_timeout_seconds":5,"healthy_threshold":5,"unhealthy_threshold":3}, "sticky_sessions":{"type":"none"}, "firewall":{"deny":["ip:1.2.3.4","cidr:2.3.4.0/24"],"allow":["cidr:1.2.0.0/16","ip:2.3.4.5"]}, "droplet_ids": [3164444, 3164445]}' \
              "https://api.digitalocean.com/v2/load_balancers"

            # Create new load balancer with Droplet tag
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "example-lb-01", "region": "nyc3", "size_unit": 1, "forwarding_rules":[{"entry_protocol":"http","entry_port":80,"target_protocol":"http","target_port":80,"certificate_id":"","tls_passthrough":false}, {"entry_protocol": "https","entry_port": 444,"target_protocol": "https","target_port": 443,"tls_passthrough": true}], "health_check":{"protocol":"http","port":80,"path":"/","check_interval_seconds":10,"response_timeout_seconds":5,"healthy_threshold":5,"unhealthy_threshold":3}, "sticky_sessions":{"type":"none"}, "firewall":{"deny":["ip:1.2.3.4", "cidr:2.3.4.0/24"],"allow":["cidr:1.2.0.0/16","ip:2.3.4.5"]}, "tag": "web:prod"}' \
              "https://api.digitalocean.com/v2/load_balancers"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.LoadBalancerRequest{
                    Name:      "example-01",
                    SizeUnit: "1",
                    Algorithm: "round_robin",
                    Region:    "nyc3",
                    ForwardingRules: []godo.ForwardingRule{
                        {
                            EntryProtocol:  "http",
                            EntryPort:      80,
                            TargetProtocol: "http",
                            TargetPort:     80,
                        },
                        {
                            EntryProtocol:  "https",
                            EntryPort:      443,
                            TargetProtocol: "https",
                            TargetPort:     443,
                            TlsPassthrough: true,
                        },
                    },
                    HealthCheck: &godo.HealthCheck{
                        Protocol:               "http",
                        Port:                   80,
                        Path:                   "/",
                        CheckIntervalSeconds:   10,
                        ResponseTimeoutSeconds: 5,
                        HealthyThreshold:       5,
                        UnhealthyThreshold:     3,
                    },
                    StickySessions: &godo.StickySessions{
                        Type: "none",
                    },
                    DropletIDs:          []int{3164444, 3164445},
                    RedirectHttpToHttps: false,
                    Firewall:            &godo.LBFirewall{
                        Deny: []string{"ip:1.2.3.4", "cidr:2.3.4.0/24"},
                        Allow: []string{"cidr:1.2.0.0/16", "ip:2.3.4.5"},
                    }
              // Create new load balancer with Droplet tag
              //     Tag:                 "web:prod",
              //     RedirectHttpToHttps: false,
                }

                lb, _, err := client.LoadBalancers.Create(ctx, createRequest)
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            load_balancer = DropletKit::LoadBalancer.new(
              name: 'example-lb-01',
              size_unit: '1',
              algorithm: 'round_robin',
            # Create new load balancer with Droplet tag
            # tag: 'web:prod',
              droplet_ids: [ 3164444, 3164445],
              redirect_http_to_https: true,
              region: 'nyc3',
              forwarding_rules: [
                DropletKit::ForwardingRule.new(
                  entry_protocol: 'http',
                  entry_port: 80,
                  target_protocol: 'http',
                  target_port: 80,
                  certificate_id: '',
                  tls_passthrough: false
                ),
                DropletKit::ForwardingRule.new(
                  entry_protocol: 'https',
                  entry_port: 443,
                  target_protocol: 'https',
                  target_port: 443,
                  certificate_id: '',
                  tls_passthrough: true
                )
              ],
              sticky_sessions: DropletKit::StickySession.new(
                type: 'cookies',
                cookie_name: 'DO-LB',
                cookie_ttl_seconds: 5
              ),
              health_check: DropletKit::HealthCheck.new(
                protocol: 'http',
                port: 80,
                path: '/',
                check_interval_seconds: 10,
                response_timeout_seconds: 5,
                healthy_threshold: 5,
                unhealthy_threshold: 3
              )
            )
            client.load_balancers.create(load_balancer)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "example-lb-01",
              "region": "nyc3",
              "forwarding_rules": [
                {
                  "entry_protocol": "http",
                  "entry_port": 80,
                  "target_protocol": "http",
                  "target_port": 80
                },
                {
                  "entry_protocol": "https",
                  "entry_port": 443,
                  "target_protocol": "https",
                  "target_port": 443,
                  "tls_passthrough": True
                }
              ],
              "droplet_ids": [
                3164444,
                3164445
              ],
              "project_id": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30",
              "http_idle_timeout_seconds": 60,
              "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"
                ]
              }
            }

            resp = client.load_balancers.create(body=req)
      security:
        - bearer_auth:
            - load_balancer:create
    get:
      operationId: loadBalancers_list
      summary: List All Load Balancers
      description: >
        To list all of the load balancer instances on your account, send a GET
        request

        to `/v2/load_balancers`.
      tags:
        - Load Balancers
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_load_balancers'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/load_balancers"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                lbs, _, err := c.LoadBalancers.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            load_balancers = client.load_balancers.all
            load_balancers.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.load_balancers.list()
      security:
        - bearer_auth:
            - load_balancer:read
  /v2/load_balancers/{lb_id}:
    get:
      operationId: loadBalancers_get
      summary: Retrieve an Existing Load Balancer
      description: >
        To show information about a load balancer instance, send a GET request
        to

        `/v2/load_balancers/$LOAD_BALANCER_ID`.
      tags:
        - Load Balancers
      parameters:
        - $ref: '#/components/parameters/load_balancer_id'
      responses:
        '200':
          $ref: '#/components/responses/existing_load_balancer'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/load_balancers/4de7ac8b-495b-4884-9a69-1050c6793cd6"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                lb, _, err := client.LoadBalancers.Get(ctx, "4de7ac8b-495b-4884-9a69-1050c6793cd6")
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.load_balancers.find(id:
            '4de7ac8b-495b-4884-9a69-1050c6793cd6')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.load_balancers.get(lb_id="afda3ad")
      security:
        - bearer_auth:
            - load_balancer:read
    put:
      operationId: loadBalancers_update
      summary: Update a Load Balancer
      description: >
        To update a load balancer's settings, send a PUT request to

        `/v2/load_balancers/$LOAD_BALANCER_ID`. The request should contain a
        full

        representation of the load balancer including existing attributes. It
        may

        contain _one of_ the `droplets_ids` or `tag` attributes as they are
        mutually

        exclusive. **Note that any attribute that is not provided will be reset
        to its

        default value.**
      tags:
        - Load Balancers
      parameters:
        - $ref: '#/components/parameters/load_balancer_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/load_balancer_create'
            examples:
              load_balancer_update_request:
                $ref: '#/components/examples/load_balancer_update_request'
      responses:
        '200':
          $ref: '#/components/responses/updated_load_balancer'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"example-lb-01","size_unit":"2","region":"nyc3","algorithm":"least_connections","forwarding_rules":[{"entry_protocol":"http","entry_port":80,"target_protocol":"http","target_port":80},{"entry_protocol":"https","entry_port":444,"target_protocol":"https","target_port":443,"tls_passthrough":true}],"health_check":{"protocol":"http","port":80,"path":"/","check_interval_seconds":10,"response_timeout_seconds":5,"healthy_threshold":5,"unhealthy_threshold":3},"sticky_sessions":{"type":"cookies", "cookie_name": "DO_LB", "cookie_ttl_seconds": 300}, "firewall":{"deny":["ip:1.2.3.4","cidr:2.3.4.0/24"], "allow":["cidr:1.2.0.0/16","ip:2.3.4.5"]}, "droplet_ids": [3164444, 3164445]}' \
              "https://api.digitalocean.com/v2/load_balancers/4de7ac8b-495b-4884-9a69-1050c6793cd6"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                updateRequest := &godo.LoadBalancerRequest{
                    Name:      "example-01",
                    SizeUnit: "2",
                    Algorithm: "round_robin",
                    Region:    "nyc3",
                    ForwardingRules: []godo.ForwardingRule{
                        {
                            EntryProtocol:  "http",
                            EntryPort:      80,
                            TargetProtocol: "http",
                            TargetPort:     80,
                        },
                        {
                            EntryProtocol:  "https",
                            EntryPort:      443,
                            TargetProtocol: "https",
                            TargetPort:     443,
                            TlsPassthrough: true,
                        },
                    },
                    HealthCheck: &godo.HealthCheck{
                        Protocol:               "http",
                        Port:                   80,
                        Path:                   "/",
                        CheckIntervalSeconds:   10,
                        ResponseTimeoutSeconds: 5,
                        HealthyThreshold:       5,
                        UnhealthyThreshold:     3,
                    },
                    StickySessions: &godo.StickySessions{
                        Type:             "cookies",
                        CookieName:       "DO_LB",
                        CookieTtlSeconds: 300,
                    },
                    DropletIDs:          []int{3164444, 3164445},
                    RedirectHttpToHttps: false,
                    Firewall:            &godo.LBFirewall{
                        Deny: []string{"ip:1.2.3.4", "cidr:2.3.4.0/24"},
                        Allow: []string{"cidr:1.2.0.0/16", "ip:2.3.4.5"},
                    }
                }

                lb, _, err := c.LoadBalancers.Update(ctx, "c2c97ca7-6f63-4e23-8909-906fd86efb5e", updateRequest)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            load_balancer = DropletKit::LoadBalancer.new(
              name: 'example-lb-01',
              size_unit: '2',
              algorithm: 'round_robin',
              droplet_ids: [ 3164444, 3164445],
              redirect_http_to_https: true,
              region: 'nyc3',
              forwarding_rules: [
                DropletKit::ForwardingRule.new(
                  entry_protocol: 'http',
                  entry_port: 80,
                  target_protocol: 'http',
                  target_port: 80,
                  certificate_id: '',
                  tls_passthrough: false
                ),
                DropletKit::ForwardingRule.new(
                  entry_protocol: 'https',
                  entry_port: 443,
                  target_protocol: 'https',
                  target_port: 443,
                  certificate_id: '',
                  tls_passthrough: true
                )
              ],
              sticky_sessions: DropletKit::StickySession.new(
                type: 'cookies',
                cookie_name: 'DO-LB-COOKIE',
                cookie_ttl_seconds: 5
              ),
              health_check: DropletKit::HealthCheck.new(
                protocol: 'http',
                port: 80,
                path: '/',
                check_interval_seconds: 10,
                response_timeout_seconds: 5,
                healthy_threshold: 5,
                unhealthy_threshold: 3
              )
            )

            client.load_balancers.update(load_balancer, id:
            '4de7ac8b-495b-4884-9a69-1050c6793cd6')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "updated-example-lb-01",
              "region": "nyc3",
              "droplet_ids": [
                3164444,
                3164445
              ],
              "algorithm": "round_robin",
              "forwarding_rules": [
                {
                  "entry_protocol": "http",
                  "entry_port": 80,
                  "target_protocol": "http",
                  "target_port": 80,
                  "certificate_id": "",
                  "tls_passthrough": false
                },
                {
                  "entry_protocol": "https",
                  "entry_port": 443,
                  "target_protocol": "https",
                  "target_port": 443,
                  "certificate_id": "",
                  "tls_passthrough": true
                }
              ],
              "health_check": {
                "protocol": "http",
                "port": 80,
                "path": "/",
                "check_interval_seconds": 10,
                "response_timeout_seconds": 5,
                "healthy_threshold": 5,
                "unhealthy_threshold": 3
              },
              "sticky_sessions": {
                "type": "none"
              },
              "redirect_http_to_https": False,
              "enable_proxy_protocol": True,
              "enable_backend_keepalive": True,
              "vpc_uuid": "c33931f2-a26a-4e61-b85c-4e95a2ec431b",
              "project_id": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30",
              "http_idle_timeout_seconds": 60,
              "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"
                ]
              }
            }
            resp = client.load_balancers.update(lb_id="fda9fda", body=req)
      security:
        - bearer_auth:
            - load_balancer:update
    delete:
      operationId: loadBalancers_delete
      summary: Delete a Load Balancer
      description: >
        To delete a load balancer instance, disassociating any Droplets assigned
        to it

        and removing it from your account, send a DELETE request to

        `/v2/load_balancers/$LOAD_BALANCER_ID`.


        A successful request will receive a 204 status code with no body in
        response.

        This indicates that the request was processed successfully.
      tags:
        - Load Balancers
      parameters:
        - $ref: '#/components/parameters/load_balancer_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/load_balancers/4de7ac8b-495b-4884-9a69-1050c6793cd6"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.LoadBalancers.Delete(ctx, "4de7ac8b-495b-4884-9a69-1050c6793cd6")
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.load_balancers.delete(id:
            '4de7ac8b-495b-4884-9a69-1050c6793cd6')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.load_balancers.delete(lb_id="afda3ad")
      security:
        - bearer_auth:
            - load_balancer:delete
  /v2/load_balancers/{lb_id}/droplets:
    post:
      operationId: loadBalancers_add_droplets
      summary: Add Droplets to a Load Balancer
      description: >
        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.
      tags:
        - Load Balancers
      parameters:
        - $ref: '#/components/parameters/load_balancer_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              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.
              required:
                - droplet_ids
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"droplet_ids": [3164446, 3164447]}' \
              "https://api.digitalocean.com/v2/load_balancers/4de7ac8b-495b-4884-9a69-1050c6793cd6/droplets"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                droplets := []int{3164446, 3164447}
                _, err := client.LoadBalancers.AddDroplets(ctx, "4de7ac8b-495b-4884-9a69-1050c6793cd6", droplets...)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.load_balancers.add_droplets([3164446, 3164447], id:
            '4de7ac8b-495b-4884-9a69-1050c6793cd6')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "droplet_ids": [
                3164444,
                3164445
              ]
            }

            resp = client.load_balancers.add_droplets(lb_id="1fd32a", body=req)
      security:
        - bearer_auth:
            - load_balancer:update
    delete:
      operationId: loadBalancers_remove_droplets
      summary: Remove Droplets from a Load Balancer
      description: >
        To remove a Droplet from a load balancer instance, send a DELETE 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.


        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.
      tags:
        - Load Balancers
      parameters:
        - $ref: '#/components/parameters/load_balancer_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              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.
              required:
                - droplet_ids
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"droplet_ids": [3164446, 3164447]}' \
              "https://api.digitalocean.com/v2/load_balancers/4de7ac8b-495b-4884-9a69-1050c6793cd6/droplets"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                droplets := []int{3164446, 3164447}
                _, err := client.LoadBalancers.RemoveDroplets(ctx, "4de7ac8b-495b-4884-9a69-1050c6793cd6", droplets...)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.load_balancers.remove_droplets([3164446, 3164447], id:
            '4de7ac8b-495b-4884-9a69-1050c6793cd6')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "droplet_ids": [
                3164444,
                3164445
              ]
            }


            resp = client.load_balancers.remove_droplets(lb_id="fda9fda",
            body=req)
      security:
        - bearer_auth:
            - load_balancer:update
  /v2/load_balancers/{lb_id}/forwarding_rules:
    post:
      operationId: loadBalancers_add_forwardingRules
      summary: Add Forwarding Rules to a Load Balancer
      description: >
        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.
      tags:
        - Load Balancers
      parameters:
        - $ref: '#/components/parameters/load_balancer_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                forwarding_rules:
                  type: array
                  minItems: 1
                  items:
                    $ref: '#/components/schemas/forwarding_rule'
              required:
                - forwarding_rules
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"forwarding_rules": [{"entry_protocol": "tcp","entry_port": 3306,"target_protocol": "tcp","target_port": 3306}]}' \
              "https://api.digitalocean.com/v2/load_balancers/4de7ac8b-495b-4884-9a69-1050c6793cd6/forwarding_rules"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                forwardingRule := []godo.ForwardingRule{
                    {
                        EntryProtocol:  "tcp",
                        EntryPort:      3306,
                        TargetProtocol: "tcp",
                        TargetPort:     3306,
                    },
                }
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            rule = DropletKit::ForwardingRule.new(
              entry_protocol: 'tcp',
              entry_port: 3306,
              target_protocol: 'tcp',
              target_port: 3306,
              certificate_id: '',
              tls_passthrough: false
            )

            client.load_balancers.add_forwarding_rules([rule], id:
            '4de7ac8b-495b-4884-9a69-1050c6793cd6')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "forwarding_rules": [
                {
                  "entry_protocol": "https",
                  "entry_port": 443,
                  "target_protocol": "http",
                  "target_port": 80,
                  "certificate_id": "892071a0-bb95-49bc-8021-3afd67a210bf",
                  "tls_passthrough": False
                }
              ]
            }


            resp = client.load_balancers.add_forwarding_rules(lb_id="1fd32a",
            body=req)
      security:
        - bearer_auth:
            - load_balancer:update
    delete:
      operationId: loadBalancers_remove_forwardingRules
      summary: Remove Forwarding Rules from a Load Balancer
      description: >
        To remove forwarding rules from a load balancer instance, send a DELETE

        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 removed.


        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.
      tags:
        - Load Balancers
      parameters:
        - $ref: '#/components/parameters/load_balancer_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                forwarding_rules:
                  type: array
                  minItems: 1
                  items:
                    $ref: '#/components/schemas/forwarding_rule'
              required:
                - forwarding_rules
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"forwarding_rules": [{"entry_protocol": "tcp","entry_port": 3306,"target_protocol": "tcp","target_port": 3306}]}' \
              "https://api.digitalocean.com/v2/load_balancers/4de7ac8b-495b-4884-9a69-1050c6793cd6/forwarding_rules"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                forwardingRule := []godo.ForwardingRule{
                    {
                        EntryProtocol:  "tcp",
                        EntryPort:      3306,
                        TargetProtocol: "tcp",
                        TargetPort:     3306,
                    },
                }

                _, err := client.LoadBalancers.RemoveForwardingRules(ctx, "4de7ac8b-495b-4884-9a69-1050c6793cd6", forwardingRule...)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            rule = DropletKit::ForwardingRule.new(
              entry_protocol: 'tcp',
              entry_port: 3306,
              target_protocol: 'tcp',
              target_port: 3306,
              certificate_id: '',
              tls_passthrough: false
            )

            client.load_balancers.remove_forwarding_rules([rule], id:
            '4de7ac8b-495b-4884-9a69-1050c6793cd6')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "forwarding_rules": [
                {
                  "entry_protocol": "https",
                  "entry_port": 443,
                  "target_protocol": "http",
                  "target_port": 80,
                  "certificate_id": "892071a0-bb95-49bc-8021-3afd67a210bf",
                  "tls_passthrough": False
                }
              ]
            }


            resp =
            client.load_balancers.remove_forwarding_rules(lb_id="fda9fda",
            body=req)
      security:
        - bearer_auth:
            - load_balancer:update
  /v2/monitoring/alerts:
    get:
      operationId: monitoring_list_alertPolicy
      summary: List Alert Policies
      description: >-
        Returns all alert policies that are configured for the given account. To
        List all alert policies, send a GET request to `/v2/monitoring/alerts`.
      tags:
        - Monitoring
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/list_alert_policy_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/alerts"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.monitoring.list_alert_policy()
      security:
        - bearer_auth:
            - monitoring:read
    post:
      operationId: monitoring_create_alertPolicy
      summary: Create Alert Policy
      description: To create a new alert, send a POST request to `/v2/monitoring/alerts`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/alert_policy_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      requestBody:
        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:


          Type | Description | Valid Entity Type

          -----|-------------|--------------------

          `v1/insights/droplet/memory_utilization_percent` | alert on the
          percent of memory utilization | Droplet ID

          `v1/insights/droplet/disk_read` | alert on the rate of disk read I/O
          in MBps | Droplet ID

          `v1/insights/droplet/load_5` | alert on the 5 minute load average |
          Droplet ID

          `v1/insights/droplet/load_15` | alert on the 15 minute load average |
          Droplet ID

          `v1/insights/droplet/disk_utilization_percent` | alert on the percent
          of disk utilization | Droplet ID

          `v1/insights/droplet/cpu` | alert on the percent of CPU utilization |
          Droplet ID

          `v1/insights/droplet/disk_write` | alert on the rate of disk write I/O
          in MBps | Droplet ID

          `v1/insights/droplet/public_outbound_bandwidth` | alert on the rate of
          public outbound bandwidth in Mbps | Droplet ID

          `v1/insights/droplet/public_inbound_bandwidth` | alert on the rate of
          public inbound bandwidth in Mbps | Droplet ID

          `v1/insights/droplet/private_outbound_bandwidth` | alert on the rate
          of private outbound bandwidth in Mbps | Droplet ID

          `v1/insights/droplet/private_inbound_bandwidth` | alert on the rate of
          private inbound bandwidth in Mbps | Droplet ID

          `v1/insights/droplet/load_1` | alert on the 1 minute load average |
          Droplet ID

          `v1/insights/lbaas/avg_cpu_utilization_percent`|alert on the percent
          of CPU utilization|load balancer ID

          `v1/insights/lbaas/connection_utilization_percent`|alert on the
          percent of connection utilization|load balancer ID

          `v1/insights/lbaas/droplet_health`|alert on Droplet health status
          changes|load balancer ID

          `v1/insights/lbaas/tls_connections_per_second_utilization_percent`|alert
          on the percent of TLS connections per second utilization|load balancer
          ID

          `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

          `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

          `v1/insights/lbaas/increase_in_http_error_rate_count_5xx`|alert on the
          count of 5xx level http errors over 5m|load balancer ID

          `v1/insights/lbaas/increase_in_http_error_rate_count_4xx`|alert on the
          count of 4xx level http errors over 5m|load balancer ID

          `v1/insights/lbaas/high_http_request_response_time`|alert on high
          average http response time|load balancer ID

          `v1/insights/lbaas/high_http_request_response_time_50p`|alert on high
          50th percentile http response time|load balancer ID

          `v1/insights/lbaas/high_http_request_response_time_95p`|alert on high
          95th percentile http response time|load balancer ID

          `v1/insights/lbaas/high_http_request_response_time_99p`|alert on high
          99th percentile http response time|load balancer ID

          `v1/dbaas/alerts/load_15_alerts` | alert on 15 minute load average
          across the database cluster | database cluster UUID

          `v1/dbaas/alerts/memory_utilization_alerts` | alert on the percent
          memory utilization average across the database cluster | database
          cluster UUID

          `v1/dbaas/alerts/disk_utilization_alerts` | alert on the percent disk
          utilization average across the database cluster | database cluster
          UUID

          `v1/dbaas/alerts/cpu_alerts` | alert on the percent CPU usage average
          across the database cluster | database cluster UUID
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/alert_policy_request'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X POST
            \                                                                                                                              
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/alerts" \
              --data '{"alerts":{"email":["alerts@example.com"]},"compare":"GreaterThan","description":"CPU Alert","enabled":true,"entities":["12345678"],"tags":["droplet_tag"],"type":"v1/insights/droplet/cpu","value":80,"window":"5m"}'
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "alerts": {
                "email": [
                  "bob@exmaple.com"
                ],
                "slack": [
                  {
                    "channel": "Production Alerts",
                    "url": "https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ"
                  }
                ]
              },
              "compare": "GreaterThan",
              "description": "CPU Alert",
              "enabled": True,
              "entities": [
                "192018292"
              ],
              "tags": [
                "droplet_tag"
              ],
              "type": "v1/insights/droplet/cpu",
              "value": 80,
              "window": "5m"
            }

            resp = client.monitoring.create_alert_policy(body=req)
      security:
        - bearer_auth:
            - monitoring:create
  /v2/monitoring/alerts/{alert_uuid}:
    get:
      operationId: monitoring_get_alertPolicy
      summary: Retrieve an Existing Alert Policy
      description: >-
        To retrieve a given alert policy, send a GET request to
        `/v2/monitoring/alerts/{alert_uuid}`
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/alert_policy_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/alert_uuid'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/alerts/78b3da62-27e5-49ba-ac70-5db0b5935c64"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.monitoring.get_alert_policy(alert_uuid="dfa8da")
      security:
        - bearer_auth:
            - monitoring:read
    put:
      operationId: monitoring_update_alertPolicy
      summary: Update an Alert Policy
      description: >-
        To update en existing policy, send a PUT request to
        `v2/monitoring/alerts/{alert_uuid}`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/alert_policy_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/alert_uuid'
      requestBody:
        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:


          Type | Description | Valid Entity Type

          -----|-------------|--------------------

          `v1/insights/droplet/memory_utilization_percent` | alert on the
          percent of memory utilization | Droplet ID

          `v1/insights/droplet/disk_read` | alert on the rate of disk read I/O
          in MBps | Droplet ID

          `v1/insights/droplet/load_5` | alert on the 5 minute load average |
          Droplet ID

          `v1/insights/droplet/load_15` | alert on the 15 minute load average |
          Droplet ID

          `v1/insights/droplet/disk_utilization_percent` | alert on the percent
          of disk utilization | Droplet ID

          `v1/insights/droplet/cpu` | alert on the percent of CPU utilization |
          Droplet ID

          `v1/insights/droplet/disk_write` | alert on the rate of disk write I/O
          in MBps | Droplet ID

          `v1/insights/droplet/public_outbound_bandwidth` | alert on the rate of
          public outbound bandwidth in Mbps | Droplet ID

          `v1/insights/droplet/public_inbound_bandwidth` | alert on the rate of
          public inbound bandwidth in Mbps | Droplet ID

          `v1/insights/droplet/private_outbound_bandwidth` | alert on the rate
          of private outbound bandwidth in Mbps | Droplet ID

          `v1/insights/droplet/private_inbound_bandwidth` | alert on the rate of
          private inbound bandwidth in Mbps | Droplet ID

          `v1/insights/droplet/load_1` | alert on the 1 minute load average |
          Droplet ID

          `v1/insights/lbaas/avg_cpu_utilization_percent`|alert on the percent
          of CPU utilization|load balancer ID

          `v1/insights/lbaas/connection_utilization_percent`|alert on the
          percent of connection utilization|load balancer ID

          `v1/insights/lbaas/droplet_health`|alert on Droplet health status
          changes|load balancer ID

          `v1/insights/lbaas/tls_connections_per_second_utilization_percent`|alert
          on the percent of TLS connections per second utilization|load balancer
          ID

          `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

          `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

          `v1/insights/lbaas/increase_in_http_error_rate_count_5xx`|alert on the
          count of 5xx level http errors over 5m|load balancer ID

          `v1/insights/lbaas/increase_in_http_error_rate_count_4xx`|alert on the
          count of 4xx level http errors over 5m|load balancer ID

          `v1/insights/lbaas/high_http_request_response_time`|alert on high
          average http response time|load balancer ID

          `v1/insights/lbaas/high_http_request_response_time_50p`|alert on high
          50th percentile http response time|load balancer ID

          `v1/insights/lbaas/high_http_request_response_time_95p`|alert on high
          95th percentile http response time|load balancer ID

          `v1/insights/lbaas/high_http_request_response_time_99p`|alert on high
          99th percentile http response time|load balancer ID

          `v1/dbaas/alerts/load_15_alerts` | alert on 15 minute load average
          across the database cluster | database cluster UUID

          `v1/dbaas/alerts/memory_utilization_alerts` | alert on the percent
          memory utilization average across the database cluster | database
          cluster UUID

          `v1/dbaas/alerts/disk_utilization_alerts` | alert on the percent disk
          utilization average across the database cluster | database cluster
          UUID

          `v1/dbaas/alerts/cpu_alerts` | alert on the percent CPU usage average
          across the database cluster | database cluster UUID
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/alert_policy_request'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/alerts/78b3da62-27e5-49ba-ac70-5db0b5935c64" \
              --data '{"alerts":{"email":["alerts@example.com"]},"compare":"GreaterThan","description":"CPU Alert","enabled":true,"entities":["12345678"],"tags":["droplet_tag"],"type":"v1/insights/droplet/cpu","value":80,"window":"5m"}'
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "alerts": {
                "email": [
                  "bob@exmaple.com"
                ],
                "slack": [
                  {
                    "channel": "Production Alerts",
                    "url": "https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ"
                  }
                ]
              },
              "compare": "GreaterThan",
              "description": "CPU Alert",
              "enabled": True,
              "entities": [
                "192018292"
              ],
              "tags": [
                "droplet_tag"
              ],
              "type": "v1/insights/droplet/cpu",
              "value": 80,
              "window": "5m"
            }


            resp = client.monitoring.update_alert_policy(alert_uuid="fda9da",
            body=req)
      security:
        - bearer_auth:
            - monitoring:update
    delete:
      operationId: monitoring_delete_alertPolicy
      summary: Delete an Alert Policy
      description: >-
        To delete an alert policy, send a DELETE request to
        `/v2/monitoring/alerts/{alert_uuid}`
      tags:
        - Monitoring
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/alert_uuid'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/alerts/{alert_uuid}"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.monitoring.delete_alert_policy(alert_uuid="dfa8da")
      security:
        - bearer_auth:
            - monitoring:delete
  /v2/monitoring/metrics/droplet/bandwidth:
    get:
      operationId: monitoring_get_dropletBandwidthMetrics
      summary: Get Droplet Bandwidth Metrics
      description: >-
        To retrieve bandwidth metrics for a given Droplet, send a GET request to
        `/v2/monitoring/metrics/droplet/bandwidth`. Use the `interface` query
        parameter to specify if the results should be for the `private` or
        `public` interface. Use the `direction` query parameter to specify if
        the results should be for `inbound` or `outbound` traffic.

        The metrics in the response body are in megabits per second (Mbps).
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/droplet_bandwidth_metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_droplet_id'
        - $ref: '#/components/parameters/network_interface'
        - $ref: '#/components/parameters/network_direction'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/droplet/bandwidth?host_id=222651441&interface=public&direction=outbound&start=1636051668&end=1636051668"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.monitoring.get_droplet_bandwidth_metrics(alert_uuid="dfa8da",
            host_id="17209102", interface="private", direction="inbound",
            start="1620683817", end="1620705417")
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/droplet/cpu:
    get:
      operationId: monitoring_get_DropletCpuMetrics
      summary: Get Droplet CPU Metrics
      description: >-
        To retrieve CPU metrics for a given droplet, send a GET request to
        `/v2/monitoring/metrics/droplet/cpu`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/droplet_cpu_metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_droplet_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/droplet/cpu?host_id=222651441&start=1636051668&end=1636051668"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp = client.monitoring.get_droplet_cpu_metrics(host_id="17209102",
            start="1620683817", end="1620705417")
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/droplet/filesystem_free:
    get:
      operationId: monitoring_get_dropletFilesystemFreeMetrics
      summary: Get Droplet Filesystem Free Metrics
      description: >-
        To retrieve filesystem free metrics for a given droplet, send a GET
        request to `/v2/monitoring/metrics/droplet/filesystem_free`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/droplet_filesystem_metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_droplet_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/droplet/filesystem_free?host_id=222651441&start=1636051668&end=1636051668"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.monitoring.get_droplet_filesystem_free_metrics(host_id="17209102",
            start="1620683817", end="1620705417")
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/droplet/filesystem_size:
    get:
      operationId: monitoring_get_dropletFilesystemSizeMetrics
      summary: Get Droplet Filesystem Size Metrics
      description: >-
        To retrieve filesystem size metrics for a given droplet, send a GET
        request to `/v2/monitoring/metrics/droplet/filesystem_size`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/droplet_filesystem_metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_droplet_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/droplet/filesystem_size?host_id=222651441&interface=public&direction=outbound&start=1636051668&end=1636051668"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.monitoring.get_droplet_filesystem_size_metrics(host_id="17209102",
            start="1620683817", end="1620705417")
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/droplet/load_1:
    get:
      operationId: monitoring_get_dropletLoad1Metrics
      summary: Get Droplet Load1 Metrics
      description: >-
        To retrieve 1 minute load average metrics for a given droplet, send a
        GET request to `/v2/monitoring/metrics/droplet/load_1`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_droplet_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/droplet/load_1?host_id=222651441&start=1636051668&end=1636051668"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.monitoring.get_droplet_load1_metrics(host_id="17209102",
            start="1620683817", end="1620705417")
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/droplet/load_5:
    get:
      operationId: monitoring_get_dropletLoad5Metrics
      summary: Get Droplet Load5 Metrics
      description: >-
        To retrieve 5 minute load average metrics for a given droplet, send a
        GET request to `/v2/monitoring/metrics/droplet/load_5`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_droplet_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/droplet/load_5?host_id=222651441&start=1636051668&end=1636051668"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.monitoring.get_droplet_load5_metrics(host_id="17209102",
            start="1620683817", end="1620705417")
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/droplet/load_15:
    get:
      operationId: monitoring_get_dropletLoad15Metrics
      summary: Get Droplet Load15 Metrics
      description: >-
        To retrieve 15 minute load average metrics for a given droplet, send a
        GET request to `/v2/monitoring/metrics/droplet/load_15`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_droplet_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/droplet/load_15?host_id=222651441&start=1636051668&end=1636051668"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.monitoring.get_droplet_load15_metrics(host_id="17209102",
            start="1620683817", end="1620705417")
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/droplet/memory_cached:
    get:
      operationId: monitoring_get_dropletMemoryCachedMetrics
      summary: Get Droplet Cached Memory Metrics
      description: >-
        To retrieve cached memory metrics for a given droplet, send a GET
        request to `/v2/monitoring/metrics/droplet/memory_cached`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_droplet_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/droplet/memory_cached?host_id=222651441&start=1636051668&end=1636051668"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.monitoring.get_droplet_memory_cached_metrics(host_id="17209102",
            start="1620683817", end="1620705417")
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/droplet/memory_free:
    get:
      operationId: monitoring_get_dropletMemoryFreeMetrics
      summary: Get Droplet Free Memory Metrics
      description: >-
        To retrieve free memory metrics for a given droplet, send a GET request
        to `/v2/monitoring/metrics/droplet/memory_free`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_droplet_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/droplet/memory_free?host_id=222651441&start=1636051668&end=1636051668"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.monitoring.get_droplet_memory_free_metrics(host_id="17209102",
            start="1620683817", end="1620705417")
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/droplet/memory_total:
    get:
      operationId: monitoring_get_dropletMemoryTotalMetrics
      summary: Get Droplet Total Memory Metrics
      description: >-
        To retrieve total memory metrics for a given droplet, send a GET request
        to `/v2/monitoring/metrics/droplet/memory_total`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_droplet_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/droplet/memory_total?host_id=222651441&start=1636051668&end=1636051668"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.monitoring.get_droplet_memory_total_metrics(host_id="17209102",
            start="1620683817", end="1620705417")
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/droplet/memory_available:
    get:
      operationId: monitoring_get_dropletMemoryAvailableMetrics
      summary: Get Droplet Available Memory Metrics
      description: >-
        To retrieve available memory metrics for a given droplet, send a GET
        request to `/v2/monitoring/metrics/droplet/memory_available`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_droplet_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/droplet/memory_available?host_id=222651441&start=1636051668&end=1636051668"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.monitoring.get_droplet_memory_available_metrics(host_id="17209102",
            start="1620683817", end="1620705417")
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/apps/memory_percentage:
    get:
      operationId: monitoring_get_appMemoryPercentageMetrics
      summary: Get App Memory Percentage Metrics
      description: >-
        To retrieve memory percentage metrics for a given app, send a GET
        request to `/v2/monitoring/metrics/apps/memory_percentage`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/app_metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_app_id'
        - $ref: '#/components/parameters/app_component'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/apps/memory_percentage?app_id=2db3c021-15ad-4088-bfe8-99dc972b9cf6&app_component=sample-application&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/apps/cpu_percentage:
    get:
      operationId: monitoring_get_appCPUPercentageMetrics
      summary: Get App CPU Percentage Metrics
      description: >-
        To retrieve cpu percentage metrics for a given app, send a GET request
        to `/v2/monitoring/metrics/apps/cpu_percentage`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/app_metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_app_id'
        - $ref: '#/components/parameters/app_component'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/apps/cpu_percentage?app_id=2db3c021-15ad-4088-bfe8-99dc972b9cf6&app_component=sample-application&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/apps/restart_count:
    get:
      operationId: monitoring_get_appRestartCountMetrics.yml
      summary: Get App Restart Count Metrics
      description: >-
        To retrieve restart count metrics for a given app, send a GET request to
        `/v2/monitoring/metrics/apps/restart_count`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/app_metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_app_id'
        - $ref: '#/components/parameters/app_component'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/apps/restart_count?app_id=2db3c021-15ad-4088-bfe8-99dc972b9cf6&app_component=sample-application&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_connections_current:
    get:
      operationId: monitoring_get_lb_frontend_connections_current
      summary: Get Load Balancer Frontend Total Current Active Connections Metrics
      description: >-
        To retrieve frontend total current active connections for a given load
        balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_connections_current`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_connections_current?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_connections_limit:
    get:
      operationId: monitoring_get_lb_frontend_connections_limit
      summary: Get Load Balancer Frontend Max Connections Limit Metrics
      description: >-
        To retrieve frontend max connections limit for a given load balancer,
        send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_connections_limit`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_connections_limit?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_cpu_utilization:
    get:
      operationId: monitoring_get_lb_frontend_cpu_utilization
      summary: Get Load Balancer Frontend Average Percentage CPU Utilization Metrics
      description: >-
        To retrieve frontend average percentage CPU utilization for a given load
        balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_cpu_utilization`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_cpu_utilization?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_firewall_dropped_bytes:
    get:
      operationId: monitoring_get_lb_frontend_firewall_dropped_bytes
      summary: Get Load Balancer Frontend Firewall Dropped Bytes Metrics
      description: >-
        To retrieve firewall dropped bytes for a given load balancer, send a GET
        request to
        `/v2/monitoring/metrics/load_balancer/frontend_firewall_dropped_bytes`.
        This is currently only supported for network load balancers.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_firewall_dropped_bytes?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_firewall_dropped_packets:
    get:
      operationId: monitoring_get_lb_frontend_firewall_dropped_packets
      summary: Get Load Balancer Frontend Firewall Dropped Packets Metrics
      description: >-
        To retrieve firewall dropped packets per second for a given load
        balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_firewall_dropped_packets`.
        This is currently only supported for network load balancers.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_firewall_dropped_packets?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_http_responses:
    get:
      operationId: monitoring_get_lb_frontend_http_responses
      summary: Get Load Balancer Frontend HTTP Rate Of Response Code Metrics
      description: >-
        To retrieve frontend HTTP rate of response code for a given load
        balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_http_responses`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_http_responses?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_http_requests_per_second:
    get:
      operationId: monitoring_get_lb_frontend_http_requests_per_second
      summary: Get Load Balancer Frontend HTTP Requests Metrics
      description: >-
        To retrieve frontend HTTP requests per second for a given load balancer,
        send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_http_requests_per_second`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_http_requests_per_second?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_network_throughput_http:
    get:
      operationId: monitoring_get_lb_frontend_network_throughput_http
      summary: Get Load Balancer Frontend HTTP Throughput Metrics
      description: >-
        To retrieve frontend HTTP throughput in bytes per second for a given
        load balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_network_throughput_http`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_network_throughput_http?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_network_throughput_udp:
    get:
      operationId: monitoring_get_lb_frontend_network_throughput_udp
      summary: Get Load Balancer Frontend UDP Throughput Metrics
      description: >-
        To retrieve frontend UDP throughput in bytes per second for a given load
        balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_network_throughput_udp`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_network_throughput_udp?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_network_throughput_tcp:
    get:
      operationId: monitoring_get_lb_frontend_network_throughput_tcp
      summary: Get Load Balancer Frontend TCP Throughput Metrics
      description: >-
        To retrieve frontend TCP throughput in bytes per second for a given load
        balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_network_throughput_tcp`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_network_throughput_tcp?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_nlb_tcp_network_throughput:
    get:
      operationId: monitoring_get_lb_frontend_nlb_tcp_network_throughput
      summary: Get Network Load Balancer Frontend TCP Throughput Metrics
      description: >-
        To retrieve frontend TCP throughput in bytes per second for a given load
        balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_nlb_tcp_network_throughput`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_nlb_tcp_network_throughput?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_nlb_udp_network_throughput:
    get:
      operationId: monitoring_get_lb_frontend_nlb_udp_network_throughput
      summary: Get Network Load Balancer Frontend UDP Throughput Metrics
      description: >-
        To retrieve frontend UDP throughput in bytes per second for a given load
        balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_nlb_udp_network_throughput`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_nlb_udp_network_throughput?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_tls_connections_current:
    get:
      operationId: monitoring_get_lb_frontend_tls_connections_current
      summary: Get Load Balancer Frontend Current TLS Connections Rate Metrics
      description: >-
        To retrieve frontend current TLS connections rate for a given load
        balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_tls_connections_current`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_tls_connections_current?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_tls_connections_limit:
    get:
      operationId: monitoring_get_lb_frontend_tls_connections_limit
      summary: Get Load Balancer Frontend Max TLS Connections Limit Metrics
      description: >-
        To retrieve frontend max TLS connections limit for a given load
        balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_tls_connections_limit`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_tls_connections_limit?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/frontend_tls_connections_exceeding_rate_limit:
    get:
      operationId: monitoring_get_lb_frontend_tls_connections_exceeding_rate_limit
      summary: >-
        Get Load Balancer Frontend Closed TLS Connections For Exceeded Rate
        Limit Metrics
      description: >-
        To retrieve frontend closed TLS connections for exceeded rate limit for
        a given load balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/frontend_tls_connections_exceeding_rate_limit`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/frontend_tls_connections_exceeding_rate_limit?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_http_session_duration_avg:
    get:
      operationId: monitoring_get_lb_droplets_http_session_duration_avg
      summary: Get Load Balancer Droplets Average HTTP Session Duration Metrics
      description: >-
        To retrieve Droplets average HTTP session duration in seconds for a
        given load balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/droplets_http_session_duration_avg`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_http_session_duration_avg?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_http_session_duration_50p:
    get:
      operationId: monitoring_get_lb_droplets_http_session_duration_50p
      summary: Get Load Balancer Droplets 50th Percentile HTTP Session Duration Metrics
      description: >-
        To retrieve Droplets 50th percentile HTTP session duration in seconds
        for a given load balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/droplets_http_session_duration_50p`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_http_session_duration_50p?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_http_session_duration_95p:
    get:
      operationId: monitoring_get_lb_droplets_http_session_duration_95p
      summary: Get Load Balancer Droplets 95th Percentile HTTP Session Duration Metrics
      description: >-
        To retrieve Droplets 95th percentile HTTP session duration in seconds
        for a given load balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/droplets_http_session_duration_95p`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_http_session_duration_95p?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_http_response_time_avg:
    get:
      operationId: monitoring_get_lb_droplets_http_response_time_avg
      summary: Get Load Balancer Droplets Average HTTP Response Time Metrics
      description: >-
        To retrieve Droplets average HTTP response time in seconds for a given
        load balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/droplets_http_response_time_avg`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_http_response_time_avg?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_http_response_time_50p:
    get:
      operationId: monitoring_get_lb_droplets_http_response_time_50p
      summary: Get Load Balancer Droplets 50th Percentile HTTP Response Time Metrics
      description: >-
        To retrieve Droplets 50th percentile HTTP response time in seconds for a
        given load balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/droplets_http_response_time_50p`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_http_response_time_50p?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_http_response_time_95p:
    get:
      operationId: monitoring_get_lb_droplets_http_response_time_95p
      summary: Get Load Balancer Droplets 95th Percentile HTTP Response Time Metrics
      description: >-
        To retrieve Droplets 95th percentile HTTP response time in seconds for a
        given load balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/droplets_http_response_time_95p`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_http_response_time_95p?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_http_response_time_99p:
    get:
      operationId: monitoring_get_lb_droplets_http_response_time_99p
      summary: Get Load Balancer Droplets 99th Percentile HTTP Response Time Metrics
      description: >-
        To retrieve Droplets 99th percentile HTTP response time in seconds for a
        given load balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/droplets_http_response_time_99p`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_http_response_time_99p?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_queue_size:
    get:
      operationId: monitoring_get_lb_droplets_queue_size
      summary: Get Load Balancer Droplets Queue Size Metrics
      description: >-
        To retrieve Droplets queue size for a given load balancer, send a GET
        request to `/v2/monitoring/metrics/load_balancer/droplets_queue_size`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_queue_size?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_http_responses:
    get:
      operationId: monitoring_get_lb_droplets_http_responses
      summary: Get Load Balancer Droplets HTTP Rate Of Response Code Metrics
      description: >-
        To retrieve Droplets HTTP rate of response code for a given load
        balancer, send a GET request to
        `/v2/monitoring/metrics/load_balancer/droplets_http_responses`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_http_responses?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_connections:
    get:
      operationId: monitoring_get_lb_droplets_connections
      summary: Get Load Balancer Droplets Active Connections Metrics
      description: >-
        To retrieve Droplets active connections for a given load balancer, send
        a GET request to
        `/v2/monitoring/metrics/load_balancer/droplets_connections`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_connections?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_health_checks:
    get:
      operationId: monitoring_get_lb_droplets_health_checks
      summary: Get Load Balancer Droplets Health Check Status Metrics
      description: >-
        To retrieve Droplets health check status for a given load balancer, send
        a GET request to
        `/v2/monitoring/metrics/load_balancer/droplets_health_checks`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_health_checks?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/monitoring/metrics/load_balancer/droplets_downtime:
    get:
      operationId: monitoring_get_lb_droplets_downtime
      summary: Get Load Balancer Droplets Downtime Status Metrics
      description: >-
        To retrieve Droplets downtime status for a given load balancer, send a
        GET request to `/v2/monitoring/metrics/load_balancer/droplets_downtime`.
      tags:
        - Monitoring
      responses:
        '200':
          $ref: '#/components/responses/metric_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      parameters:
        - $ref: '#/components/parameters/parameters_load_balancer_id'
        - $ref: '#/components/parameters/metric_timestamp_start'
        - $ref: '#/components/parameters/metric_timestamp_end'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/monitoring/metrics/load_balancer/droplets_downtime?lb_id=4de7ac8b-495b-4884-9a69-1050c6793cd6&start=1636051668&end=1636051668"
      security:
        - bearer_auth:
            - monitoring:read
  /v2/projects:
    get:
      operationId: projects_list
      summary: List All Projects
      description: To list all your projects, send a GET request to `/v2/projects`.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/projects_list'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/projects"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                  PerPage: 10,
                  Page:    1,
                }

                client.Projects.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            projects = client.projects.all
            projects.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.projects.list()
      security:
        - bearer_auth:
            - project:read
    post:
      operationId: projects_create
      summary: Create a Project
      description: To create a project, send a POST request to `/v2/projects`.
      tags:
        - Projects
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/project_base'
              required:
                - name
                - purpose
      responses:
        '201':
          $ref: '#/components/responses/existing_project'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"my-web-api", "description": "My website API", "purpose": "Service or API", "environment": "Production"}' \
              "https://api.digitalocean.com/v2/projects"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createReq := &godo.CreateProjectRequest{
                  Name:        "my-web-api",
                  Description: "My website API",
                  Purpose:     "Service or API",
                  Environment: "Production",
                }

                client.Projects.Create(ctx, createReq)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            project = DropletKit::Project.new(
              name: 'my-api',
              description: 'My website API',
              purpose: 'Service or API',
              environment: 'Production'
            )
            client.projects.create(project)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "my-web-api",
              "description": "My website API",
              "purpose": "Service or API",
              "environment": "Production"
            }

            resp = client.projects.create(body=req)
      security:
        - bearer_auth:
            - project:create
  /v2/projects/default:
    get:
      operationId: projects_get_default
      summary: Retrieve the Default Project
      description: >-
        To get your default project, send a GET request to
        `/v2/projects/default`.
      tags:
        - Projects
      responses:
        '200':
          $ref: '#/components/responses/default_project'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/projects/default"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                client.Projects.GetDefault(ctx)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.projects.find_default
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.projects.get_default()
      security:
        - bearer_auth:
            - project:read
    put:
      operationId: projects_update_default
      summary: Update the Default Project
      description: >-
        To update you default project, send a PUT request to
        `/v2/projects/default`. All of the following attributes must be sent.
      tags:
        - Projects
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/project'
              required:
                - name
                - description
                - purpose
                - environment
                - is_default
      responses:
        '200':
          $ref: '#/components/responses/existing_project'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"my-web-api", "description": "My website API", "purpose": "Service or API", "environment": "Staging", "is_default": false}' \
              "https://api.digitalocean.com/v2/projects/default"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                updateReq := &godo.UpdateProjectRequest{
                  Name:        "my-web-api",
                  Description: "My website API",
                  Purpose:     "Service or API",
                  Environment: "Staging",
                  IsDefault:   false,
                }

                client.Projects.Update(ctx, godo.DefaultProject, updateReq)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            project = client.projects.find_default
            project.environment = 'Staging'
            client.projects.update(project, id: 'default')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "my-web-api",
              "description": "My website API",
              "purpose": "Service or API",
              "environment": "Production",
              "is_default": False
            }

            resp = client.projects.update_default(body=req)
      security:
        - bearer_auth:
            - project:update
    patch:
      operationId: projects_patch_default
      summary: Patch the Default Project
      description: >-
        To update only specific attributes of your default project, send a PATCH
        request to `/v2/projects/default`. At least one of the following
        attributes needs to be sent.
      tags:
        - Projects
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/project'
            example:
              name: my-web-api
      responses:
        '200':
          $ref: '#/components/responses/existing_project'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PATCH \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"environment": "Staging"}' \
              "https://api.digitalocean.com/v2/projects/default"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                updateReq := &godo.UpdateProjectRequest{
                  Environment: "Staging",
                }

                client.Projects.Update(ctx, godo.DefaultProject, updateReq)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            project = client.projects.find_default
            project.environment = 'Staging'
            client.projects.update(project, id: 'default')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "my-web-api"
            }

            resp = client.projects.patch_default(body=req)
      security:
        - bearer_auth:
            - project:update
  /v2/projects/{project_id}:
    get:
      operationId: projects_get
      summary: Retrieve an Existing Project
      description: To get a project, send a GET request to `/v2/projects/$PROJECT_ID`.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/project_id'
      responses:
        '200':
          $ref: '#/components/responses/existing_project'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/projects/4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                client.Projects.Get(ctx, "4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679")
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            project = client.projects.find(id:
            '4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.projects.get(project_id="4e1bfbc3")
      security:
        - bearer_auth:
            - project:read
    put:
      operationId: projects_update
      summary: Update a Project
      description: >-
        To update a project, send a PUT request to `/v2/projects/$PROJECT_ID`.
        All of the following attributes must be sent.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/project_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/project'
              required:
                - name
                - description
                - purpose
                - environment
                - is_default
      responses:
        '200':
          $ref: '#/components/responses/existing_project'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"my-web-api", "description": "My website API", "purpose": "Service or API", "environment": "Staging", "is_default": false}' \
              "https://api.digitalocean.com/v2/projects/4e1bfbc3\
              -dc3e-41f2-a18f-1b4d7ba71679"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                updateReq := &godo.UpdateProjectRequest{
                  Name:        "my-web-api",
                  Description: "My website API",
                  Purpose:     "Service or API",
                  Environment: "Staging",
                  IsDefault:   false,
                }

                client.Projects.Update(ctx, "4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679", updateReq)

            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            project = client.projects.find(id:
            '4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679')

            project.environment = 'Staging'

            client.projects.update(project, id:
            '4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "my-web-api",
              "description": "My website API",
              "purpose": "Service or API",
              "environment": "Production",
              "is_default": False
            }

            resp = client.projects.update_default(body=req)
      security:
        - bearer_auth:
            - project:update
    patch:
      operationId: projects_patch
      summary: Patch a Project
      description: >-
        To update only specific attributes of a project, send a PATCH request to
        `/v2/projects/$PROJECT_ID`. At least one of the following attributes
        needs to be sent.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/project_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/project'
            example:
              name: my-web-api
      responses:
        '200':
          $ref: '#/components/responses/existing_project'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PATCH \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"environment": "Staging"}' \
              "https://api.digitalocean.com/v2/projects/4e1bfbc3\
              -dc3e-41f2-a18f-1b4d7ba71679"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                updateReq := &godo.UpdateProjectRequest{
                  Environment: "Staging",
                }

                client.Projects.Update(ctx, "4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679", updateReq)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            project = client.projects.find(id:
            '4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679')

            project.environment = 'Staging'

            client.projects.update(project, id:
            '4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "my-web-api"
            }

            resp = client.projects.patch(project_id="4e1bfbc3", body=req)
      security:
        - bearer_auth:
            - project:update
    delete:
      operationId: projects_delete
      summary: Delete an Existing Project
      description: >
        To delete a project, send a DELETE request to
        `/v2/projects/$PROJECT_ID`. To

        be deleted, a project must not have any resources assigned to it. Any
        existing

        resources must first be reassigned or destroyed, or you will receive a
        412 error.


        A successful request will receive a 204 status code with no body in
        response.

        This indicates that the request was processed successfully.
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/project_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '412':
          $ref: '#/components/responses/precondition_failed'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: >-
            curl -X DELETE -H 'Content-Type: application/json' -H
            "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/projects/4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Projects.Delete(ctx, '4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679')
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.projects.delete(id: '4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679') 
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.projects.delete(project_id="fda9fda")
      security:
        - bearer_auth:
            - project:delete
  /v2/projects/{project_id}/resources:
    get:
      operationId: projects_list_resources
      summary: List Project Resources
      description: >-
        To list all your resources in a project, send a GET request to
        `/v2/projects/$PROJECT_ID/resources`.
      tags:
        - Project Resources
      parameters:
        - $ref: '#/components/parameters/project_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/resources_list'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/projects/4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679/resources"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                  PerPage: 10,
                  Page:    1,
                }

                client.Projects.ListResources(ctx, "4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679", opt)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.projects.list_resources(id:
            '4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.projects.list_resources(project_id="4e1bfbc3")
      security:
        - bearer_auth:
            - project:read
    post:
      operationId: projects_assign_resources
      summary: Assign Resources to a Project
      description: >-
        To assign resources to a project, send a POST request to
        `/v2/projects/$PROJECT_ID/resources`.
      tags:
        - Project Resources
      parameters:
        - $ref: '#/components/parameters/project_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/project_assignment'
            examples:
              assign_resources:
                value:
                  resources:
                    - do:droplet:13457723
                    - do:domain:example.com
      responses:
        '200':
          $ref: '#/components/responses/assigned_resources_list'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"resources": ["do:droplet:1", "do:floatingip:192.168.99.100"]}' \
              "https://api.digitalocean.com/v2/projects/4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679/resources"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                res := []interface{}{
                  &godo.Droplet{ID: 1},
                  "do:droplet:42",
                  &godo.FloatingIP{IP: "192.168.99.100"},
                }

                client.Projects.AssignResources(ctx, "4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679", res...)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            resource = DropletKit::ProjectAssignment.new(urn: 'do:droplet:1')

            client.projects.assign_resources([resource], id:
            '4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "resources": [
                "do:droplet:13457723",
                "do:domain:example.com"
              ]
            }


            resp = client.projects.assign_resources(project_id="8dafda",
            body=req)
      security:
        - bearer_auth:
            - project:update
  /v2/projects/default/resources:
    get:
      operationId: projects_list_resources_default
      summary: List Default Project Resources
      description: >-
        To list all your resources in your default project, send a GET request
        to `/v2/projects/default/resources`.
      tags:
        - Project Resources
      responses:
        '200':
          $ref: '#/components/responses/resources_list'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/projects/default/resources"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                  PerPage: 10,
                  Page:    1,
                }

                client.Projects.ListResources(ctx, godo.DefaultProject, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.projects.list_resources(id: 'default')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.projects.list_resources_default()
      security:
        - bearer_auth:
            - project:read
    post:
      operationId: projects_assign_resources_default
      summary: Assign Resources to Default Project
      description: >-
        To assign resources to your default project, send a POST request to
        `/v2/projects/default/resources`.
      tags:
        - Project Resources
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/project_assignment'
            examples:
              assign_resources:
                value:
                  resources:
                    - do:droplet:13457723
                    - do:domain:example.com
      responses:
        '200':
          $ref: '#/components/responses/assigned_resources_list'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"resources": ["do:droplet:1", "do:floatingip:192.168.99.100"]}' \
              "https://api.digitalocean.com/v2/projects/default/resources"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                res := []interface{}{
                  &godo.Droplet{ID: 1},
                  "do:droplet:42",
                  &godo.FloatingIP{IP: "192.168.99.100"},
                }

                client.Projects.AssignResources(ctx, godo.DefaultProject, res...)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            resource = DropletKit::ProjectAssignment.new(urn: 'do:droplet:1')
            client.projects.assign_resources([resource], id: 'default')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "resources": [
                "do:droplet:13457723",
                "do:domain:example.com"
              ]
            }

            resp = client.projects.assign_resources_default(body=req)
      security:
        - bearer_auth:
            - project:update
  /v2/regions:
    get:
      operationId: regions_list
      summary: List All Data Center Regions
      description: >-
        To list all of the regions that are available, send a GET request to
        `/v2/regions`.

        The response will be a JSON object with a key called `regions`. The
        value of this will be an array of `region` objects, each of which will
        contain the standard region attributes.
      tags:
        - Regions
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_regions'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/regions"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                regions, _, err := client.Regions.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            regions = client.regions.all
            regions.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.regions.list()
      security:
        - bearer_auth:
            - regions:read
  /v2/registry:
    get:
      operationId: registry_get
      summary: Get Container Registry Information
      description: >-
        To get information about your container registry, send a GET request to
        `/v2/registry`.
      tags:
        - Container Registry
      responses:
        '200':
          $ref: '#/components/responses/registry_info'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.registry.get()
      security:
        - bearer_auth:
            - registry:read
    post:
      operationId: registry_create
      summary: Create Container Registry
      description: >
        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`.
      tags:
        - Container Registry
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/registry_create'
      responses:
        '201':
          $ref: '#/components/responses/registry_info'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "example", "subscription_tier_slug": "basic", "region": "fra1"}' \
              "https://api.digitalocean.com/v2/registry"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "example",
              "subscription_tier_slug": "basic",
              "region": "fra1"
            }

            resp = client.registry.create(body=req)
      security:
        - bearer_auth:
            - registry:create
    delete:
      operationId: registry_delete
      summary: Delete Container Registry
      description: >-
        To delete your container registry, destroying all container image data
        stored in it, send a DELETE request to `/v2/registry`.
      tags:
        - Container Registry
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.registry.delete()
      security:
        - bearer_auth:
            - registry:delete
  /v2/registry/subscription:
    get:
      operationId: registry_get_subscription
      summary: Get Subscription Information
      description: >-
        A subscription is automatically created when you configure your
        container registry. To get information about your subscription, send a
        GET request to `/v2/registry/subscription`.
      tags:
        - Container Registry
      responses:
        '200':
          $ref: '#/components/responses/subscription_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/subscription"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.registry.get_subscription()
      security:
        - bearer_auth:
            - registry:read
    post:
      operationId: registry_update_subscription
      summary: Update Subscription Tier
      description: >-
        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`.
      tags:
        - Container Registry
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                tier_slug:
                  type: string
                  enum:
                    - starter
                    - basic
                    - professional
                  example: basic
                  description: The slug of the subscription tier to sign up for.
      responses:
        '200':
          $ref: '#/components/responses/subscription_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"tier_slug": "professional"}' \
              "https://api.digitalocean.com/v2/registry/subscription"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "tier_slug": "basic"
            }

            resp = client.registry.update_subscription(body=req)
      security:
        - bearer_auth:
            - registry:update
  /v2/registry/docker-credentials:
    get:
      operationId: registry_get_dockerCredentials
      summary: Get Docker Credentials for Container Registry
      description: >
        In order to access your container registry with the Docker client or
        from a

        Kubernetes cluster, you will need to configure authentication. The
        necessary

        JSON configuration can be retrieved by sending a GET request to

        `/v2/registry/docker-credentials`.


        The response will be in the format of a Docker `config.json` file. To
        use the

        config in your Kubernetes cluster, create a Secret with:

            kubectl create secret generic docr \
              --from-file=.dockerconfigjson=config.json \
              --type=kubernetes.io/dockerconfigjson

        By default, the returned credentials have read-only access to your
        registry

        and cannot be used to push images. This is appropriate for most
        Kubernetes

        clusters. To retrieve read/write credentials, suitable for use with the
        Docker

        client or in a CI system, read_write may be provided as query parameter.
        For

        example: `/v2/registry/docker-credentials?read_write=true`


        By default, the returned credentials will not expire. To retrieve
        credentials

        with an expiry set, expiry_seconds may be provided as a query parameter.
        For

        example: `/v2/registry/docker-credentials?expiry_seconds=3600` will
        return

        credentials that expire after one hour.
      tags:
        - Container Registry
      parameters:
        - $ref: '#/components/parameters/registry_expiry_seconds'
        - $ref: '#/components/parameters/registry_read_write'
      responses:
        '200':
          $ref: '#/components/responses/docker_credentials'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/docker-credentials"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.registry.get_docker_credentials()
      security:
        - bearer_auth:
            - registry:read
            - registry:update
  /v2/registry/validate-name:
    post:
      operationId: registry_validate_name
      summary: Validate a Container Registry Name
      description: >
        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.
      tags:
        - Container Registry
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/validate_registry'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '409':
          $ref: '#/components/responses/conflict'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name": "example"}' \
              "https://api.digitalocean.com/v2/registry/validate-name"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "example"
            }

            resp = client.registry.validate_name(body=req)
      security:
        - bearer_auth:
            - registry:create
  /v2/registry/{registry_name}/repositories:
    get:
      operationId: registry_list_repositories
      deprecated: true
      summary: List All Container Registry Repositories
      description: >
        This endpoint has been deprecated in favor of the _List All Container
        Registry Repositories [V2]_ endpoint.


        To list all repositories in your container registry, send a GET

        request to `/v2/registry/$REGISTRY_NAME/repositories`.
      tags:
        - Container Registry
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/registry_name'
      responses:
        '200':
          $ref: '#/components/responses/all_repositories'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/example/repositories"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.registry.list_repositories(registry_name="example")
      security:
        - bearer_auth:
            - registry:read
  /v2/registry/{registry_name}/repositoriesV2:
    get:
      operationId: registry_list_repositoriesV2
      summary: List All Container Registry Repositories (V2)
      description: >-
        To list all repositories in your container registry, send a GET request
        to `/v2/registry/$REGISTRY_NAME/repositoriesV2`.
      tags:
        - Container Registry
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/token_pagination_page'
        - $ref: '#/components/parameters/token_pagination_page_token'
        - $ref: '#/components/parameters/registry_name'
      responses:
        '200':
          $ref: '#/components/responses/all_repositories_v2'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/example/repositoriesV2?page_size=1"
        - lang: cURL (next page)
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/example/repositoriesV2?page=2&page_token=JPZmZzZXQiOjB9&per_page=1"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.registry.list_repositories_v2(registry_name="example")
      security:
        - bearer_auth:
            - registry:read
  /v2/registry/{registry_name}/repositories/{repository_name}/tags:
    get:
      operationId: registry_list_repositoryTags
      summary: List All Container Registry Repository Tags
      description: >
        To list all tags in your container registry repository, send a GET

        request to
        `/v2/registry/$REGISTRY_NAME/repositories/$REPOSITORY_NAME/tags`.


        Note that if your repository name contains `/` characters, it must be

        URL-encoded in the request URL. For example, to list tags for

        `registry.digitalocean.com/example/my/repo`, the path would be

        `/v2/registry/example/repositories/my%2Frepo/tags`.
      tags:
        - Container Registry
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/registry_name'
        - $ref: '#/components/parameters/registry_repository_name'
      responses:
        '200':
          $ref: '#/components/responses/repository_tags'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/example/repositories/repo-1/tags"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp = client.registry.list_repository_tags(registry_name="example",
            repository_name="repo01")
      security:
        - bearer_auth:
            - registry:read
  /v2/registry/{registry_name}/repositories/{repository_name}/tags/{repository_tag}:
    delete:
      operationId: registry_delete_repositoryTag
      summary: Delete Container Registry Repository Tag
      description: >
        To delete a container repository tag, send a DELETE request to

        `/v2/registry/$REGISTRY_NAME/repositories/$REPOSITORY_NAME/tags/$TAG`.


        Note that if your repository name contains `/` characters, it must be

        URL-encoded in the request URL. For example, to delete

        `registry.digitalocean.com/example/my/repo:mytag`, the path would be

        `/v2/registry/example/repositories/my%2Frepo/tags/mytag`.


        A successful request will receive a 204 status code with no body in
        response.

        This indicates that the request was processed successfully.
      tags:
        - Container Registry
      parameters:
        - $ref: '#/components/parameters/registry_name'
        - $ref: '#/components/parameters/registry_repository_name'
        - $ref: '#/components/parameters/registry_repository_tag'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/example/repositories/repo-1/tags/mytag"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.registry.delete_repository_tag(registry_name="example",
            repository_name="repo-1", repository_tag="06a447a")
      security:
        - bearer_auth:
            - registry:delete
  /v2/registry/{registry_name}/repositories/{repository_name}/digests:
    get:
      operationId: registry_list_repositoryManifests
      summary: List All Container Registry Repository Manifests
      description: >
        To list all manifests in your container registry repository, send a GET

        request to
        `/v2/registry/$REGISTRY_NAME/repositories/$REPOSITORY_NAME/digests`.


        Note that if your repository name contains `/` characters, it must be

        URL-encoded in the request URL. For example, to list manifests for

        `registry.digitalocean.com/example/my/repo`, the path would be

        `/v2/registry/example/repositories/my%2Frepo/digests`.
      tags:
        - Container Registry
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/registry_name'
        - $ref: '#/components/parameters/registry_repository_name'
      responses:
        '200':
          $ref: '#/components/responses/repository_manifests'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/example/repositories/repo-1/digests"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.registry.list_repository_manifests(registry_name="example",
            repository_name="repo01")
      security:
        - bearer_auth:
            - registry:read
  /v2/registry/{registry_name}/repositories/{repository_name}/digests/{manifest_digest}:
    delete:
      operationId: registry_delete_repositoryManifest
      summary: Delete Container Registry Repository Manifest
      description: >
        To delete a container repository manifest by digest, send a DELETE
        request to

        `/v2/registry/$REGISTRY_NAME/repositories/$REPOSITORY_NAME/digests/$MANIFEST_DIGEST`.


        Note that if your repository name contains `/` characters, it must be

        URL-encoded in the request URL. For example, to delete

        `registry.digitalocean.com/example/my/repo@sha256:abcd`, the path would
        be

        `/v2/registry/example/repositories/my%2Frepo/digests/sha256:abcd`.


        A successful request will receive a 204 status code with no body in
        response.

        This indicates that the request was processed successfully.
      tags:
        - Container Registry
      parameters:
        - $ref: '#/components/parameters/registry_name'
        - $ref: '#/components/parameters/registry_repository_name'
        - $ref: '#/components/parameters/registry_manifest_digest'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/example/repositories/repo-1/digests/sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.registry.delete_repository_manifest(registry_name="example",
            repository_name="repo-1", manifest_digest="sha256:cb8a924afd")
      security:
        - bearer_auth:
            - registry:delete
  /v2/registry/{registry_name}/garbage-collection:
    post:
      operationId: registry_run_garbageCollection
      summary: Start Garbage Collection
      description: >
        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.
      tags:
        - Container Registry
      parameters:
        - $ref: '#/components/parameters/registry_name'
      responses:
        '201':
          $ref: '#/components/responses/garbage_collection'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/example/garbage-collection"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.registry.run_garbage_collection(registry_name="example")
      security:
        - bearer_auth:
            - registry:create
    get:
      operationId: registry_get_garbageCollection
      summary: Get Active Garbage Collection
      description: >-
        To get information about the currently-active garbage collection for a
        registry, send a GET request to
        `/v2/registry/$REGISTRY_NAME/garbage-collection`.
      tags:
        - Container Registry
      parameters:
        - $ref: '#/components/parameters/registry_name'
      responses:
        '200':
          $ref: '#/components/responses/garbage_collection'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/example/garbage-collection"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.registry.get_garbage_collection(registry_name="example")
      security:
        - bearer_auth:
            - registry:read
  /v2/registry/{registry_name}/garbage-collections:
    get:
      operationId: registry_list_garbageCollections
      summary: List Garbage Collections
      description: >-
        To get information about past garbage collections for a registry, send a
        GET request to `/v2/registry/$REGISTRY_NAME/garbage-collections`.
      tags:
        - Container Registry
      parameters:
        - $ref: '#/components/parameters/registry_name'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/garbage_collections'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/example/garbage-collections"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.registry.list_garbage_collections(registry_name="example")
      security:
        - bearer_auth:
            - registry:read
  /v2/registry/{registry_name}/garbage-collection/{garbage_collection_uuid}:
    put:
      operationId: registry_update_garbageCollection
      summary: Update Garbage Collection
      description: >-
        To cancel the currently-active garbage collection for a registry, send a
        PUT request to `/v2/registry/$REGISTRY_NAME/garbage-collection/$GC_UUID`
        and specify one or more of the attributes below.
      tags:
        - Container Registry
      parameters:
        - $ref: '#/components/parameters/registry_name'
        - $ref: '#/components/parameters/garbage_collection_uuid'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_registry'
      responses:
        '200':
          $ref: '#/components/responses/garbage_collection'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/example/garbage-collection/example-gc-uuid"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp =
            client.registry.run_garbage_collection(registry_name="example")
      security:
        - bearer_auth:
            - registry:update
  /v2/registry/options:
    get:
      operationId: registry_get_options
      summary: List Registry Options (Subscription Tiers and Available Regions)
      description: >-
        This endpoint serves to provide additional information as to which
        option values are available when creating a container registry.

        There are multiple subscription tiers available for container registry.
        Each tier allows a different number of image repositories to be created
        in your registry, and has a different amount of storage and transfer
        included.

        There are multiple regions available for container registry and controls
        where your data is stored.

        To list the available options, send a GET request to
        `/v2/registry/options`.
      tags:
        - Container Registry
      responses:
        '200':
          $ref: '#/components/responses/registry_options_response'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/registry/options"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.registry.get_options()
      security:
        - bearer_auth:
            - registry:read
  /v2/reports/droplet_neighbors_ids:
    get:
      operationId: droplets_list_neighborsIds
      summary: List All Droplet Neighbors
      description: >
        To retrieve a list of all Droplets that are co-located on the same
        physical

        hardware, send a GET request to `/v2/reports/droplet_neighbors_ids`.


        The results will be returned as a JSON object with a key of
        `neighbor_ids`.

        This will be set to an array of arrays. Each array will contain a set of

        Droplet IDs for Droplets that share a physical server. An empty array

        indicates that all Droplets associated with your account are located on

        separate physical hardware.
      tags:
        - Droplets
      responses:
        '200':
          $ref: '#/components/responses/droplet_neighbors_ids'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/reports/droplet_neighbors_ids"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.droplets.list_neighbors_ids()
      security:
        - bearer_auth:
            - droplet:read
  /v2/reserved_ips:
    get:
      operationId: reservedIPs_list
      summary: List All Reserved IPs
      description: >-
        To list all of the reserved IPs available on your account, send a GET
        request to `/v2/reserved_ips`.
      tags:
        - Reserved IPs
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/reserved_ip_list'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/reserved_ips?page=1&per_page=20" 
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                reservedIPs, _, err := client.ReservedIPs.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            reserved_ips = client.reserved_ips.all
            reserved_ips.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.reserved_ips.list()
      security:
        - bearer_auth:
            - reserved_ip:read
    post:
      operationId: reservedIPs_create
      summary: Create a New Reserved IP
      description: >-
        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.
      tags:
        - Reserved IPs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/reserved_ip_create'
      responses:
        '202':
          $ref: '#/components/responses/reserved_ip_created'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"droplet_id": 123456}' \
              "https://api.digitalocean.com/v2/reserved_ips" 
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.ReservedIPCreateRequest{
                    DropletID: 123456,

                }
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            reserved_ip = DropletKit::ReservedIp.new(droplet_id: 123456)
            client.reserved_ips.create(reserved_ip) 
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "droplet_id": 2457247
            }

            resp = client.reserved_ips.create(body=req)
      security:
        - bearer_auth:
            - reserved_ip:create
  /v2/reserved_ips/{reserved_ip}:
    get:
      operationId: reservedIPs_get
      summary: Retrieve an Existing Reserved IP
      description: >-
        To show information about a reserved IP, send a GET request to
        `/v2/reserved_ips/$RESERVED_IP_ADDR`.
      tags:
        - Reserved IPs
      parameters:
        - $ref: '#/components/parameters/reserved_ip'
      responses:
        '200':
          $ref: '#/components/responses/reserved_ip'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/reserved_ips/45.55.96.47" 
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                reservedIP, _, err := client.ReservedIPs.Get(ctx, "45.55.96.47")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.reserved_ips.find(ip: '45.55.96.47')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.reserved_ips.get(reserved_ip="45.55.96.47")
      security:
        - bearer_auth:
            - reserved_ip:read
    delete:
      operationId: reservedIPs_delete
      summary: Delete a Reserved IP
      description: >
        To delete a reserved IP and remove it from your account, send a DELETE
        request

        to `/v2/reserved_ips/$RESERVED_IP_ADDR`.


        A successful request will receive a 204 status code with no body in
        response.

        This indicates that the request was processed successfully.
      tags:
        - Reserved IPs
      parameters:
        - $ref: '#/components/parameters/reserved_ip'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/reserved_ips/45.55.96.47"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.ReservedIPs.Delete(ctx, "45.55.96.34")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.reserved_ips.delete(ip: '45.55.96.47') 
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.reserved_ips.delete(reserved_ip="45.55.96.47")
      security:
        - bearer_auth:
            - reserved_ip:delete
  /v2/reserved_ips/{reserved_ip}/actions:
    get:
      operationId: reservedIPsActions_list
      summary: List All Actions for a Reserved IP
      description: >-
        To retrieve all actions that have been executed on a reserved IP, send a
        GET request to `/v2/reserved_ips/$RESERVED_IP/actions`.
      tags:
        - Reserved IP Actions
      parameters:
        - $ref: '#/components/parameters/reserved_ip'
      responses:
        '200':
          $ref: '#/components/responses/reserved_ip_actions'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/reserved_ips/45.55.96.47/actions?page=1&per_page=1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                actions, _, err := client.ReservedIPActions.List(ctx, '45.55.96.47', opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            actions = client.reserved_ip_actions.all(ip: '45.55.96.47')
            actions.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.reserved_ips_actions.list(reserved_ip="45.55.96.47")
      security:
        - bearer_auth:
            - reserved_ip:read
    post:
      operationId: reservedIPsActions_post
      summary: Initiate a Reserved IP Action
      description: >
        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
      tags:
        - Reserved IP Actions
      parameters:
        - $ref: '#/components/parameters/reserved_ip'
      requestBody:
        description: >
          The `type` attribute set in the request body will specify the action
          that

          will be taken on the reserved IP.
        content:
          application/json:
            schema:
              anyOf:
                - $ref: '#/components/schemas/reserved_ip_action_unassign'
                - $ref: '#/components/schemas/reserved_ip_action_assign'
              discriminator:
                propertyName: type
                mapping:
                  unassign: '#/components/schemas/reserved_ip_action_unassign'
                  assign: '#/components/schemas/reserved_ip_action_assign'
      responses:
        '201':
          $ref: '#/components/responses/reserved_ip_action'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            # Assign a Reserved IP to a Droplet
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"assign","droplet_id":8219222}' \
              "https://api.digitalocean.com/v2/reserved_ips/45.55.96.47/actions"

            # Unassign a Reserved IP
            # curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"unassign"}' \
              "https://api.digitalocean.com/v2/reserved_ips/45.55.96.47/actions"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

              // Assign a Reserved IP to a Droplet
                action, _, err := client.ReservedIPActions.Assign(ctx, "45.55.96.47", 8219222)

              // Unassign a Reserved IP
              // action, _, err := client.ReservedIPActions.Unassign(ctx, "45.55.96.47")  
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            # Assign a Reserved IP to a Droplet

            client.reserved_ip_actions.assign(ip: '45.55.96.47', droplet_id:
            8219222)


            # Unassign a Reserved IP

            # client.reserved_ip_actions.unassign(ip: '45.55.96.47')
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req={
              "type": "unassign"
            }


            resp = client.reserved_ips_actions.post(reserved_ip="49.32.13.21",
            body=req)
      security:
        - bearer_auth:
            - reserved_ip:update
  /v2/reserved_ips/{reserved_ip}/actions/{action_id}:
    get:
      operationId: reservedIPsActions_get
      summary: Retrieve an Existing Reserved IP Action
      description: >-
        To retrieve the status of a reserved IP action, send a GET request to
        `/v2/reserved_ips/$RESERVED_IP/actions/$ACTION_ID`.
      tags:
        - Reserved IP Actions
      parameters:
        - $ref: '#/components/parameters/reserved_ip'
        - $ref: '#/components/parameters/action_id'
      responses:
        '200':
          $ref: '#/components/responses/reserved_ip_action'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/reserved_ips/45.55.96.47/actions/72531856"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                action, _, err := client.ReservedIPActions.Get(ctx, "45.55.96.47", 72531856)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.reserved_ip_actions.find(ip: '45.55.96.47', id: 72531856)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.reserved_ips_actions.get(reserved_ip="45.55.96.47")
      security:
        - bearer_auth:
            - reserved_ip:read
  /v2/sizes:
    get:
      operationId: sizes_list
      summary: List All Droplet Sizes
      description: >-
        To list all of available Droplet sizes, send a GET request to
        `/v2/sizes`.

        The response will be a JSON object with a key called `sizes`. The value
        of this will be an array of `size` objects each of which contain the
        standard size attributes.
      tags:
        - Sizes
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_sizes'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/sizes" 
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                sizes, _, err := client.Sizes.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            sizes = client.sizes.all
            sizes.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.sizes.list()
      security:
        - bearer_auth:
            - sizes:read
  /v2/snapshots:
    get:
      operationId: snapshots_list
      summary: List All Snapshots
      description: >
        To list all of the snapshots available on your account, send a GET
        request to

        `/v2/snapshots`.


        The response will be a JSON object with a key called `snapshots`. This
        will be

        set to an array of `snapshot` objects, each of which will contain the
        standard

        snapshot attributes.


        ### Filtering Results by Resource Type


        It's possible to request filtered results by including certain query
        parameters.


        #### List Droplet Snapshots


        To retrieve only snapshots based on Droplets, include the
        `resource_type`

        query parameter set to `droplet`. For example,
        `/v2/snapshots?resource_type=droplet`.


        #### List Volume Snapshots


        To retrieve only snapshots based on volumes, include the `resource_type`

        query parameter set to `volume`. For example,
        `/v2/snapshots?resource_type=volume`.
      tags:
        - Snapshots
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/snapshot_resource_type'
      responses:
        '200':
          $ref: '#/components/responses/snapshots'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            # List all snapshots
            curl -X GET \
              -H 'Content-Type: application/json' \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/snapshots?page=1&per_page=1"

            # List all Droplet snapshots
            curl -X GET \
              -H 'Content-Type: application/json' \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/snapshots?page=1&per_page=1&resource_type=droplet"

            # List volume snapshots
            curl -X GET \
              -H 'Content-Type: application/json' \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/snapshots?page=1&per_page=1&resource_type=volume"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }
            // List all snapshots
                snapshots, _, err := client.Snapshots.List(ctx, opt)

            // List all Droplet snapshots
            //  snapshots, _, err := client.Snapshots.ListDroplet(ctx, opt)

            // List all volume snapshots
            //  snapshots, _, err := client.Snapshots.ListVolume(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            # List all snapshots
            snapshots = client.snapshots.all
            snapshots.each

            # List all Droplet snapshots
            # snapshots = client.snapshots.all(resource_type: 'droplet')
            # snapshots.each

            # List volume snapshots
            # snapshots = client.snapshots.all(resource_type: 'volume')
            # snapshots.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.snapshots.list()
      security:
        - bearer_auth:
            - snapshot:read
  /v2/snapshots/{snapshot_id}:
    get:
      operationId: snapshots_get
      summary: Retrieve an Existing Snapshot
      description: >
        To retrieve information about a snapshot, send a GET request to

        `/v2/snapshots/$SNAPSHOT_ID`.


        The response will be a JSON object with a key called `snapshot`. The
        value of

        this will be an snapshot object containing the standard snapshot
        attributes.
      tags:
        - Snapshots
      parameters:
        - $ref: '#/components/parameters/snapshot_id'
      responses:
        '200':
          $ref: '#/components/responses/snapshots_existing'
        '400':
          $ref: '#/components/responses/not_a_snapshot'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H 'Content-Type: application/json' \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/snapshots/fbe805e8-866b-11e6-96bf-000f53315a41"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                snapshot, _, err := client.Snapshots.Get(ctx, 'fbe805e8-866b-11e6-96bf-000f53315a41')
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            snapshot = client.snapshots.find(id:
            'fbe805e8-866b-11e6-96bf-000f53315a41')
        - lang: cURL
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.snapshots.get(snapshot_id="fbe805e8")
      security:
        - bearer_auth:
            - snapshot:read
    delete:
      operationId: snapshots_delete
      summary: Delete a Snapshot
      description: >
        Both Droplet and volume snapshots are managed through the
        `/v2/snapshots/`

        endpoint. To delete a snapshot, send a DELETE request to

        `/v2/snapshots/$SNAPSHOT_ID`.


        A status of 204 will be given. This indicates that the request was
        processed

        successfully, but that no response body is needed.
      tags:
        - Snapshots
      parameters:
        - $ref: '#/components/parameters/snapshot_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '400':
          $ref: '#/components/responses/not_a_snapshot'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H 'Content-Type: application/json' \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/snapshots/fbe805e8-866b-11e6-96bf-000f53315a41"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Snapshots.Delete(ctx, 'fbe805e8-866b-11e6-96bf-000f53315a41')
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.snapshots.delete(id: 'fbe805e8-866b-11e6-96bf-000f53315a41')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.snapshots.delete(snapshot_id="fbe805e8")
      security:
        - bearer_auth:
            - image:delete
            - snapshot:delete
  /v2/tags:
    get:
      operationId: tags_list
      summary: List All Tags
      description: To list all of your tags, you can send a GET request to `/v2/tags`.
      tags:
        - Tags
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/tags_all'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/tags"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }
                tags, _, err := client.Tags.List(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            tags = client.tags.all
            tags.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.tags.list()
      security:
        - bearer_auth:
            - tag:read
    post:
      operationId: tags_create
      summary: Create a New Tag
      description: >-
        To create a tag you can send a POST request to `/v2/tags` with a `name`
        attribute.
      tags:
        - Tags
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/tags'
      responses:
        '201':
          $ref: '#/components/responses/tags_new'
        '400':
          $ref: '#/components/responses/tags_bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"awesome"}' \
              "https://api.digitalocean.com/v2/tags"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &TagCreateRequest{
                    Name: "testing-1",
                }
                client.Tags.Create(ctx, request)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            tag = DropletKit::Tag.new(name: 'awesome')
            client.tags.create(tag)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "tag": {
                "name": "extra-awesome",
                "resources": {
                  "count": 0,
                  "droplets": {
                    "count": 0
                  },
                  "images": {
                    "count": 0
                  },
                  "volumes": {
                    "count": 0
                  },
                  "volume_snapshots": {
                    "count": 0
                  },
                  "databases": {
                    "count": 0
                  }
                }
              }
            }

            resp = client.tags.create(body=req)
      security:
        - bearer_auth:
            - tag:create
  /v2/tags/{tag_id}:
    get:
      operationId: tags_get
      summary: Retrieve a Tag
      description: >-
        To retrieve an individual tag, you can send a `GET` request to
        `/v2/tags/$TAG_NAME`.
      tags:
        - Tags
      parameters:
        - $ref: '#/components/parameters/tag_id'
      responses:
        '200':
          $ref: '#/components/responses/tags_existing'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/tags/awesome"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                tag, _, err := client.Tags.Get(ctx, "awesome")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.tags.find(name: 'awesome')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.tags.get(tag_id="awesome")
      security:
        - bearer_auth:
            - tag:read
    delete:
      operationId: tags_delete
      summary: Delete a Tag
      description: >-
        A tag can be deleted by sending a `DELETE` request to
        `/v2/tags/$TAG_NAME`. Deleting a tag also untags all the resources that
        have previously been tagged by the Tag
      tags:
        - Tags
      parameters:
        - $ref: '#/components/parameters/tag_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/tags/awesome"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                client.Tags.Delete(ctx, "awesome")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.tags.delete(name: 'awesome')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.tags.delete(tag_id="awesome")
      security:
        - bearer_auth:
            - tag:delete
  /v2/tags/{tag_id}/resources:
    post:
      operationId: tags_assign_resources
      summary: Tag a Resource
      description: >-
        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.
      tags:
        - Tags
      parameters:
        - $ref: '#/components/parameters/tag_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/tags_resource'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"resources":[{"resource_id":"9569411","resource_type":"droplet"},{"resource_id":"7555620","resource_type":"image"},{"resource_id":"3d80cb72-342b-4aaa-b92e-4e4abb24a933","resource_type":"volume"}]}' \
              "https://api.digitalocean.com/v2/tags/awesome/resources"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }
                tags, _, err := client.Tags.List(ctx, opt)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.tags.tag_resources(name: 'awesome', resources: [{
            resource_id: '9569411', resource_type: 'droplet' },{ resource_id:
            '7555620', resource_type: 'image' },{ resource_id:
            '3d80cb72-342b-4aaa-b92e-4e4abb24a933', resource_type: 'volume'}])
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "resources": [
                {
                  "resource_id": "9569411",
                  "resource_type": "droplet"
                },
                {
                  "resource_id": "7555620",
                  "resource_type": "image"
                },
                {
                  "resource_id": "3d80cb72-342b-4aaa-b92e-4e4abb24a933",
                  "resource_type": "volume"
                }
              ]
            }

            resp = client.tags.assign_resources(tag_id="awesome", body=req)
      security:
        - bearer_auth:
            - tag:create
    delete:
      operationId: tags_unassign_resources
      summary: Untag a Resource
      description: >-
        Resources can be untagged by sending a DELETE request to
        `/v2/tags/$TAG_NAME/resources` with an array of json objects containing
        `resource_id` and `resource_type` attributes.

        Currently only untagging 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.
      tags:
        - Tags
      parameters:
        - $ref: '#/components/parameters/tag_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/tags_resource'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"resources":[{"resource_id":"9569411","resource_type":"droplet"},{"resource_id":"7555620","resource_type":"image"},{"resource_id":"3d80cb72-342b-4aaa-b92e-4e4abb24a933","resource_type":"volume"}]}' \
              "https://api.digitalocean.com/v2/tags/awesome/resources"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                untagResourcesRequest := &godo.UntagResourcesRequest{
                    Resources: []Resource{{ID: "11457573", Type: "droplet"},{ID: "7555620", Type: "image"},{ID: "3d80cb72-342b-4aaa-b92e-4e4abb24a933", Type: "volume"}},
                }
                client.Tags.UntagResources(ctx, "awesome", untagResourcesRequest)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.tags.untag_resources(name: 'awesome', resources: [{
            resource_id: '9569411', resource_type: 'droplet' },{ resource_id:
            '7555620', resource_type: 'image' },{ resource_id:
            '3d80cb72-342b-4aaa-b92e-4e4abb24a933', resource_type: 'volume' }])
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "resources": [
                {
                  "resource_id": "9569411",
                  "resource_type": "droplet"
                },
                {
                  "resource_id": "7555620",
                  "resource_type": "image"
                },
                {
                  "resource_id": "3d80cb72-342b-4aaa-b92e-4e4abb24a933",
                  "resource_type": "volume"
                }
              ]
            }

            resp = client.tags.unassign_resources(tag_id="awesome", body=req)
      security:
        - bearer_auth:
            - tag:delete
  /v2/volumes:
    get:
      operationId: volumes_list
      summary: List All Block Storage Volumes
      description: >+
        To list all of the block storage volumes available on your account, send
        a GET request to `/v2/volumes`.

        ## Filtering Results

        ### By Region

        The `region` may be provided as query parameter in order to restrict
        results to volumes available in a specific region. For example:
        `/v2/volumes?region=nyc1`

        ### By Name

        It is also possible to list volumes on your account that match a
        specified name. To do so, send a GET request with the volume's name as a
        query parameter to `/v2/volumes?name=$VOLUME_NAME`.

        **Note:** You can only create one volume per region with the same name.

        ### By Name and Region

        It is also possible to retrieve information about a block storage volume
        by name. To do so, send a GET request with the volume's name and the
        region slug for the region it is located in as query parameters to
        `/v2/volumes?name=$VOLUME_NAME&region=nyc1`.


      tags:
        - Block Storage
      parameters:
        - $ref: '#/components/parameters/volume_name'
        - $ref: '#/components/parameters/region'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/volumes'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            # List all volumes
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/volumes?region=nyc1"

            # List volumes filtered by name
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/volumes?name=example"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                volumes, _, err := client.Storage.ListVolumes(ctx, opt)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            volumes = client.volumes.all
            volumes.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.volumes.list(region="nyc3")
      security:
        - bearer_auth:
            - block_storage:read
    post:
      operationId: volumes_create
      summary: Create a New Block Storage Volume
      description: >-
        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.
      tags:
        - Block Storage
      requestBody:
        required: true
        content:
          application/json:
            schema:
              anyOf:
                - $ref: '#/components/schemas/volumes_ext4'
                - $ref: '#/components/schemas/volumes_xfs'
            examples:
              ext4 volume:
                value:
                  size_gigabytes: 10
                  name: ext4-example
                  description: Block store for examples
                  region: nyc1
                  filesystem_type: ext4
                  filesystem_label: ext4_volume_01
              xfs volume:
                value:
                  size_gigabytes: 10
                  name: xfs_example
                  description: Block store for examples
                  region: nyc1
                  filesystem_type: xfs
                  filesystem_label: xfs_volume01
              Volume from a snapshot:
                value:
                  size_gigabytes: 10
                  name: snapshot_example
                  snapshot_id: b0798135-fb76-11eb-946a-0a58ac146f33
                  region: nyc1
                  description: A new volume based on a snapshot
                  filesystem_type: ext4
                  filesystem_label: ext4_volume_01
      responses:
        '201':
          $ref: '#/components/responses/volume'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"size_gigabytes":10, "name": "example", "description": "Block store for examples", "region": "nyc1", "filesystem_type": "ext4", "filesystem_label": "example"}' \
              "https://api.digitalocean.com/v2/volumes"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &VolumeCreateRequest{
                    Region:        "nyc1",
                    Name:          "example",
                    Description:   "Block store for examples",
                    SizeGigaBytes: 10,
                }

                volume, _, err := client.Storage.CreateVolume(ctx, createRequest)
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            volume = DropletKit::Volume.new(
              size_gigabytes: 10,
              name: 'Example',
              description: 'Block store for examples',
              region: 'nyc1'
            )
            client.volumes.create(volume)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "size_gigabytes": 10,
              "name": "ext4-example",
              "description": "Block store for examples",
              "region": "nyc1",
              "filesystem_type": "ext4",
              "filesystem_label": "ext4_volume_01"
            }

            resp = client.volumes.create(body=req)
      security:
        - bearer_auth:
            - block_storage:create
    delete:
      operationId: volumes_delete_byName
      summary: Delete a Block Storage Volume by Name
      description: >+
        Block storage volumes may also be deleted by name by sending a DELETE
        request with the volume's **name** and the **region slug** for the
        region it is located in as query parameters to
        `/v2/volumes?name=$VOLUME_NAME&region=nyc1`.

        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.

      tags:
        - Block Storage
      parameters:
        - $ref: '#/components/parameters/volume_name'
        - $ref: '#/components/parameters/region'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/volumes?name=example&region=nyc1" 
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.volumes.delete_by_name(name="ext4-ex")
      security:
        - bearer_auth:
            - block_storage:delete
  /v2/volumes/actions:
    post:
      operationId: volumeActions_post
      summary: Initiate A Block Storage Action By Volume Name
      description: >
        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
        fifteen

        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 |
      tags:
        - Block Storage Actions
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              anyOf:
                - $ref: '#/components/schemas/volume_action_post_attach'
                - $ref: '#/components/schemas/volume_action_post_detach'
              discriminator:
                propertyName: type
                mapping:
                  attach: '#/components/schemas/volume_action_post_attach'
                  detach: '#/components/schemas/volume_action_post_detach'
            examples:
              VolumeActionAttach:
                value:
                  type: attach
                  volume_name: example
                  droplet_id: 11612190
                  region: nyc1
                  tags:
                    - aninterestingtag
              VolumeActionDetach:
                value:
                  type: detach
                  volume_name: example
                  droplet_id: 11612190
                  region: nyc1
      responses:
        '202':
          $ref: '#/components/responses/volumeAction'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            # Attach a volume to a Droplet by name
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type": "attach", "volume_name": "example", "region": "nyc1", "droplet_id": "11612190","tags":["aninterestingtag"] }' \
              "https://api.digitalocean.com/v2/volumes/actions"

            # Remove a volume from a Droplet by name
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type": "detach", "droplet_id": "11612190", "volume_name": "example", "region": "nyc1"}' \
              "https://api.digitalocean.com/v2/volumes/actions"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "type": "attach",
              "volume_name": "example",
              "droplet_id": 11612190,
              "region": "nyc1",
              "tags": [
                "aninterestingtag"
              ]
            }

            resp = client.volume_actions.post(body=req)
      security:
        - bearer_auth:
            - block_storage_action:create
  /v2/volumes/snapshots/{snapshot_id}:
    get:
      operationId: volumeSnapshots_get_byId
      summary: Retrieve an Existing Volume Snapshot
      description: >+
        To retrieve the details of a snapshot that has been created from a
        volume, send a GET request to
        `/v2/volumes/snapshots/$VOLUME_SNAPSHOT_ID`.

      tags:
        - Block Storage
      parameters:
        - $ref: '#/components/parameters/volume_snapshot_id'
      responses:
        '200':
          $ref: '#/components/responses/volumeSnapshot'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H 'Content-Type: application/json' \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/volumes/snapshots/fbe805e8-866b-11e6-96bf-000f53315a41"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "big-data-snapshot1475261774"
            }

            resp = client.volume_snapshots.get_by_id(snapshot_id="da3aa3a")
      security:
        - bearer_auth:
            - block_storage_snapshot:read
    delete:
      operationId: volumeSnapshots_delete_byId
      summary: Delete a Volume Snapshot
      description: >
        To delete a volume snapshot, send a DELETE request to

        `/v2/volumes/snapshots/$VOLUME_SNAPSHOT_ID`.


        A status of 204 will be given. This indicates that the request was
        processed

        successfully, but that no response body is needed.
      tags:
        - Block Storage
      parameters:
        - $ref: '#/components/parameters/volume_snapshot_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H 'Content-Type: application/json' \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/snapshots/fbe805e8-866b-11e6-96bf-000f53315a41"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Storage.DeleteSnapshot(ctx, "82a48a18-873f-11e6-96bf-000f53315a41")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.snapshots.delete(id: "fbe805e8-866b-11e6-96bf-000f53315a41")
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "big-data-snapshot1475261774"
            }

            resp = client.volume_snapshots.delete_by_id(snapshot_id="da3aa3a")
      security:
        - bearer_auth:
            - block_storage_snapshot:delete
  /v2/volumes/{volume_id}:
    get:
      operationId: volumes_get
      summary: Retrieve an Existing Block Storage Volume
      description: >+
        To show information about a block storage volume, send a GET request to
        `/v2/volumes/$VOLUME_ID`.

      tags:
        - Block Storage
      parameters:
        - $ref: '#/components/parameters/volume_id'
      responses:
        '200':
          $ref: '#/components/responses/volume'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            # Retrieve an existing volume
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/volumes/7724db7c-e098-11e5-b522-000f53304e51"

            # Retrieve and existing volume by name
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/volumes?name=example&region=nyc1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                volume, _, err := client.Storage.GetVolume(ctx, "7724db7c-e098-11e5-b522-000f53304e51")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.volumes.find(id: '7724db7c-e098-11e5-b522-000f53304e51')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.volumes.get(volume_id="7724db7c")
      security:
        - bearer_auth:
            - block_storage:read
    delete:
      operationId: volumes_delete
      summary: Delete a Block Storage Volume
      description: >+
        To delete a block storage volume, destroying all data and removing it
        from your account, send a DELETE request to `/v2/volumes/$VOLUME_ID`.

        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.

      tags:
        - Block Storage
      parameters:
        - $ref: '#/components/parameters/volume_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/volumes/7724db7c-e098-11e5-b522-000f53304e51"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                _, err := client.Storage.DeleteVolume(ctx, "7724db7c-e098-11e5-b522-000f53304e51")
            }
        - lang: Ruby
          source: |-
            require 'droplet_kit'
            token = ENV['DIGITALOCEAN_TOKEN']
            client = DropletKit::Client.new(access_token: token)

            client.volumes.delete(id: '7724db7c-e098-11e5-b522-000f53304e51')
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.volumes.delete(volume_id="7724db7c")
      security:
        - bearer_auth:
            - block_storage:delete
  /v2/volumes/{volume_id}/actions:
    get:
      operationId: volumeActions_list
      summary: List All Actions for a Volume
      description: >+
        To retrieve all actions that have been executed on a volume, send a GET
        request to `/v2/volumes/$VOLUME_ID/actions`.

      tags:
        - Block Storage Actions
      parameters:
        - $ref: '#/components/parameters/volume_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/volumeActions'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/volumes/7724db7c-e098-11e5-b522-000f53304e51/actions?page=1&per_page=1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                actions, _, err := client.StorageActions(ctx, "7724db7c-e098-11e5-b522-000f53304e51", opt)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            actions = client.volume.actions(id:
            '7724db7c-e098-11e5-b522-000f53304e51')

            actions.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.volume_actions.list(volume_id="7724db7c")
      security:
        - bearer_auth:
            - block_storage_action:read
    post:
      operationId: volumeActions_post_byId
      summary: Initiate A Block Storage Action By Volume Id
      description: >
        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
        fifteen

        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.
      tags:
        - Block Storage Actions
      parameters:
        - $ref: '#/components/parameters/volume_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              anyOf:
                - $ref: '#/components/schemas/volume_action_post_attach'
                - $ref: '#/components/schemas/volume_action_post_detach'
                - $ref: '#/components/schemas/volume_action_post_resize'
              discriminator:
                propertyName: type
                mapping:
                  attach: '#/components/schemas/volume_action_post_attach'
                  detach: '#/components/schemas/volume_action_post_detach'
                  resize: '#/components/schemas/volume_action_post_resize'
            examples:
              VolumeActionAttach:
                value:
                  type: attach
                  droplet_id: 11612190
                  region: nyc1
                  tags:
                    - aninterestingtag
              VolumeActionDetach:
                value:
                  type: detach
                  droplet_id: 11612190
                  region: nyc1
              VolumeActionResize:
                value:
                  type: resize
                  size_gigabytes: 100
                  region: nyc1
      responses:
        '202':
          $ref: '#/components/responses/volumeAction'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            # Attach a Volume to a Droplet by ID
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type": "attach", "droplet_id": 11612190, "region": "nyc1", "tags":["aninterestingtag"]}' \
              "https://api.digitalocean.com/v2/volumes/7724db7c-e098-11e5-b522-000f53304e51/actions"

            # Remove a Volume from a Droplet by ID
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type": "detach", "droplet_id": "11612190", "region": "nyc1"}' \
              "https://api.digitalocean.com/v2/volumes/7724db7c-e098-11e5-b522-000f53304e51/actions"

            # Resize a Volume
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"type":"resize","size_gigabytes": 100, "region":"nyc1"}' \
              "https://api.digitalocean.com/v2/volumes/7724db7c-e098-11e5-b522-000f53304e51/actions"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

              // Attach a Volume to a Droplet by ID
                action, _, err := client.StorageActions.Attach(ctx, "7724db7c-e098-11e5-b522-000f53304e51", 11612190)

              // Remove a Volume from a Droplet by ID
              // action, _, err := client.StorageActions.Detach(ctx, "7724db7c-e098-11e5-b522-000f53304e51")

              // Resize a Volume
              // action, _, err := client.StorageActions.Resize(ctx, "7724db7c-e098-11e5-b522-000f53304e51", 100, "nyc1")
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            # Attach a Volume to a Droplet by ID

            client.volume_actions.attach(volume_id:'7724db7c-e098-11e5-b522-000f53304e51',
            droplet_id: 11612190, region: 'nyc1'



            # Remove a Volume from a Droplet by ID

            #
            client.volume_actions.detach(volume_id:'7724db7c-e098-11e5-b522-000f53304e51',
            droplet_id: 11612190, region: 'nyc1'
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "type": "attach",
              "droplet_id": 11612190,
              "region": "nyc1",
              "tags": [
                "aninterestingtag"
              ]
            }


            resp = client.volume_actions.post_by_id(volume_id="7724db7c",
            body=req)
      security:
        - bearer_auth:
            - block_storage_action:create
  /v2/volumes/{volume_id}/actions/{action_id}:
    get:
      operationId: volumeActions_get
      summary: Retrieve an Existing Volume Action
      description: >+
        To retrieve the status of a volume action, send a GET request to
        `/v2/volumes/$VOLUME_ID/actions/$ACTION_ID`.

      tags:
        - Block Storage Actions
      parameters:
        - $ref: '#/components/parameters/volume_id'
        - $ref: '#/components/parameters/action_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/volumeAction'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/volumes/7724db7c-e098-11e5-b522-000f53304e51/actions/72531856"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                action, _, err := client.StorageActions.Get(ctx, "7724db7c-e098-11e5-b522-000f53304e51", 72531856)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.volume.actions.find(volume_id:
            '7724db7c-e098-11e5-b522-000f53304e51', id: 72531856)
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.volume_actions.get(volume_id="7724db7c")
      security:
        - bearer_auth:
            - block_storage_action:read
  /v2/volumes/{volume_id}/snapshots:
    get:
      operationId: volumeSnapshots_list
      summary: List Snapshots for a Volume
      description: >+
        To retrieve the snapshots that have been created from a volume, send a
        GET request to `/v2/volumes/$VOLUME_ID/snapshots`.

      tags:
        - Block Storage
      parameters:
        - $ref: '#/components/parameters/volume_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/volumeSnapshots'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H 'Content-Type: application/json' \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/volumes/82a48a18-873f-11e6-96bf-000f53315a41/snapshots?page=1&per_page=1"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opt := &godo.ListOptions{
                    Page:    1,
                    PerPage: 200,
                }

                volumes, _, err := client.Storage.ListSnapshots(ctx, '82a48a18-873f-11e6-96bf-000f53315a41', opt)
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            snapshots = client.volumes.snapshots(id:
            '82a48a18-873f-11e6-96bf-000f53315a41')

            snapshots.each
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "big-data-snapshot1475261774"
            }

            resp = client.volume_snapshots.list(snapshot_id="da3aa3a")
      security:
        - bearer_auth:
            - block_storage_snapshot:read
    post:
      operationId: volumeSnapshots_create
      summary: Create Snapshot from a Volume
      description: >-
        To create a snapshot from a volume, sent a POST request to
        `/v2/volumes/$VOLUME_ID/snapshots`.
      tags:
        - Block Storage
      parameters:
        - $ref: '#/components/parameters/volume_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                name:
                  type: string
                  description: A human-readable name for the volume snapshot.
                  example: big-data-snapshot1475261774
                tags:
                  $ref: '#/components/schemas/tags_array'
              required:
                - name
            example:
              name: big-data-snapshot1475261774
      responses:
        '201':
          $ref: '#/components/responses/volumeSnapshot'
        '400':
          $ref: '#/components/responses/bad_request'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H 'Content-Type: application/json' \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"big-data-snapshot1475261774", "tags":["aninterestingtag"]}' \
              "https://api.digitalocean.com/v2/volumes/82a48a18-873f-11e6-96bf-000f53315a41/snapshots"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                snapshot, _, err := client.Storage.CreateSnapshot(ctx, &godo.SnapshotCreateRequest{
                  VolumeID:    "82a48a18-873f-11e6-96bf-000f53315a41",
                  Name:        "my snapshot",
                  Description: "my description",
                  Tags:        []string{"one", "two"},
                })
            }
        - lang: Ruby
          source: >-
            require 'droplet_kit'

            token = ENV['DIGITALOCEAN_TOKEN']

            client = DropletKit::Client.new(access_token: token)


            client.volumes.create_snapshot(id:
            "82a48a18-873f-11e6-96bf-000f53315a41", name:
            "big-data-snapshot1475261774")
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "big-data-snapshot1475261774"
            }

            resp = client.volume_snapshots.create(volume_id="da3aa3a", body=req)
      security:
        - bearer_auth:
            - block_storage_snapshot:create
  /v2/vpcs:
    get:
      operationId: vpcs_list
      summary: List All VPCs
      description: >-
        To list all of the VPCs on your account, send a GET request to
        `/v2/vpcs`.
      tags:
        - VPCs
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_vpcs'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/vpcs"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                opts := &godo.ListOptions{
                 Page:    1,
                 PerPage: 200,
                }

                vpcs, _, err := client.VPCs.List(ctx, opts)
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.vpcs.list()
      security:
        - bearer_auth:
            - vpc:read
    post:
      operationId: vpcs_create
      summary: Create a New VPC
      description: >
        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.
      tags:
        - VPCs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              allOf:
                - $ref: '#/components/schemas/vpc_updatable'
                - $ref: '#/components/schemas/vpc_create'
              required:
                - name
                - region
      responses:
        '201':
          $ref: '#/components/responses/existing_vpc'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"my-new-vpc", "region":"nyc1", "ip_range": "10.10.10.0/24"}' \
              "https://api.digitalocean.com/v2/vpcs"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                createRequest := &godo.VPCCreateRequest{
                 Name:       "my-new-vpc",
                 RegionSlug: "nyc1",
                 IPRange:    "10.10.10.0/24",
                }

                vpc, _, err := client.VPCs.Create(ctx, createRequest)
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "env.prod-vpc",
              "description": "VPC for production environment",
              "region": "nyc1",
              "ip_range": "10.10.10.0/24"
            }

            resp = client.vpcs.create(body=req)
      security:
        - bearer_auth:
            - vpc:create
  /v2/vpcs/{vpc_id}:
    get:
      operationId: vpcs_get
      summary: Retrieve an Existing VPC
      description: >-
        To show information about an existing VPC, send a GET request to
        `/v2/vpcs/$VPC_ID`.
      tags:
        - VPCs
      parameters:
        - $ref: '#/components/parameters/vpc_id'
      responses:
        '200':
          $ref: '#/components/responses/existing_vpc'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/vpcs/5a4981aa-9653-4bd1-bef5-d6bff52042e4"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                vpc, _, err := client.VPCs.Get(ctx, "5a4981aa-9653-4bd1-bef5-d6bff52042e4")
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.vpcs.get(vpc_id="e0fe0f4d")
      security:
        - bearer_auth:
            - vpc:read
    put:
      operationId: vpcs_update
      summary: Update a VPC
      description: >
        To update information about a VPC, send a PUT request to
        `/v2/vpcs/$VPC_ID`.
      tags:
        - VPCs
      parameters:
        - $ref: '#/components/parameters/vpc_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              allOf:
                - $ref: '#/components/schemas/vpc_updatable'
                - $ref: '#/components/schemas/vpc_default'
              required:
                - name
      responses:
        '200':
          $ref: '#/components/responses/existing_vpc'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"renamed-new-vpc", "description": "A new description", "default": true}' \
              "https://api.digitalocean.com/v2/vpcs/5a4981aa-9653-4bd1-bef5-d6bff52042e4"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                updateRequest := &godo.VPCUpdateRequest{
                 Name:        "renamed-new-vpc",
                 Description: "A new description",
                }

                _, _, err := client.VPCs.Update(ctx, "5a4981aa-9653-4bd1-bef5-d6bff52042e4", updateRequest)
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "env.prod-vpc",
              "description": "VPC for production environment",
              "default": True
            }

            resp = client.vpcs.update(vpc_id="8fdsfa", body=req)
      security:
        - bearer_auth:
            - vpc:update
    patch:
      operationId: vpcs_patch
      summary: Partially Update a VPC
      description: |
        To update a subset of information about a VPC, send a PATCH request to
        `/v2/vpcs/$VPC_ID`.
      tags:
        - VPCs
      parameters:
        - $ref: '#/components/parameters/vpc_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/vpc_updatable'
                - $ref: '#/components/schemas/vpc_default'
      responses:
        '200':
          $ref: '#/components/responses/existing_vpc'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PATCH \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"description": "An updated description"}' \
              "https://api.digitalocean.com/v2/vpcs/5a4981aa-9653-4bd1-bef5-d6bff52042e4"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                vpcDesc := "An updated description"
                _, _, err := client.VPCs.Set(ctx, "5a4981aa-9653-4bd1-bef5-d6bff52042e4", godo.VPCSetDescription(vpcDesc))
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "env.prod-vpc",
              "description": "VPC for production environment",
              "default": True
            }

            resp = client.vpcs.patch(vpc_id="8fdsfa", body=req)
      security:
        - bearer_auth:
            - vpc:update
    delete:
      operationId: vpcs_delete
      summary: Delete a VPC
      description: >
        To delete a VPC, send a DELETE request to `/v2/vpcs/$VPC_ID`. A 204
        status

        code with no body will be returned in response to a successful request.


        The default VPC for a region can not be deleted. Additionally, a VPC can
        only

        be deleted if it does not contain any member resources. Attempting to
        delete

        a region's default VPC or a VPC that still has members will result in a

        403 Forbidden error response.
      tags:
        - VPCs
      parameters:
        - $ref: '#/components/parameters/vpc_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/vpcs/e0fe0f4d-596a-465e-a902-571ce57b79fa"
        - lang: Go
          source: |-
            import (
                "context"
                "os"

                "github.com/digitalocean/godo"
            )

            func main() {
                token := os.Getenv("DIGITALOCEAN_TOKEN")

                client := godo.NewFromToken(token)
                ctx := context.TODO()

                resp, err := client.VPCs.Delete(ctx, "5a4981aa-9653-4bd1-bef5-d6bff52042e4")
            }
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.vpcs.delete(vpc_id="e0fe0f4d")
      security:
        - bearer_auth:
            - vpc:delete
  /v2/vpcs/{vpc_id}/members:
    get:
      operationId: vpcs_list_members
      summary: List the Member Resources of a VPC
      description: >
        To list all of the resources that are members of a VPC, send a GET
        request to

        `/v2/vpcs/$VPC_ID/members`.


        To only list resources of a specific type that are members of the VPC,

        included a `resource_type` query parameter. For example, to only list
        Droplets

        in the VPC, send a GET request to
        `/v2/vpcs/$VPC_ID/members?resource_type=droplet`.
      tags:
        - VPCs
      parameters:
        - $ref: '#/components/parameters/vpc_id'
        - $ref: '#/components/parameters/vpc_resource_type'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/vpc_members'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/vpcs/5a4981aa-9653-4bd1-bef5-d6bff52042e4/members"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.vpcs.list_members(vpc_id="e0fe0f4d")
      security:
        - bearer_auth:
            - vpc:read
  /v2/uptime/checks:
    get:
      operationId: uptime_list_checks
      summary: List All Checks
      description: >-
        To list all of the Uptime checks on your account, send a GET request to
        `/v2/uptime/checks`.
      tags:
        - Uptime
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_checks'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/uptime/checks"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.uptime.checks_list()
      security:
        - bearer_auth:
            - uptime:read
    post:
      operationId: uptime_create_check
      summary: Create a New Check
      description: >
        To create an Uptime check, send a POST request to `/v2/uptime/checks`
        specifying the attributes

        in the table below in the JSON body.
      tags:
        - Uptime
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              $ref: '#/components/schemas/check_updatable'
              required:
                - name
                - method
                - target
                - regions
                - type
                - enabled
      responses:
        '201':
          $ref: '#/components/responses/existing_check'
        '401':
          $ref: '#/components/responses/unauthorized'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"Landing page check","type":"https","target":"https://www.landingpage.com","regions":["us_east","eu_west"],"enabled":true}' \
              "https://api.digitalocean.com/v2/uptime/checks"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "Landing page check",
              "type": "https",
              "target": "https://www.landingpage.com",
              "regions": [
                "us_east",
                "eu_west"
              ],
              "enabled": True
            }

            resp = client.uptime.check_create(body=req)
      security:
        - bearer_auth:
            - uptime:create
  /v2/uptime/checks/{check_id}:
    get:
      operationId: uptime_get_check
      summary: Retrieve an Existing Check
      description: >-
        To show information about an existing check, send a GET request to
        `/v2/uptime/checks/$CHECK_ID`.
      tags:
        - Uptime
      parameters:
        - $ref: '#/components/parameters/check_id'
      responses:
        '200':
          $ref: '#/components/responses/existing_check'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/uptime/checks/{check_id}"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.uptime.check_get(check_id="fd9dfa")
      security:
        - bearer_auth:
            - uptime:read
    put:
      operationId: uptime_update_check
      summary: Update a Check
      description: >
        To update the settings of an Uptime check, send a PUT request to
        `/v2/uptime/checks/$CHECK_ID`.
      tags:
        - Uptime
      parameters:
        - $ref: '#/components/parameters/check_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              $ref: '#/components/schemas/check_updatable'
      responses:
        '200':
          $ref: '#/components/responses/existing_check'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"Landing page check","type":"https","target":"https://www.newlandingpage.com","regions":["us_east","eu_west"],"enabled":true}' \
              "https://api.digitalocean.com/v2/uptime/checks/{check_id}"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "Landing page check",
              "type": "https",
              "target": "https://www.landingpage.com",
              "regions": [
                "us_east",
                "eu_west"
              ],
              "enabled": True
            }

            resp = client.uptime.check_update(check_id="fd9fda", body=req)
      security:
        - bearer_auth:
            - uptime:update
    delete:
      operationId: uptime_delete_check
      summary: Delete a Check
      description: >
        To delete an Uptime check, send a DELETE request to
        `/v2/uptime/checks/$CHECK_ID`. A 204 status

        code with no body will be returned in response to a successful request.



        Deleting a check will also delete alerts associated with the check.
      tags:
        - Uptime
      parameters:
        - $ref: '#/components/parameters/check_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/uptime/checks/{check_id}"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.uptime.check_delete(check_id="fd9dfa")
      security:
        - bearer_auth:
            - uptime:delete
  /v2/uptime/checks/{check_id}/state:
    get:
      operationId: uptime_get_checkState
      summary: Retrieve Check State
      description: >-
        To show information about an existing check's state, send a GET request
        to `/v2/uptime/checks/$CHECK_ID/state`.
      tags:
        - Uptime
      parameters:
        - $ref: '#/components/parameters/check_id'
      responses:
        '200':
          $ref: '#/components/responses/existing_check_state'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/uptime/checks/{check_id}/state"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.uptime.check_state_get(check_id="fd9fda")
      security:
        - bearer_auth:
            - uptime:read
  /v2/uptime/checks/{check_id}/alerts:
    get:
      operationId: uptime_list_alerts
      summary: List All Alerts
      description: >-
        To list all of the alerts for an Uptime check, send a GET request to
        `/v2/uptime/checks/$CHECK_ID/alerts`.
      tags:
        - Uptime
      parameters:
        - $ref: '#/components/parameters/check_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          $ref: '#/components/responses/all_alerts'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/uptime/checks/{check_id}/alerts"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            resp = client.uptime.check_alerts_list(check_id="4de7ac8b")
      security:
        - bearer_auth:
            - uptime:read
    post:
      operationId: uptime_create_alert
      summary: Create a New Alert
      description: >
        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.
      tags:
        - Uptime
      parameters:
        - $ref: '#/components/parameters/check_id'
      requestBody:
        required: true
        description: >
          The ''type'' field dictates the type of alert, and hence what type of
          value to pass into the threshold property.

          Type | Description | Threshold Value

          -----|-------------|--------------------

          `latency` | alerts on the response latency | milliseconds

          `down` | alerts on a target registering as down in any region | N/A
          (Not required)

          `down_global` | alerts on a target registering as down globally | N/A
          (Not required)

          `ssl_expiry` | alerts on a SSL certificate expiring within $threshold
          days | days
        content:
          application/json:
            schema:
              type: object
              $ref: '#/components/schemas/alert'
              required:
                - name
                - type
                - notifications
                - period
      responses:
        '201':
          $ref: '#/components/responses/existing_alert'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"Landing page degraded performance","type":"latency","threshold":300,"comparison":"greater_than","notifications":{"email":["bob@example.com"],"slack":[{"channel":"Production Alerts","url":"https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ"}]},"period":"2m"}' \
              "https://api.digitalocean.com/v2/uptime/checks/{check_id}/alerts"
        - lang: Python
          source: |-
            import os
            from pydo import Client

            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

            req = {
              "name": "Landing page degraded performance",
              "type": "latency",
              "threshold": 300,
              "comparison": "greater_than",
              "notifications": {
                "email": [
                  "bob@example.com"
                ],
                "slack": [
                  {
                    "channel": "Production Alerts",
                    "url": "https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ"
                  }
                ]
              },
              "period": "2m"
            }

            resp = client.uptime.alert_create(check_id="4de7ac8b", body=req)
      security:
        - bearer_auth:
            - uptime:create
  /v2/uptime/checks/{check_id}/alerts/{alert_id}:
    get:
      operationId: uptime_get_alert
      summary: Retrieve an Existing Alert
      description: >-
        To show information about an existing alert, send a GET request to
        `/v2/uptime/checks/$CHECK_ID/alerts/$ALERT_ID`.
      tags:
        - Uptime
      parameters:
        - $ref: '#/components/parameters/check_id'
        - $ref: '#/components/parameters/parameters_alert_id'
      responses:
        '200':
          $ref: '#/components/responses/existing_alert'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X GET \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/uptime/checks/{check_id}/alerts/{alert_id}"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp = client.uptime.alert_get(check_id="4de7ac8b",
            alert_id="da9da9")
      security:
        - bearer_auth:
            - uptime:read
    put:
      operationId: uptime_update_alert
      summary: Update an Alert
      description: >
        To update the settings of an Uptime alert, send a PUT request to
        `/v2/uptime/checks/$CHECK_ID/alerts/$ALERT_ID`.
      tags:
        - Uptime
      parameters:
        - $ref: '#/components/parameters/check_id'
        - $ref: '#/components/parameters/parameters_alert_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              $ref: '#/components/schemas/alert_updatable'
              required:
                - name
                - type
                - notifications
                - period
      responses:
        '200':
          $ref: '#/components/responses/existing_alert'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X PUT \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              -d '{"name":"Landing page down globally","type":"down_global","notifications":{"email":["bob@example.com"],"slack":[{"channel":"Production Alerts","url":"https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ"}]},"period":"2m"}' \
              "https://api.digitalocean.com/v2/uptime/checks/{check_id}/alerts/{alert_id}"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            req = {
              "name": "Landing page degraded performance",
              "type": "latency",
              "threshold": 300,
              "comparison": "greater_than",
              "notifications": {
                "email": [
                  "bob@example.com"
                ],
                "slack": [
                  {
                    "channel": "Production Alerts",
                    "url": "https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ"
                  }
                ]
              },
              "period": "2m"
            }


            resp = client.uptime.alert_update(check_id="4de7ac8b",
            alert_id="da9da9", body=req)
      security:
        - bearer_auth:
            - uptime:update
    delete:
      operationId: uptime_delete_alert
      summary: Delete an Alert
      description: >
        To delete an Uptime alert, send a DELETE request to
        `/v2/uptime/checks/$CHECK_ID/alerts/$ALERT_ID`. A 204 status

        code with no body will be returned in response to a successful request.
      tags:
        - Uptime
      parameters:
        - $ref: '#/components/parameters/check_id'
        - $ref: '#/components/parameters/parameters_alert_id'
      responses:
        '204':
          $ref: '#/components/responses/no_content'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/not_found'
        '429':
          $ref: '#/components/responses/too_many_requests'
        '500':
          $ref: '#/components/responses/server_error'
        default:
          $ref: '#/components/responses/unexpected_error'
      x-codeSamples:
        - lang: cURL
          source: |-
            curl -X DELETE \
              -H "Content-Type: application/json" \
              -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
              "https://api.digitalocean.com/v2/uptime/checks/{check_id}/alerts/{alert_id}"
        - lang: Python
          source: >-
            import os

            from pydo import Client


            client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))


            resp = client.uptime.alert_delete(check_id="4de7ac8b",
            alert_id="da9da9")
      security:
        - bearer_auth:
            - uptime:delete
components:
  securitySchemes:
    bearer_auth:
      type: http
      scheme: bearer
      description: >
        ## OAuth Authentication


        In order to interact with the DigitalOcean API, you or your application
        must

        authenticate.


        The DigitalOcean API handles this through OAuth, an open standard for

        authorization. OAuth allows you to delegate access to your account.

        Scopes can be used to grant full access, read-only access, or access to

        a specific set of endpoints.


        You can generate an OAuth token by visiting the [Apps &
        API](https://cloud.digitalocean.com/account/api/tokens)

        section of the DigitalOcean control panel for your account.


        An OAuth token functions as a complete authentication request. In
        effect, it

        acts as a substitute for a username and password pair.


        Because of this, it is absolutely **essential** that you keep your OAuth

        tokens secure. In fact, upon generation, the web interface will only
        display

        each token a single time in order to prevent the token from being
        compromised.


        DigitalOcean access tokens begin with an identifiable prefix in order to

        distinguish them from other similar tokens.


        - `dop_v1_` for personal access tokens generated in the control panel

        - `doo_v1_` for tokens generated by applications using [the OAuth
        flow](https://docs.digitalocean.com/reference/api/oauth-api/)

        - `dor_v1_` for OAuth refresh tokens


        ### Scopes


        Scopes act like permissions assigned to an API token. These permissions

        determine what actions the token can perform. You can create API

        tokens that grant read-only access, full access, or limited access to

        specific endpoints by using custom scopes.


        Generally, scopes are designed to match HTTP verbs and common CRUD

        operations (Create, Read, Update, Delete).


        | HTTP Verb | CRUD Operation | Scope |

        |---|---|---|

        | GET | Read | `<resource>:read` |

        | POST | Create | `<resource>:create` |

        | PUT/PATCH | Update | `<resource>:update` |

        | DELETE | Delete | `<resource>:delete` |


        For example, creating a new Droplet by making a `POST` request to the

        `/v2/droplets` endpoint requires the `droplet:create` scope while

        listing Droplets by making a `GET` request to the `/v2/droplets`

        endpoint requires the `droplet:read` scope.


        Each endpoint below specifies which scope is required to access it when

        using custom scopes.


        ### How to Authenticate with OAuth


        In order to make an authenticated request, include a bearer-type

        `Authorization` header containing your OAuth token. All requests must be

        made over HTTPS.


        ### Authenticate with a Bearer Authorization Header


        ```

        curl -X $HTTP_METHOD -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
        "https://api.digitalocean.com/v2/$OBJECT"

        ```
  parameters:
    oneClicks_type:
      in: query
      name: type
      description: Restrict results to a certain type of 1-Click.
      required: false
      schema:
        type: string
        enum:
          - droplet
          - kubernetes
      example: kubernetes
    per_page:
      in: query
      name: per_page
      required: false
      description: Number of items returned per page
      schema:
        type: integer
        minimum: 1
        default: 20
        maximum: 200
      example: 2
    page:
      in: query
      name: page
      required: false
      description: Which 'page' of paginated results to return.
      schema:
        type: integer
        minimum: 1
        default: 1
      example: 1
    ssh_key_identifier:
      in: path
      name: ssh_key_identifier
      required: true
      description: Either the ID or the fingerprint of an existing SSH key.
      schema:
        anyOf:
          - $ref: '#/components/schemas/ssh_key_id'
          - $ref: '#/components/schemas/ssh_key_fingerprint'
      example: 512189
    action_id:
      in: path
      name: action_id
      description: >-
        A unique numeric ID that can be used to identify and reference an
        action.
      required: true
      schema:
        type: integer
        minimum: 1
      example: 36804636
    with_projects:
      description: Whether the project_id of listed apps should be fetched and included.
      in: query
      name: with_projects
      schema:
        type: boolean
      example: true
    accept:
      description: >-
        The content-type that should be used by the response. By default, the
        response will be `application/json`. `application/yaml` is also
        supported.
      in: header
      name: Accept
      schema:
        type: string
        enum:
          - application/json
          - application/yaml
      example: application/json
    content-type:
      description: >-
        The content-type used for the request. By default, the requests are
        assumed to use `application/json`. `application/yaml` is also supported.
      in: header
      name: Content-Type
      schema:
        type: string
        enum:
          - application/json
          - application/yaml
      example: application/json
    id_app:
      description: The ID of the app
      in: path
      name: id
      required: true
      schema:
        type: string
      example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
    app_name:
      description: The name of the app to retrieve.
      in: query
      name: name
      schema:
        type: string
      example: myApp
    app_id:
      description: The app ID
      in: path
      name: app_id
      required: true
      schema:
        type: string
      example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
    component:
      description: >-
        An optional component name. If set, logs will be limited to this
        component only.
      in: path
      name: component_name
      required: true
      schema:
        type: string
      example: component
    live_updates:
      description: Whether the logs should follow live updates.
      in: query
      name: follow
      schema:
        type: boolean
      example: true
    log_type:
      description: |-
        The type of logs to retrieve
        - BUILD: Build-time logs
        - DEPLOY: Deploy-time logs
        - RUN: Live run-time logs
        - RUN_RESTARTED: Logs of crashed/restarted instances during runtime
      in: query
      name: type
      required: true
      schema:
        default: UNSPECIFIED
        enum:
          - UNSPECIFIED
          - BUILD
          - DEPLOY
          - RUN
          - RUN_RESTARTED
        type: string
      example: BUILD
    time_wait:
      description: >-
        An optional time duration to wait if the underlying component instance
        is not immediately available. Default: `3m`.
      in: query
      name: pod_connection_timeout
      schema:
        type: string
      example: 3m
    deployment_id:
      description: The deployment ID
      in: path
      name: deployment_id
      required: true
      schema:
        type: string
      example: 3aa4d20e-5527-4c00-b496-601fbd22520a
    slug_size:
      description: The slug of the instance size
      in: path
      name: slug
      required: true
      schema:
        type: string
      example: apps-s-1vcpu-0.5gb
    alert_id:
      description: The alert ID
      in: path
      name: alert_id
      required: true
      schema:
        type: string
      example: 5a624ab5-dd58-4b39-b7dd-8b7c36e8a91d
    cdn_endpoint_id:
      in: path
      name: cdn_id
      description: A unique identifier for a CDN endpoint.
      required: true
      schema:
        type: string
        format: uuid
        minimum: 1
      example: 19f06b6a-3ace-4315-b086-499a0e521b76
    certificate_name:
      name: name
      in: query
      description: Name of expected certificate
      required: false
      schema:
        type: string
        default: ''
      example: certificate-name
    certificate_id:
      in: path
      name: certificate_id
      description: A unique identifier for a certificate.
      required: true
      schema:
        type: string
        format: uuid
        minimum: 1
      example: 4de7ac8b-495b-4884-9a69-1050c6793cd6
    invoice_uuid:
      name: invoice_uuid
      description: UUID of the invoice
      in: path
      schema:
        type: string
      example: 22737513-0ea7-4206-8ceb-98a575af7681
      required: true
    tag_name:
      in: query
      name: tag_name
      description: Limits the results to database clusters with a specific tag.
      required: false
      example: production
      schema:
        type: string
    database_cluster_uuid:
      in: path
      name: database_cluster_uuid
      description: A unique identifier for a database cluster.
      required: true
      example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
      schema:
        type: string
        format: uuid
    migration_id:
      in: path
      name: migration_id
      description: A unique identifier assigned to the online migration.
      required: true
      example: 77b28fc8-19ff-11eb-8c9c-c68e24557488
      schema:
        type: string
    replica_name:
      in: path
      name: replica_name
      description: The name of the database replica.
      required: true
      example: read-nyc3-01
      schema:
        type: string
    username:
      in: path
      name: username
      description: The name of the database user.
      required: true
      example: app-01
      schema:
        type: string
    database_name:
      in: path
      name: database_name
      description: The name of the database.
      required: true
      example: alpha
      schema:
        type: string
    pool_name:
      in: path
      name: pool_name
      description: The name used to identify the connection pool.
      required: true
      example: backend-pool
      schema:
        type: string
    kafka_topic_name:
      in: path
      name: topic_name
      description: The name used to identify the Kafka topic.
      required: true
      example: customer-events
      schema:
        type: string
    logsink_id:
      in: path
      name: logsink_id
      description: A unique identifier for a logsink of a database cluster
      required: true
      example: 50484ec3-19d6-4cd3-b56f-3b0381c289a6
      schema:
        type: string
    opensearch_index_name:
      in: path
      name: index_name
      description: The name of the OpenSearch index.
      required: true
      example: logs-*
      schema:
        type: string
    domain_name:
      name: domain_name
      description: The name of the domain itself.
      in: path
      schema:
        type: string
      example: example.com
      required: true
    domain_name_query:
      name: name
      description: >-
        A fully qualified record name. For example, to only include records
        matching sub.example.com, send a GET request to
        `/v2/domains/$DOMAIN_NAME/records?name=sub.example.com`.
      in: query
      schema:
        type: string
      example: sub.example.com
    domain_type_query:
      name: type
      description: 'The type of the DNS record. For example: A, CNAME, TXT, ...'
      in: query
      schema:
        type: string
        enum:
          - A
          - AAAA
          - CAA
          - CNAME
          - MX
          - NS
          - SOA
          - SRV
          - TXT
      example: A
    domain_record_id:
      name: domain_record_id
      description: The unique identifier of the domain record.
      in: path
      schema:
        type: integer
      example: 3352896
      required: true
    droplet_tag_name:
      in: query
      name: tag_name
      description: >-
        Used to filter Droplets by a specific tag. Can not be combined with
        `name`.
      required: false
      schema:
        type: string
      example: env:prod
    droplet_name:
      in: query
      name: name
      description: >-
        Used to filter list response by Droplet name returning only exact
        matches. It is case-insensitive and can not be combined with `tag_name`.
      required: false
      schema:
        type: string
      example: web-01
    droplet_delete_tag_name:
      in: query
      name: tag_name
      description: Specifies Droplets to be deleted by tag.
      required: true
      schema:
        type: string
      example: env:test
    droplet_id:
      in: path
      name: droplet_id
      description: A unique identifier for a Droplet instance.
      required: true
      schema:
        type: integer
        minimum: 1
      example: 3164444
    x_dangerous:
      in: header
      name: X-Dangerous
      description: >-
        Acknowledge this action will destroy the Droplet and all associated
        resources and _can not_ be reversed.
      schema:
        type: boolean
      example: true
      required: true
    firewall_id:
      name: firewall_id
      description: A unique ID that can be used to identify and reference a firewall.
      in: path
      schema:
        type: string
        format: uuid
      example: bb4b2611-3d72-467b-8602-280330ecd65c
      required: true
    floating_ip:
      in: path
      name: floating_ip
      description: A floating IP address.
      required: true
      schema:
        type: string
        format: ipv4
        minimum: 1
      example: 45.55.96.47
    namespace_id:
      name: namespace_id
      description: The ID of the namespace to be managed.
      in: path
      schema:
        type: string
      example: fn-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      required: true
    trigger_name:
      name: trigger_name
      description: The name of the trigger to be managed.
      in: path
      schema:
        type: string
      example: my trigger
      required: true
    type:
      in: query
      name: type
      description: >-
        Filters results based on image type which can be either `application` or
        `distribution`.
      required: false
      schema:
        type: string
        enum:
          - application
          - distribution
      example: distribution
    private:
      in: query
      name: private
      description: Used to filter only user images.
      required: false
      schema:
        type: boolean
      example: true
    tag:
      in: query
      name: tag_name
      description: Used to filter images by a specific tag.
      required: false
      schema:
        type: string
      example: base-image
    image_id:
      in: path
      name: image_id
      description: >-
        A unique number that can be used to identify and reference a specific
        image.
      required: true
      schema:
        type: integer
      example: 62137902
    kubernetes_cluster_id:
      in: path
      name: cluster_id
      description: A unique ID that can be used to reference a Kubernetes cluster.
      required: true
      schema:
        type: string
        format: uuid
        minimum: 1
      example: bd5f5959-5e1e-4205-a714-a914373942af
    kubernetes_expiry_seconds:
      in: query
      name: expiry_seconds
      required: false
      description: >-
        The duration in seconds that the returned Kubernetes credentials will be
        valid. If not set or 0, the credentials will have a 7 day expiry.
      schema:
        type: integer
        minimum: 0
        default: 0
      example: 300
    kubernetes_node_pool_id:
      in: path
      name: node_pool_id
      description: A unique ID that can be used to reference a Kubernetes node pool.
      required: true
      schema:
        type: string
        format: uuid
        minimum: 1
      example: cdda885e-7663-40c8-bc74-3a036c66545d
    kubernetes_node_id:
      in: path
      name: node_id
      description: >-
        A unique ID that can be used to reference a node in a Kubernetes node
        pool.
      required: true
      schema:
        type: string
        format: uuid
        minimum: 1
      example: 478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f
    kubernetes_node_skip_drain:
      in: query
      name: skip_drain
      required: false
      description: >-
        Specifies whether or not to drain workloads from a node before it is
        deleted. Setting it to `1` causes node draining to be skipped. Omitting
        the query parameter or setting its value to `0` carries out draining
        prior to deletion.
      schema:
        type: integer
        minimum: 0
        maximum: 1
        default: 0
      example: 1
    kubernetes_node_replace:
      in: query
      name: replace
      required: false
      description: >-
        Specifies whether or not to replace a node after it has been deleted.
        Setting it to `1` causes the node to be replaced by a new one after
        deletion. Omitting the query parameter or setting its value to `0`
        deletes without replacement.
      schema:
        type: integer
        minimum: 0
        maximum: 1
        default: 0
      example: 1
    clusterlint_run_id:
      in: query
      name: run_id
      description: Specifies the clusterlint run whose results will be retrieved.
      required: false
      schema:
        type: string
        format: uuid
      example: 50c2f44c-011d-493e-aee5-361a4a0d1844
    load_balancer_id:
      in: path
      name: lb_id
      description: A unique identifier for a load balancer.
      required: true
      schema:
        type: string
        minimum: 1
      example: 4de7ac8b-495b-4884-9a69-1050c6793cd6
    alert_uuid:
      in: path
      name: alert_uuid
      description: A unique identifier for an alert policy.
      required: true
      schema:
        type: string
      example: 4de7ac8b-495b-4884-9a69-1050c6793cd6
    parameters_droplet_id:
      in: query
      name: host_id
      description: The droplet ID.
      example: '17209102'
      required: true
      schema:
        type: string
    network_interface:
      in: query
      name: interface
      description: The network interface.
      required: true
      example: private
      schema:
        type: string
        enum:
          - private
          - public
    network_direction:
      in: query
      name: direction
      description: The traffic direction.
      required: true
      example: inbound
      schema:
        type: string
        enum:
          - inbound
          - outbound
    metric_timestamp_start:
      in: query
      name: start
      description: UNIX timestamp to start metric window.
      example: '1620683817'
      required: true
      schema:
        type: string
    metric_timestamp_end:
      in: query
      name: end
      description: UNIX timestamp to end metric window.
      example: '1620705417'
      required: true
      schema:
        type: string
    parameters_app_id:
      in: query
      name: app_id
      description: The app UUID.
      example: 2db3c021-15ad-4088-bfe8-99dc972b9cf6
      required: true
      schema:
        type: string
    app_component:
      in: query
      name: app_component
      description: The app component name.
      example: sample-application
      required: false
      schema:
        type: string
    parameters_load_balancer_id:
      in: query
      name: lb_id
      description: A unique identifier for a load balancer.
      required: true
      schema:
        type: string
      example: 4de7ac8b-495b-4884-9a69-1050c6793cd6
    project_id:
      in: path
      name: project_id
      description: A unique identifier for a project.
      required: true
      schema:
        type: string
        format: uuid
        minimum: 1
      example: 4de7ac8b-495b-4884-9a69-1050c6793cd6
    registry_expiry_seconds:
      in: query
      name: expiry_seconds
      required: false
      description: >-
        The duration in seconds that the returned registry credentials will be
        valid. If not set or 0, the credentials will not expire.
      schema:
        type: integer
        minimum: 0
        default: 0
      example: 3600
    registry_read_write:
      in: query
      name: read_write
      required: false
      description: >-
        By default, the registry credentials allow for read-only access. Set
        this query parameter to `true` to obtain read-write credentials.
      schema:
        type: boolean
        default: false
      example: true
    registry_name:
      in: path
      name: registry_name
      description: The name of a container registry.
      required: true
      schema:
        type: string
      example: example
    token_pagination_page:
      in: query
      name: page
      required: false
      description: >-
        Which 'page' of paginated results to return. Ignored when 'page_token'
        is provided.
      schema:
        type: integer
        minimum: 1
        default: 1
      example: 1
    token_pagination_page_token:
      in: query
      name: page_token
      required: false
      description: >-
        Token to retrieve of the next or previous set of results more quickly
        than using 'page'.
      schema:
        type: string
      example: eyJUb2tlbiI6IkNnZGpiMjlz
    registry_repository_name:
      in: path
      name: repository_name
      description: >-
        The name of a container registry repository. If the name contains `/`
        characters, they must be URL-encoded, e.g. `%2F`.
      required: true
      schema:
        type: string
      example: repo-1
    registry_repository_tag:
      in: path
      name: repository_tag
      description: The name of a container registry repository tag.
      required: true
      schema:
        type: string
      example: 06a447a
    registry_manifest_digest:
      in: path
      name: manifest_digest
      description: The manifest digest of a container registry repository tag.
      required: true
      schema:
        type: string
      example: sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221
    garbage_collection_uuid:
      in: path
      name: garbage_collection_uuid
      description: The UUID of a garbage collection run.
      required: true
      schema:
        type: string
      example: eff0feee-49c7-4e8f-ba5c-a320c109c8a8
    reserved_ip:
      in: path
      name: reserved_ip
      description: A reserved IP address.
      required: true
      schema:
        type: string
        format: ipv4
        minimum: 1
      example: 45.55.96.47
    snapshot_resource_type:
      in: query
      name: resource_type
      description: Used to filter snapshots by a resource type.
      required: false
      schema:
        type: string
        enum:
          - droplet
          - volume
      example: droplet
    snapshot_id:
      in: path
      name: snapshot_id
      required: true
      description: >-
        Either the ID of an existing snapshot. This will be an integer for a
        Droplet snapshot or a string for a volume snapshot.
      schema:
        anyOf:
          - type: integer
            description: The ID of a Droplet snapshot.
            example: 6372321
          - type: string
            description: The ID of a volume snapshot.
            example: fbe805e8-866b-11e6-96bf-000f53315a41
      example: 6372321
    tag_id:
      in: path
      name: tag_id
      description: >-
        The name of the tag. Tags may contain letters, numbers, colons, dashes,
        and underscores. There is a limit of 255 characters per tag.
      required: true
      schema:
        type: string
        maxLength: 255
        pattern: ^[a-zA-Z0-9_\-\:]+$
      example: awesome
    volume_name:
      name: name
      in: query
      description: The block storage volume's name.
      schema:
        type: string
      example: example
    region:
      name: region
      in: query
      description: The slug identifier for the region where the resource is available.
      schema:
        $ref: '#/components/schemas/region_slug'
      example: nyc3
    volume_snapshot_id:
      name: snapshot_id
      in: path
      description: The unique identifier for the snapshot.
      schema:
        type: string
      required: true
      example: fbe805e8-866b-11e6-96bf-000f53315a41
    volume_id:
      name: volume_id
      in: path
      required: true
      description: The ID of the block storage volume.
      schema:
        type: string
        format: uuid
      example: 7724db7c-e098-11e5-b522-000f53304e51
    vpc_id:
      in: path
      name: vpc_id
      description: A unique identifier for a VPC.
      required: true
      schema:
        type: string
        format: uuid
        minimum: 1
      example: 4de7ac8b-495b-4884-9a69-1050c6793cd6
    vpc_resource_type:
      in: query
      name: resource_type
      description: Used to filter VPC members by a resource type.
      required: false
      schema:
        type: string
      example: droplet
    check_id:
      in: path
      name: check_id
      description: A unique identifier for a check.
      required: true
      schema:
        type: string
        format: uuid
      example: 4de7ac8b-495b-4884-9a69-1050c6793cd6
    parameters_alert_id:
      in: path
      name: alert_id
      description: A unique identifier for an alert.
      required: true
      schema:
        type: string
        format: uuid
      example: 17f0f0ae-b7e5-4ef6-86e3-aa569db58284
  headers:
    ratelimit-limit:
      schema:
        type: integer
      example: 5000
      description: >-
        The default limit on number of requests that can be made per hour and
        per minute. Current rate limits are 5000 requests per hour and 250
        requests per minute.
    ratelimit-remaining:
      schema:
        type: integer
      example: 4816
      description: >-
        The number of requests in your hourly quota that remain before you hit
        your request limit. See
        https://developers.digitalocean.com/documentation/v2/#rate-limit for
        information about how requests expire.
    ratelimit-reset:
      schema:
        type: integer
      example: 1444931833
      description: >-
        The time when the oldest request will expire. The value is given in Unix
        epoch time. See
        https://developers.digitalocean.com/documentation/v2/#rate-limit for
        information about how requests expire.
    content-disposition:
      description: >-
        Indicates if the content is expected to be displayed *inline* in the 
        browser, that is, as a Web page or as part of a Web page, or as an 
        *attachment*, that is downloaded and saved locally.
      schema:
        type: string
      example: >-
        attachment; filename="DigitalOcean Invoice 2020 Jul
        (6173678-418071234).csv"
    content-type:
      description: 'The type of data that is returned from a request. '
      schema:
        type: string
      example: application/json; charset=utf-8
    x-request-id:
      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.
      schema:
        type: string
        format: uuid
      example: 515850a0-a812-50bf-aa3c-d0d21d287e40
  schemas:
    error:
      type: object
      properties:
        id:
          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."
          type: string
          example: not_found
        message:
          description: >-
            A message providing additional information about the error,
            including  details to help resolve it when possible.
          type: string
          example: The resource you were accessing could not be found.
        request_id:
          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.
          type: string
          example: 4d9d8375-3c56-4925-a3e7-eb137fed17e9
      required:
        - id
        - message
    oneClicks:
      type: object
      properties:
        slug:
          title: slug
          type: string
          example: monitoring
          description: The slug identifier for the 1-Click application.
        type:
          title: type
          type: string
          example: kubernetes
          description: The type of the 1-Click application.
      required:
        - slug
        - type
    oneClicks_create:
      type: object
      properties:
        addon_slugs:
          title: addon_slugs
          type: array
          items:
            type: string
          example:
            - kube-state-metrics
            - loki
          default: []
          description: >-
            An array of 1-Click Application slugs to be installed to the
            Kubernetes cluster.
        cluster_uuid:
          title: cluster_uuid
          type: string
          example: 50a994b6-c303-438f-9495-7e896cfe6b08
          description: >-
            A unique ID for the Kubernetes cluster to which the 1-Click
            Applications will be installed.
      required:
        - addon_slugs
        - cluster_uuid
    account:
      type: object
      properties:
        droplet_limit:
          description: >-
            The total number of Droplets current user or team may have active at
            one time.
          type: integer
          example: 25
        floating_ip_limit:
          description: The total number of Floating IPs the current user or team may have.
          type: integer
          example: 5
        email:
          description: >-
            The email address used by the current user to register for
            DigitalOcean.
          type: string
          example: sammy@digitalocean.com
        name:
          description: The display name for the current user.
          type: string
          example: Sammy the Shark
        uuid:
          description: The unique universal identifier for the current user.
          type: string
          example: b6fr89dbf6d9156cace5f3c78dc9851d957381ef
        email_verified:
          description: >-
            If true, the user has verified their account via email. False
            otherwise.
          type: boolean
          default: false
          example: true
        status:
          description: This value is one of "active", "warning" or "locked".
          type: string
          enum:
            - active
            - warning
            - locked
          default: active
          example: active
        status_message:
          description: >-
            A human-readable message giving more details about the status of the
            account.
          type: string
          example: ' '
        team:
          type: object
          description: >-
            When authorized in a team context, includes information about the
            current team.
          properties:
            uuid:
              description: The unique universal identifier for the current team.
              type: string
              example: 5df3e3004a17e242b7c20ca6c9fc25b701a47ece
            name:
              description: The name for the current team.
              type: string
              example: My Team
      required:
        - droplet_limit
        - floating_ip_limit
        - email
        - uuid
        - email_verified
        - status
        - status_message
    ssh_key_id:
      type: integer
      description: >-
        A unique identification number for this key. Can be used to embed a 
        specific SSH key into a Droplet.
      readOnly: true
      example: 512189
    ssh_key_fingerprint:
      type: string
      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.
      readOnly: true
      example: 3b:16:bf:e4:8b:00:8b:b8:59:8c:a9:d3:f0:19:45:fa
    ssh_key_name:
      type: string
      description: >-
        A human-readable display name for this key, used to easily identify the
        SSH keys when they are displayed.
      example: My SSH Public Key
    sshKeys:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/ssh_key_id'
        fingerprint:
          $ref: '#/components/schemas/ssh_key_fingerprint'
        public_key:
          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.
          type: string
          example: >-
            ssh-rsa
            AEXAMPLEaC1yc2EAAAADAQABAAAAQQDDHr/jh2Jy4yALcK4JyWbVkPRaWmhck3IgCoeOO3z1e2dBowLh64QAM+Qb72pxekALga2oi4GvT+TlWNhzPH4V
            example
        name:
          $ref: '#/components/schemas/ssh_key_name'
      required:
        - public_key
        - name
    link_to_last_page:
      type: object
      properties:
        last:
          description: URI of the last page of the results.
          type: string
          example: https://api.digitalocean.com/v2/images?page=2
    link_to_next_page:
      type: object
      properties:
        next:
          description: URI of the next page of the results.
          type: string
          example: https://api.digitalocean.com/v2/images?page=2
    forward_links:
      allOf:
        - $ref: '#/components/schemas/link_to_last_page'
        - $ref: '#/components/schemas/link_to_next_page'
    link_to_first_page:
      type: object
      properties:
        first:
          description: URI of the first page of the results.
          type: string
          example: https://api.digitalocean.com/v2/images?page=1
    link_to_prev_page:
      type: object
      properties:
        prev:
          description: URI of the previous page of the results.
          type: string
          example: https://api.digitalocean.com/v2/images?page=1
    backward_links:
      allOf:
        - $ref: '#/components/schemas/link_to_first_page'
        - $ref: '#/components/schemas/link_to_prev_page'
    page_links:
      type: object
      properties:
        pages:
          anyOf:
            - $ref: '#/components/schemas/forward_links'
            - $ref: '#/components/schemas/backward_links'
            - {}
          example:
            pages:
              first: https://api.digitalocean.com/v2/account/keys?page=1
              prev: https://api.digitalocean.com/v2/account/keys?page=2
    pagination:
      type: object
      properties:
        links:
          $ref: '#/components/schemas/page_links'
    meta_properties:
      type: object
      description: Information about the response itself.
      properties:
        total:
          description: Number of objects returned by the request.
          type: integer
          example: 1
    meta:
      type: object
      properties:
        meta:
          allOf:
            - $ref: '#/components/schemas/meta_properties'
            - required:
                - total
      required:
        - meta
    region:
      type: object
      properties:
        name:
          type: string
          description: >-
            The display name of the region.  This will be a full name that is
            used in the control panel and other interfaces.
          example: New York 3
        slug:
          type: string
          description: >-
            A human-readable string that is used as a unique identifier for each
            region.
          example: nyc3
        features:
          items:
            type: string
          description: >-
            This attribute is set to an array which contains features available
            in this region
          example:
            - private_networking
            - backups
            - ipv6
            - metadata
            - install_agent
            - storage
            - image_transfer
        available:
          type: boolean
          description: >-
            This is a boolean value that represents whether new Droplets can be
            created in this region.
          example: true
        sizes:
          items:
            type: string
          description: >-
            This attribute is set to an array which contains the identifying
            slugs for the sizes available in this region.
          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
      required:
        - available
        - features
        - name
        - sizes
        - slug
    slug:
      type: string
      description: >-
        A human-readable string that is used as a unique identifier for each
        region.
      example: nyc3
    action:
      type: object
      properties:
        id:
          type: integer
          description: >-
            A unique numeric ID that can be used to identify and reference an
            action.
          example: 36804636
        status:
          type: string
          description: >-
            The current status of the action. This can be "in-progress",
            "completed", or "errored".
          enum:
            - in-progress
            - completed
            - errored
          example: completed
          default: in-progress
        type:
          type: string
          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.
          example: create
        started_at:
          type: string
          format: date-time
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the action was initiated.
          example: '2020-11-14T16:29:21Z'
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the action was completed.
          example: '2020-11-14T16:30:06Z'
        resource_id:
          type: integer
          nullable: true
          description: >-
            A unique identifier for the resource that the action is associated
            with.
          example: 3164444
        resource_type:
          type: string
          description: The type of resource that the action is associated with.
          example: droplet
        region:
          $ref: '#/components/schemas/region'
        region_slug:
          allOf:
            - $ref: '#/components/schemas/slug'
            - type: string
              nullable: true
    apps_deployment_job:
      properties:
        name:
          title: The name of this job
          type: string
          example: migrate-db
        source_commit_hash:
          title: The commit hash of the repository that was used to build this job
          type: string
          example: 54d4a727f457231062439895000d45437c7bb405
      type: object
    apps_deployment_functions:
      type: object
      properties:
        name:
          type: string
          title: The name of this functions component
          example: my-functions-component
        source_commit_hash:
          type: string
          description: >-
            The commit hash of the repository that was used to build this
            functions component.
          example: 54d4a727f457231062439895000d45437c7bb405
        namespace:
          type: string
          description: The namespace where the functions are deployed.
          example: ap-b2a93513-8d9b-4223-9d61-5e7272c81c32
    apps_deployment_phase:
      default: UNKNOWN
      enum:
        - UNKNOWN
        - PENDING_BUILD
        - BUILDING
        - PENDING_DEPLOY
        - DEPLOYING
        - ACTIVE
        - SUPERSEDED
        - ERROR
        - CANCELED
      type: string
      example: ACTIVE
    apps_deployment_progress_step_reason:
      properties:
        code:
          title: The error code
          type: string
          example: Title of Error
        message:
          title: The error message
          type: string
          example: This is an error
      type: object
    apps_deployment_progress_step_status:
      default: UNKNOWN
      enum:
        - UNKNOWN
        - PENDING
        - RUNNING
        - ERROR
        - SUCCESS
      type: string
      example: SUCCESS
    apps_deployment_progress_step:
      properties:
        component_name:
          title: The component name that this step is associated with
          type: string
          example: component
        ended_at:
          format: date-time
          title: The end time of this step
          type: string
          example: '2020-11-19T20:27:18Z'
        message_base:
          description: >-
            The base of a human-readable description of the step intended to be
            combined with the component name for presentation. For example:


            `message_base` = "Building service"

            `component_name` = "api"
          type: string
          example: Building service
        name:
          title: The name of this step
          type: string
          example: example_step
        reason:
          $ref: '#/components/schemas/apps_deployment_progress_step_reason'
        started_at:
          format: date-time
          title: The start time of this step
          type: string
          example: '2020-11-19T20:27:18Z'
        status:
          $ref: '#/components/schemas/apps_deployment_progress_step_status'
        steps:
          items:
            type: object
          title: Child steps of this step
          type: array
      title: A step that is run as part of the deployment's lifecycle
      type: object
    apps_deployment_progress:
      properties:
        error_steps:
          format: int32
          title: Number of unsuccessful steps
          type: integer
          example: 3
        pending_steps:
          format: int32
          title: Number of pending steps
          type: integer
          example: 2
        running_steps:
          format: int32
          title: Number of currently running steps
          type: integer
          example: 2
        steps:
          items:
            $ref: '#/components/schemas/apps_deployment_progress_step'
          title: The deployment's steps
          type: array
        success_steps:
          format: int32
          title: Number of successful steps
          type: integer
          example: 4
        summary_steps:
          items:
            $ref: '#/components/schemas/apps_deployment_progress_step'
          title: A flattened summary of the steps
          type: array
        total_steps:
          format: int32
          title: Total number of steps
          type: integer
          example: 5
      type: object
    apps_deployment_service:
      properties:
        name:
          title: The name of this service
          type: string
          example: web
        source_commit_hash:
          title: >-
            The commit hash of the repository that was used to build this
            service
          type: string
          example: 54d4a727f457231062439895000d45437c7bb405
      type: object
    app_domain_spec:
      type: object
      properties:
        domain:
          type: string
          maxLength: 253
          minLength: 4
          pattern: ^((xn--)?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+[a-zA-Z]{2,}\.?$
          description: The hostname for the domain
          example: app.example.com
        type:
          type: string
          default: UNSPECIFIED
          enum:
            - UNSPECIFIED
            - DEFAULT
            - PRIMARY
            - ALIAS
          description: >-
            - DEFAULT: The default `.ondigitalocean.app` domain assigned to this
            app

            - 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.

            - ALIAS: A non-primary domain
          example: DEFAULT
        wildcard:
          type: boolean
          description: >-
            Indicates whether the domain includes all sub-domains, in addition
            to the given domain
          example: true
        zone:
          description: >-
            Optional. If the domain uses DigitalOcean DNS and you would like App

            Platform to automatically manage it for you, set this to the name of
            the

            domain on your account.


            For example, If the domain you are adding is `app.domain.com`, the
            zone

            could be `domain.com`.
          type: string
          format: hostname
          example: example.com
        minimum_tls_version:
          type: string
          maxLength: 3
          minLength: 3
          enum:
            - '1.2'
            - '1.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"`.
          example: '1.3'
      required:
        - domain
    apps_git_source_spec:
      type: object
      properties:
        branch:
          type: string
          description: The name of the branch to use
          example: main
        repo_clone_url:
          type: string
          description: >-
            The clone URL of the repo. Example:
            `https://github.com/digitalocean/sample-golang.git`
          example: https://github.com/digitalocean/sample-golang.git
    apps_github_source_spec:
      type: object
      properties:
        branch:
          type: string
          description: The name of the branch to use
          example: main
        deploy_on_push:
          type: boolean
          description: Whether to automatically deploy new commits made to the repo
          example: true
        repo:
          type: string
          description: >-
            The name of the repo in the format owner/repo. Example:
            `digitalocean/sample-golang`
          example: digitalocean/sample-golang
    apps_gitlab_source_spec:
      type: object
      properties:
        branch:
          type: string
          description: The name of the branch to use
          example: main
        deploy_on_push:
          type: boolean
          description: Whether to automatically deploy new commits made to the repo
          example: true
        repo:
          type: string
          description: >-
            The name of the repo in the format owner/repo. Example:
            `digitalocean/sample-golang`
          example: digitalocean/sample-golang
    apps_image_source_spec:
      type: object
      properties:
        registry:
          type: string
          description: The registry name. Must be left empty for the `DOCR` registry type.
          example: registry.hub.docker.com
        registry_type:
          type: string
          enum:
            - DOCKER_HUB
            - DOCR
            - GHCR
          description: |-
            - DOCKER_HUB: The DockerHub container registry type.
            - DOCR: The DigitalOcean container registry type.
            - GHCR: The Github container registry type.
          example: DOCR
        registry_credentials:
          type: string
          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.

            - "$username:$access_token" for registries of type `DOCKER_HUB`.

            - "$username:$access_token" for registries of type `GHCR`.
          example: my-dockerhub-username:dckr_pat_the_access_token
        repository:
          type: string
          description: The repository name.
          example: origin/master
        tag:
          type: string
          description: >-
            The repository tag. Defaults to `latest` if not provided and no
            digest is provided. Cannot be specified if digest is provided.
          example: latest
          default: latest
        digest:
          type: string
          description: The image digest. Cannot be specified if tag is provided.
          example: >-
            sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac
        deploy_on_push:
          type: object
          properties:
            enabled:
              type: boolean
              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.
              example: true
    app_variable_definition:
      type: object
      properties:
        key:
          type: string
          pattern: ^[_A-Za-z][_A-Za-z0-9]*$
          description: The variable name
          example: BASE_URL
        scope:
          type: string
          enum:
            - UNSET
            - RUN_TIME
            - BUILD_TIME
            - RUN_AND_BUILD_TIME
          description: |-
            - RUN_TIME: Made available only at run-time
            - BUILD_TIME: Made available only at build-time
            - RUN_AND_BUILD_TIME: Made available at both build and run-time
          default: RUN_AND_BUILD_TIME
          example: BUILD_TIME
        type:
          type: string
          enum:
            - GENERAL
            - SECRET
          description: |-
            - GENERAL: A plain-text environment variable
            - SECRET: A secret encrypted environment variable
          default: GENERAL
          example: GENERAL
        value:
          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.
          type: string
          example: http://example.com
      required:
        - key
    app_log_destination_papertrail_spec:
      type: object
      properties:
        endpoint:
          type: string
          description: Papertrail syslog endpoint.
          example: https://mypapertrailendpoint.com
      description: Papertrail configuration.
      required:
        - endpoint
    app_log_destination_datadog_spec:
      type: object
      properties:
        endpoint:
          type: string
          description: Datadog HTTP log intake endpoint.
          example: https://mydatadogendpoint.com
        api_key:
          type: string
          description: Datadog API key.
          example: abcdefghijklmnopqrstuvwxyz0123456789
      description: DataDog configuration.
      required:
        - api_key
    app_log_destination_logtail_spec:
      type: object
      properties:
        token:
          type: string
          description: Logtail token.
          example: abcdefghijklmnopqrstuvwxyz0123456789
      description: Logtail configuration.
      required:
        - endpoint
    app_log_destination_open_search_spec_basic_auth:
      type: object
      properties:
        user:
          type: string
          description: |-
            Username to authenticate with. Only required when `endpoint` is set.
            Defaults to `doadmin` when `cluster_name` is set.
          example: apps_user
        password:
          description: >-
            Password for user defined in User. Is required when `endpoint` is
            set.

            Cannot be set if using a DigitalOcean DBaaS OpenSearch cluster.
          example: password1
      description: Configure Username and/or Password for Basic authentication.
    app_log_destination_open_search_spec:
      type: object
      properties:
        endpoint:
          type: string
          description: >-
            OpenSearch API Endpoint. Only HTTPS is supported. Format:
            https://<host>:<port>.

            Cannot be specified if `cluster_name` is also specified.
          example: https://example.com:9300
        basic_auth:
          $ref: '#/components/schemas/app_log_destination_open_search_spec_basic_auth'
        index_name:
          type: string
          default: logs
          description: >-
            The index name to use for the logs. If not set, the default index
            name is "logs".
          example: logs
        cluster_name:
          type: string
          description: >-
            The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log
            forwarding destination.

            Cannot be specified if `endpoint` is also specified.
          example: my-opensearch-cluster
      description: OpenSearch configuration.
    app_log_destination_definition:
      type: object
      properties:
        name:
          type: string
          maxLength: 42
          minLength: 2
          pattern: >-
            ^[A-Za-z0-9()\[\]'"][-A-Za-z0-9_.
            \/()\[\]]{0,40}[A-Za-z0-9()\[\]'"]$
          example: my_log_destination
        papertrail:
          $ref: '#/components/schemas/app_log_destination_papertrail_spec'
        datadog:
          $ref: '#/components/schemas/app_log_destination_datadog_spec'
        logtail:
          $ref: '#/components/schemas/app_log_destination_logtail_spec'
        open_search:
          $ref: '#/components/schemas/app_log_destination_open_search_spec'
      title: Configurations for external logging.
      required:
        - name
    app_component_base:
      type: object
      properties:
        name:
          type: string
          maxLength: 32
          minLength: 2
          pattern: ^[a-z][a-z0-9-]{0,30}[a-z0-9]$
          description: The name. Must be unique across all components within the same app.
          example: api
        git:
          $ref: '#/components/schemas/apps_git_source_spec'
        github:
          $ref: '#/components/schemas/apps_github_source_spec'
        gitlab:
          $ref: '#/components/schemas/apps_gitlab_source_spec'
        image:
          $ref: '#/components/schemas/apps_image_source_spec'
        dockerfile_path:
          type: string
          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.
          example: path/to/Dockerfile
        build_command:
          type: string
          description: >-
            An optional build command to run while building this component from
            source.
          example: npm run build
        run_command:
          type: string
          description: An optional run command to override the component's default.
          example: bin/api
        source_dir:
          type: string
          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.
          example: path/to/dir
        envs:
          type: array
          items:
            $ref: '#/components/schemas/app_variable_definition'
          description: A list of environment variables made available to the component.
        environment_slug:
          type: string
          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/).
          example: node-js
        log_destinations:
          type: array
          items:
            $ref: '#/components/schemas/app_log_destination_definition'
          description: A list of configured log forwarding destinations.
    app_component_instance_base:
      type: object
      properties:
        instance_count:
          type: integer
          format: int64
          minimum: 1
          description: >-
            The amount of instances that this component should be scaled to.
            Default: 1. Must not be set if autoscaling is used.
          default: 1
          example: 2
        instance_size_slug:
          description: >-
            The instance size to use for this component. Default:
            `apps-s-1vcpu-0.5gb`
          type: string
          enum:
            - apps-s-1vcpu-0.5gb
            - apps-s-1vcpu-1gb-fixed
            - apps-s-1vcpu-1gb
            - apps-s-1vcpu-2gb
            - apps-s-2vcpu-4gb
            - apps-d-1vcpu-0.5gb
            - apps-d-1vcpu-1gb
            - apps-d-1vcpu-2gb
            - apps-d-1vcpu-4gb
            - apps-d-2vcpu-4gb
            - apps-d-2vcpu-8gb
            - apps-d-4vcpu-8gb
            - apps-d-4vcpu-16gb
            - apps-d-8vcpu-32gb
          default: apps-s-1vcpu-0.5gb
          example: apps-s-1vcpu-0.5gb
        autoscaling:
          description: >-
            Configuration for automatically scaling this component based on
            metrics.
          type: object
          properties:
            min_instance_count:
              description: >-
                The minimum amount of instances for this component. Must be less
                than max_instance_count.
              type: integer
              format: uint32
              minimum: 1
              example: 2
            max_instance_count:
              description: >-
                The maximum amount of instances for this component. Must be more
                than min_instance_count.
              type: integer
              format: uint32
              minimum: 1
              example: 3
            metrics:
              description: The metrics that the component is scaled on.
              type: object
              properties:
                cpu:
                  description: Settings for scaling the component based on CPU utilization.
                  type: object
                  properties:
                    percent:
                      description: The average target CPU utilization for the component.
                      type: integer
                      format: uint32
                      minimum: 1
                      maximum: 100
                      default: 80
                      example: 75
    apps_string_match:
      type: object
      properties:
        exact:
          type: string
          description: >-
            Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be
            set.
          maxLength: 256
          minLength: 1
          example: https://www.example.com
        prefix:
          type: string
          description: >-
            Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be
            set.
          maxLength: 256
          minLength: 1
          example: https://www.example.com
          deprecated: true
        regex:
          type: string
          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
          example: ^.*example.com
    apps_cors_policy:
      type: object
      properties:
        allow_origins:
          type: array
          description: The set of allowed CORS origins.
          items:
            $ref: '#/components/schemas/apps_string_match'
          example:
            - exact: https://www.example.com
            - regex: ^.*example.com
        allow_methods:
          type: array
          items:
            type: string
          description: >-
            The set of allowed HTTP methods. This configures the
            `Access-Control-Allow-Methods` header.
          example:
            - GET
            - OPTIONS
            - POST
            - PUT
            - PATCH
            - DELETE
        allow_headers:
          type: array
          items:
            type: string
          description: >-
            The set of allowed HTTP request headers. This configures the
            `Access-Control-Allow-Headers` header.
          example:
            - Content-Type
            - X-Custom-Header
        expose_headers:
          type: array
          items:
            type: string
          description: >-
            The set of HTTP response headers that browsers are allowed to
            access. This configures the `Access-Control-Expose-Headers` header.
          example:
            - Content-Encoding
            - X-Custom-Header
        max_age:
          type: string
          description: >-
            An optional duration specifying how long browsers can cache the
            results of a preflight request. This configures the
            `Access-Control-Max-Age` header.
          example: 5h30m
        allow_credentials:
          type: boolean
          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.
          example: false
    app_service_spec_health_check:
      type: object
      properties:
        failure_threshold:
          type: integer
          format: int32
          description: The number of failed health checks before considered unhealthy.
          example: 2
        port:
          type: integer
          format: int64
          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.
          example: 80
          maximum: 65535
          minimum: 1
        http_path:
          type: string
          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.
          example: /health
        initial_delay_seconds:
          type: integer
          format: int32
          description: The number of seconds to wait before beginning health checks.
          example: 30
        period_seconds:
          type: integer
          format: int32
          description: The number of seconds to wait between health checks.
          example: 60
        success_threshold:
          type: integer
          format: int32
          description: The number of successful health checks before considered healthy.
          example: 3
        timeout_seconds:
          type: integer
          format: int32
          description: The number of seconds after which the check times out.
          example: 45
    app_route_spec:
      title: A criterion for routing HTTP traffic to a component.
      type: object
      properties:
        path:
          description: >-
            (Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths
            must start with / and must be unique across all components within an
            app.
          type: string
          example: /api
        preserve_path_prefix:
          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`.
          type: boolean
          example: true
    app_service_spec_termination:
      type: object
      properties:
        drain_seconds:
          type: integer
          format: int32
          description: >-
            The number of seconds to wait between selecting a container instance
            for termination and issuing the TERM signal. Selecting a container
            instance for termination begins an asynchronous drain of new
            requests on upstream load-balancers. (Default 15)
          example: 15
          maximum: 110
          minimum: 1
        grace_period_seconds:
          type: integer
          format: int32
          description: >-
            The number of seconds to wait between sending a TERM signal to a
            container and issuing a KILL which causes immediate shutdown.
            (Default 120)
          example: 120
          maximum: 600
          minimum: 1
    app_service_spec:
      allOf:
        - $ref: '#/components/schemas/app_component_base'
        - $ref: '#/components/schemas/app_component_instance_base'
        - type: object
          properties:
            cors:
              allOf:
                - $ref: '#/components/schemas/apps_cors_policy'
                - description: (Deprecated - Use Ingress Rules instead).
                - deprecated: true
            health_check:
              $ref: '#/components/schemas/app_service_spec_health_check'
            http_port:
              type: integer
              description: >-
                The internal port on which this service's run command will
                listen. Default: 8080

                If 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.
              format: int64
              maximum: 65535
              minimum: 1
              example: 3000
            internal_ports:
              type: array
              description: >-
                The ports on which this service will listen for internal
                traffic.
              items:
                format: int64
                type: integer
              example:
                - 80
                - 443
            routes:
              type: array
              description: >-
                (Deprecated - Use Ingress Rules instead). A list of HTTP routes
                that should be routed to this component.
              deprecated: true
              items:
                $ref: '#/components/schemas/app_route_spec'
            termination:
              $ref: '#/components/schemas/app_service_spec_termination'
          required:
            - name
    app_static_site_spec:
      allOf:
        - $ref: '#/components/schemas/app_component_base'
        - type: object
          properties:
            index_document:
              type: string
              description: >-
                The name of the index document to use when serving this static
                site. Default: index.html
              default: index.html
              example: main.html
            error_document:
              type: string
              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.
              default: 404.html
              example: error.html
            catchall_document:
              type: string
              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.
              example: index.html
            output_dir:
              type: string
              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`.
              example: dist/
            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'
              description: >-
                (Deprecated - Use Ingress Rules instead). A list of HTTP routes
                that should be routed to this component.
              deprecated: true
      required:
        - name
    app_job_spec_termination:
      type: object
      properties:
        grace_period_seconds:
          type: integer
          format: int32
          description: >-
            The number of seconds to wait between sending a TERM signal to a
            container and issuing a KILL which causes immediate shutdown.
            (Default 120)
          example: 120
          maximum: 600
          minimum: 1
    app_job_spec:
      allOf:
        - $ref: '#/components/schemas/app_component_base'
        - $ref: '#/components/schemas/app_component_instance_base'
        - type: object
          properties:
            kind:
              type: string
              enum:
                - UNSPECIFIED
                - PRE_DEPLOY
                - POST_DEPLOY
                - FAILED_DEPLOY
              description: >-
                - UNSPECIFIED: Default job type, will auto-complete to
                POST_DEPLOY kind.

                - PRE_DEPLOY: Indicates a job that runs before an app
                deployment.

                - POST_DEPLOY: Indicates a job that runs after an app
                deployment.

                - FAILED_DEPLOY: Indicates a job that runs after a component
                fails to deploy.
              default: UNSPECIFIED
              example: PRE_DEPLOY
            termination:
              $ref: '#/components/schemas/app_job_spec_termination'
          required:
            - name
    app_worker_spec_termination:
      type: object
      properties:
        grace_period_seconds:
          type: integer
          format: int32
          description: >-
            The number of seconds to wait between sending a TERM signal to a
            container and issuing a KILL which causes immediate shutdown.
            (Default 120)
          example: 120
          maximum: 600
          minimum: 1
    app_worker_spec:
      allOf:
        - $ref: '#/components/schemas/app_component_base'
        - $ref: '#/components/schemas/app_component_instance_base'
        - type: object
          properties:
            termination:
              $ref: '#/components/schemas/app_worker_spec_termination'
      required:
        - name
    app_alert_spec_rule:
      default: UNSPECIFIED_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
      example: CPU_UTILIZATION
    app_alert_spec_operator:
      default: UNSPECIFIED_OPERATOR
      enum:
        - UNSPECIFIED_OPERATOR
        - GREATER_THAN
        - LESS_THAN
      type: string
      example: GREATER_THAN
    app_alert_spec_window:
      default: UNSPECIFIED_WINDOW
      enum:
        - UNSPECIFIED_WINDOW
        - FIVE_MINUTES
        - TEN_MINUTES
        - THIRTY_MINUTES
        - ONE_HOUR
      type: string
      example: FIVE_MINUTES
    app_alert_spec:
      properties:
        rule:
          $ref: '#/components/schemas/app_alert_spec_rule'
        disabled:
          description: Is the alert disabled?
          type: boolean
          example: false
        operator:
          $ref: '#/components/schemas/app_alert_spec_operator'
        value:
          description: Threshold value for alert
          format: float
          type: number
          example: 2.32
        window:
          $ref: '#/components/schemas/app_alert_spec_window'
      type: object
    app_functions_spec:
      type: object
      properties:
        cors:
          allOf:
            - $ref: '#/components/schemas/apps_cors_policy'
            - description: (Deprecated - Use Ingress Rules instead).
            - deprecated: true
        routes:
          type: array
          description: >-
            (Deprecated - Use Ingress Rules instead). A list of HTTP routes that
            should be routed to this component.
          deprecated: true
          items:
            $ref: '#/components/schemas/app_route_spec'
        name:
          type: string
          maxLength: 32
          minLength: 2
          pattern: ^[a-z][a-z0-9-]{0,30}[a-z0-9]$
          description: The name. Must be unique across all components within the same app.
          example: api
        source_dir:
          type: string
          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.
          example: path/to/dir
        alerts:
          type: array
          items:
            $ref: '#/components/schemas/app_alert_spec'
        envs:
          type: array
          items:
            $ref: '#/components/schemas/app_variable_definition'
          description: A list of environment variables made available to the component.
        git:
          $ref: '#/components/schemas/apps_git_source_spec'
        github:
          $ref: '#/components/schemas/apps_github_source_spec'
        gitlab:
          $ref: '#/components/schemas/apps_gitlab_source_spec'
        log_destinations:
          type: array
          items:
            $ref: '#/components/schemas/app_log_destination_definition'
          description: A list of configured log forwarding destinations.
      required:
        - name
    app_database_spec:
      type: object
      properties:
        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.
          type: string
          example: cluster_name
        db_name:
          description: The name of the MySQL or PostgreSQL database to configure.
          type: string
          example: my_db
        db_user:
          description: The name of the MySQL or PostgreSQL user to configure.
          type: string
          example: superuser
        engine:
          type: string
          default: UNSET
          enum:
            - UNSET
            - MYSQL
            - PG
            - REDIS
            - MONGODB
            - KAFKA
            - OPENSEARCH
          description: |-
            - MYSQL: MySQL
            - PG: PostgreSQL
            - REDIS: Redis
            - MONGODB: MongoDB
            - KAFKA: Kafka
            - OPENSEARCH: OpenSearch
          example: PG
        name:
          description: >-
            The database's name. The name must be unique across all components
            within the same app and cannot use capital letters.
          maxLength: 32
          minLength: 2
          pattern: ^[a-z][a-z0-9-]{0,30}[a-z0-9]$
          type: string
          example: prod-db
        production:
          description: Whether this is a production or dev database.
          type: boolean
          example: true
        version:
          description: The version of the database engine
          type: string
          example: '12'
      required:
        - name
    app_ingress_spec_rule_string_match:
      type: object
      properties:
        prefix:
          type: string
          description: >-
            Prefix-based match. For example, `/api` will match `/api`, `/api/`,
            and any nested paths such as `/api/v1/endpoint`.
          maxLength: 256
          example: /api
      description: The path to match on.
      required:
        - prefix
    app_ingress_spec_rule_match:
      type: object
      properties:
        path:
          $ref: '#/components/schemas/app_ingress_spec_rule_string_match'
      description: The match configuration for the rule.
      required:
        - path
    app_ingress_spec_rule_routing_component:
      type: object
      properties:
        name:
          description: The name of the component to route to.
          type: string
          example: web
        preserve_path_prefix:
          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`.
          type: string
          example: 'true'
        rewrite:
          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`.
          type: string
          example: /api/v1/
      description: >-
        The component to route to. Only one of `component` or `redirect` may be
        set.
      required:
        - name
    app_ingress_spec_rule_routing_redirect:
      type: object
      properties:
        uri:
          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.
          type: string
          example: /about
        authority:
          description: >-
            The authority/host to redirect to. This can be a hostname or IP
            address. Note: use `port` to set the port.
          type: string
          example: example.com
        port:
          description: The port to redirect to.
          type: integer
          format: int64
          example: 443
        scheme:
          description: >-
            The scheme to redirect to. Supported values are `http` or `https`.
            Default: `https`.
          type: string
          example: https
        redirect_code:
          description: >-
            The redirect code to use. Defaults to `302`. Supported values are
            300, 301, 302, 303, 304, 307, 308.
          type: integer
          format: int64
          example: 302
      description: >-
        The redirect configuration for the rule. Only one of `component` or
        `redirect` may be set.
    app_ingress_spec_rule:
      type: object
      properties:
        match:
          $ref: '#/components/schemas/app_ingress_spec_rule_match'
        cors:
          $ref: '#/components/schemas/apps_cors_policy'
        component:
          $ref: '#/components/schemas/app_ingress_spec_rule_routing_component'
        redirect:
          $ref: '#/components/schemas/app_ingress_spec_rule_routing_redirect'
    app_ingress_spec:
      type: object
      properties:
        rules:
          description: >-
            Rules for configuring HTTP ingress for component routes, CORS,
            rewrites, and redirects.
          type: array
          items:
            $ref: '#/components/schemas/app_ingress_spec_rule'
      description: Specification for app ingress configurations.
    app_egress_type_spec:
      title: The app egress type.
      type: string
      default: AUTOASSIGN
      example: AUTOASSIGN
      enum:
        - AUTOASSIGN
        - DEDICATED_IP
    app_egress_spec:
      type: object
      description: Specification for app egress configurations.
      properties:
        type:
          $ref: '#/components/schemas/app_egress_type_spec'
    app_spec:
      title: AppSpec
      type: object
      description: The desired configuration of an application.
      properties:
        name:
          description: >-
            The name of the app. Must be unique across all apps in the same
            account.
          maxLength: 32
          minLength: 2
          pattern: ^[a-z][a-z0-9-]{0,30}[a-z0-9]$
          type: string
          example: web-app-01
        region:
          description: >-
            The slug form of the geographical origin of the app. Default:
            `nearest available`
          type: string
          enum:
            - ams
            - nyc
            - fra
            - sfo
            - sgp
            - blr
            - tor
            - lon
            - syd
          example: nyc
        domains:
          description: A set of hostnames where the application will be available.
          type: array
          items:
            $ref: '#/components/schemas/app_domain_spec'
        services:
          description: Workloads which expose publicly-accessible HTTP services.
          type: array
          items:
            $ref: '#/components/schemas/app_service_spec'
        static_sites:
          description: Content which can be rendered to static web assets.
          type: array
          items:
            $ref: '#/components/schemas/app_static_site_spec'
        jobs:
          description: >-
            Pre and post deployment workloads which do not expose
            publicly-accessible HTTP routes.
          type: array
          items:
            $ref: '#/components/schemas/app_job_spec'
        workers:
          description: Workloads which do not expose publicly-accessible HTTP services.
          items:
            $ref: '#/components/schemas/app_worker_spec'
          type: array
        functions:
          description: >-
            Workloads which expose publicly-accessible HTTP services via
            Functions Components.
          items:
            $ref: '#/components/schemas/app_functions_spec'
          type: array
        databases:
          description: >-
            Database instances which can provide persistence to workloads within
            the

            application.
          type: array
          items:
            $ref: '#/components/schemas/app_database_spec'
        ingress:
          $ref: '#/components/schemas/app_ingress_spec'
        egress:
          $ref: '#/components/schemas/app_egress_spec'
      required:
        - name
    apps_deployment_static_site:
      properties:
        name:
          title: The name of this static site
          type: string
          example: web
        source_commit_hash:
          title: >-
            The commit hash of the repository that was used to build this static
            site
          type: string
          example: 54d4a727f457231062439895000d45437c7bb405
      type: object
    apps_deployment_worker:
      properties:
        name:
          title: The name of this worker
          type: string
          example: queue-runner
        source_commit_hash:
          title: The commit hash of the repository that was used to build this worker
          type: string
          example: 54d4a727f457231062439895000d45437c7bb405
      type: object
    apps_deployment:
      properties:
        cause:
          title: What caused this deployment to be created
          type: string
          example: commit 9a4df0b pushed to github/digitalocean/sample-golang
        cloned_from:
          title: The ID of a previous deployment that this deployment was cloned from
          type: string
          example: 3aa4d20e-5527-4c00-b496-601fbd22520a
        created_at:
          format: date-time
          title: The creation time of the deployment
          type: string
          example: '2020-07-28T18:00:00Z'
        id:
          title: The ID of the deployment
          type: string
          example: b6bdf840-2854-4f87-a36c-5f231c617c84
        jobs:
          items:
            $ref: '#/components/schemas/apps_deployment_job'
          title: Job components that are part of this deployment
          type: array
        functions:
          type: array
          items:
            $ref: '#/components/schemas/apps_deployment_functions'
          title: Functions components that are part of this deployment
        phase:
          $ref: '#/components/schemas/apps_deployment_phase'
        phase_last_updated_at:
          format: date-time
          title: When the deployment phase was last updated
          type: string
          example: '0001-01-01T00:00:00Z'
        progress:
          $ref: '#/components/schemas/apps_deployment_progress'
        services:
          items:
            $ref: '#/components/schemas/apps_deployment_service'
          title: Service components that are part of this deployment
          type: array
        spec:
          $ref: '#/components/schemas/app_spec'
        static_sites:
          items:
            $ref: '#/components/schemas/apps_deployment_static_site'
          title: Static Site components that are part of this deployment
          type: array
        tier_slug:
          readOnly: true
          title: The current pricing tier slug of the deployment
          type: string
          example: basic
        updated_at:
          format: date-time
          title: When the deployment was last updated
          type: string
          example: '2020-07-28T18:00:00Z'
        workers:
          items:
            $ref: '#/components/schemas/apps_deployment_worker'
          title: Worker components that are part of this deployment
          type: array
      title: An app deployment
      type: object
    apps_domain_phase:
      default: UNKNOWN
      enum:
        - UNKNOWN
        - PENDING
        - CONFIGURING
        - ACTIVE
        - ERROR
      type: string
      example: ACTIVE
    apps_domain_progress:
      properties:
        steps:
          items:
            type: object
          title: The steps of the domain's progress
          type: array
      type: object
    app_domain_validation:
      properties:
        txt_name:
          title: TXT record name
          type: string
          readOnly: true
          example: _acme-challenge.app.example.com
        txt_value:
          title: TXT record value
          type: string
          readOnly: true
          example: lXLOcN6cPv0nproViNcUHcahD9TrIPlNgdwesj0pYpk
    apps_domain:
      properties:
        id:
          title: The ID of the domain
          type: string
          example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
        phase:
          $ref: '#/components/schemas/apps_domain_phase'
        progress:
          $ref: '#/components/schemas/apps_domain_progress'
        spec:
          $ref: '#/components/schemas/app_domain_spec'
        validations:
          title: List of TXT validation records
          type: array
          items:
            $ref: '#/components/schemas/app_domain_validation'
        rotate_validation_records:
          title: Validation values have changed and require manual intervention
          type: boolean
          readOnly: true
        certificate_expires_at:
          title: Current SSL certificate expiration time
          type: string
          format: date-time
          readOnly: true
          example: '2024-01-29T23:59:59Z'
      type: object
    apps_region:
      properties:
        continent:
          readOnly: true
          title: The continent that this region is in
          type: string
          example: europe
        data_centers:
          items:
            type: string
            example: ams
          readOnly: true
          title: Data centers that are in this region
          type: array
          example:
            - ams
        default:
          description: Whether or not the region is presented as the default.
          readOnly: true
          type: boolean
          example: true
        disabled:
          readOnly: true
          title: Whether or not the region is open for new apps
          type: boolean
          example: true
        flag:
          readOnly: true
          title: The flag of this region
          type: string
          example: ams
        label:
          readOnly: true
          title: A human-readable name of the region
          type: string
          example: ams
        reason:
          readOnly: true
          title: Reason that this region is not available
          type: string
          example: to crowded
        slug:
          readOnly: true
          title: The slug form of the region name
          type: string
          example: basic
      title: Geographical information about an app origin
      type: object
    apps_dedicated_egress_ip_status:
      title: The status of the dedicated egress IP.
      type: string
      readOnly: true
      default: UNKNOWN
      enum:
        - UNKNOWN
        - ASSIGNING
        - ASSIGNED
        - REMOVED
      example: ASSIGNED
    apps_dedicated_egress_ip:
      type: object
      readOnly: true
      properties:
        ip:
          title: The IP address of the dedicated egress IP.
          type: string
          example: 192.168.1.1
        id:
          title: The ID of the dedicated egress IP.
          type: string
          example: 9e7bc2ac-205a-45d6-919c-e1ac5e73f962
        status:
          $ref: '#/components/schemas/apps_dedicated_egress_ip_status'
    app:
      description: An application's configuration and status.
      properties:
        active_deployment:
          $ref: '#/components/schemas/apps_deployment'
        created_at:
          format: date-time
          readOnly: true
          title: The creation time of the app
          type: string
          example: '2020-11-19T20:27:18Z'
        default_ingress:
          readOnly: true
          title: The default hostname on which the app is accessible
          type: string
          example: digitalocean.com
        domains:
          items:
            $ref: '#/components/schemas/apps_domain'
          readOnly: true
          title: Contains all domains for the app
          type: array
        id:
          readOnly: true
          title: The ID of the application
          type: string
          example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
        in_progress_deployment:
          $ref: '#/components/schemas/apps_deployment'
        last_deployment_created_at:
          format: date-time
          readOnly: true
          title: The creation time of the last deployment
          type: string
          example: '2020-11-19T20:27:18Z'
        live_domain:
          readOnly: true
          title: The live domain of the app
          type: string
          example: live_domain
        live_url:
          readOnly: true
          title: The live URL of the app
          type: string
          example: google.com
        live_url_base:
          readOnly: true
          title: The live URL base of the app, the URL excluding the path
          type: string
          example: digitalocean.com
        owner_uuid:
          readOnly: true
          title: The ID of the account to which the application belongs
          type: string
          example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
        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'
        project_id:
          readOnly: true
          type: string
          example: 88b72d1a-b78a-4d9f-9090-b53c4399073f
          title: >-
            The ID of the project the app is assigned to. This will be empty if
            there is a lookup failure.
        region:
          $ref: '#/components/schemas/apps_region'
        spec:
          $ref: '#/components/schemas/app_spec'
        tier_slug:
          readOnly: true
          title: The current pricing tier slug of the app
          type: string
          example: basic
        updated_at:
          format: date-time
          readOnly: true
          title: Time of the app's last configuration update
          type: string
          example: '2020-12-01T00:42:16Z'
        pinned_deployment:
          allOf:
            - description: The deployment that the app is pinned to.
            - $ref: '#/components/schemas/apps_deployment'
        dedicated_ips:
          readOnly: true
          title: The dedicated egress IP addresses associated with the app.
          type: array
          items:
            $ref: '#/components/schemas/apps_dedicated_egress_ip'
      required:
        - spec
      type: object
    apps_response:
      allOf:
        - type: object
          properties:
            apps:
              title: A list of apps
              type: array
              items:
                $ref: '#/components/schemas/app'
        - $ref: '#/components/schemas/pagination'
        - $ref: '#/components/schemas/meta'
    apps_create_app_request:
      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.
      required:
        - spec
      type: object
    app_response:
      properties:
        app:
          $ref: '#/components/schemas/app'
      type: object
    apps_update_app_request:
      type: object
      properties:
        spec:
          $ref: '#/components/schemas/app_spec'
        update_all_source_versions:
          type: boolean
          description: >-
            Whether or not to update the source versions (for example fetching a
            new commit or image digest) of all components. By default (when this
            is false) only newly added sources will be updated to avoid changes
            like updating the scale of a component from also updating the
            respective code.
          example: true
          default: false
      required:
        - spec
    apps_delete_app_response:
      properties:
        id:
          title: The ID of the app that was deleted
          type: string
          example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
      type: object
    apps_get_logs_response:
      properties:
        historic_urls:
          items:
            type: string
            example: https://logs/build.log
          title: A list of URLs to archived log files
          type: array
        live_url:
          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.
          type: string
          example: ws://logs/build
      type: object
    apps_deployments_response:
      allOf:
        - type: object
          properties:
            deployments:
              title: A list of deployments
              type: array
              items:
                $ref: '#/components/schemas/apps_deployment'
        - $ref: '#/components/schemas/pagination'
        - $ref: '#/components/schemas/meta'
    apps_create_deployment_request:
      type: object
      properties:
        force_build:
          title: >-
            Indicates whether to force a build of app from source even if an
            existing cached build is suitable for re-use
          type: boolean
          example: true
    apps_deployment_response:
      properties:
        deployment:
          $ref: '#/components/schemas/apps_deployment'
      type: object
    instance_size_cpu_type:
      default: UNSPECIFIED
      enum:
        - UNSPECIFIED
        - SHARED
        - DEDICATED
      title: |-
        - SHARED: Shared vCPU cores
         - DEDICATED: Dedicated vCPU cores
      type: string
      example: SHARED
    apps_instance_size:
      properties:
        bandwidth_allowance_gib:
          format: int64
          title: The bandwidth allowance in GiB for the instance size
          type: string
          example: '1'
        cpu_type:
          $ref: '#/components/schemas/instance_size_cpu_type'
        cpus:
          format: int64
          title: The number of allotted vCPU cores
          type: string
          example: '3'
        deprecation_intent:
          title: Indicates if the instance size is intended for deprecation
          type: boolean
          example: true
        memory_bytes:
          format: int64
          title: The allotted memory in bytes
          type: string
          example: '1048'
        name:
          title: A human-readable name of the instance size
          type: string
          example: name
        scalable:
          title: Indicates if the instance size can enable autoscaling
          type: boolean
          example: false
        single_instance_only:
          title: Indicates if the instance size allows more than one instance
          type: boolean
          example: true
        slug:
          title: The slug of the instance size
          type: string
          example: apps-s-1vcpu-1gb
        tier_downgrade_to:
          title: >-
            The slug of the corresponding downgradable instance size on the
            lower tier
          type: string
          example: basic
          deprecated: true
        tier_slug:
          title: The slug of the tier to which this instance size belongs
          type: string
          example: basic
        tier_upgrade_to:
          title: >-
            The slug of the corresponding upgradable instance size on the higher
            tier
          type: string
          example: basic
          deprecated: true
        usd_per_month:
          title: The cost of this instance size in USD per month
          type: string
          example: '23'
        usd_per_second:
          title: The cost of this instance size in USD per second
          type: string
          example: '0.00000001232'
      type: object
    apps_list_instance_sizes_response:
      properties:
        discount_percent:
          format: float
          type: number
          example: 2.32
        instance_sizes:
          items:
            $ref: '#/components/schemas/apps_instance_size'
          type: array
      type: object
    apps_get_instance_size_response:
      properties:
        instance_size:
          $ref: '#/components/schemas/apps_instance_size'
      type: object
    apps_list_regions_response:
      properties:
        regions:
          items:
            $ref: '#/components/schemas/apps_region'
          type: array
      type: object
    app_propose:
      type: object
      properties:
        spec:
          $ref: '#/components/schemas/app_spec'
        app_id:
          type: string
          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.
          example: b6bdf840-2854-4f87-a36c-5f231c617c84
      required:
        - spec
    app_propose_response:
      type: object
      properties:
        app_is_static:
          type: boolean
          description: Indicates whether the app is a static app.
          example: true
        app_name_available:
          type: boolean
          description: Indicates whether the app name is available.
          example: true
        app_name_suggestion:
          type: string
          description: The suggested name if the proposed app name is unavailable.
          example: newName
        existing_static_apps:
          type: string
          description: >-
            The maximum number of free static apps the account can have. We will
            charge you for any additional static apps.
          example: '2'
        spec:
          $ref: '#/components/schemas/app_spec'
        app_cost:
          type: integer
          format: int32
          description: The monthly cost of the proposed app in USD.
          example: 5
        app_tier_downgrade_cost:
          type: integer
          format: int32
          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.
          example: 17
          deprecated: true
    app_alert_email:
      default: ''
      type: string
      example: sammy@digitalocean.com
    app_alert_slack_webhook:
      properties:
        url:
          title: URL of the Slack webhook
          type: string
          example: >-
            https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
        channel:
          title: Name of the Slack Webhook Channel
          type: string
          example: Channel Name
      type: object
    app_alert_phase:
      default: UNKNOWN
      enum:
        - UNKNOWN
        - PENDING
        - CONFIGURING
        - ACTIVE
        - ERROR
      type: string
      example: ACTIVE
    app_alert_progress_step_status:
      default: UNKNOWN
      enum:
        - UNKNOWN
        - PENDING
        - RUNNING
        - ERROR
        - SUCCESS
      type: string
      example: SUCCESS
    app_alert_progress_step_reason:
      properties:
        code:
          title: The error code
          type: string
          example: Title of Error
        message:
          title: The error message
          type: string
          example: This is an error
      type: object
    app_alert_progress_step:
      properties:
        name:
          title: The name of this step
          type: string
          example: example_step
        status:
          $ref: '#/components/schemas/app_alert_progress_step_status'
        started_at:
          format: date-time
          title: The start time of this step
          type: string
          example: '2020-11-19T20:27:18Z'
        ended_at:
          format: date-time
          title: The start time of this step
          type: string
          example: '2020-11-19T20:27:18Z'
        reason:
          $ref: '#/components/schemas/app_alert_progress_step_reason'
      type: object
    app_alert_progress:
      properties:
        steps:
          title: Steps of an alert's progress.
          type: array
          items:
            $ref: '#/components/schemas/app_alert_progress_step'
      type: object
    app_alert:
      properties:
        id:
          readOnly: true
          title: The ID of the alert
          type: string
          example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
        component_name:
          title: Name of component the alert belongs to
          type: string
          example: backend
        spec:
          $ref: '#/components/schemas/app_alert_spec'
        emails:
          title: Emails for alerts to go to
          type: array
          items:
            $ref: '#/components/schemas/app_alert_email'
          example:
            - sammy@digitalocean.com
        slack_webhooks:
          title: Slack Webhooks to send alerts to
          type: array
          items:
            $ref: '#/components/schemas/app_alert_slack_webhook'
        phase:
          $ref: '#/components/schemas/app_alert_phase'
        progress:
          $ref: '#/components/schemas/app_alert_progress'
      type: object
    apps_list_alerts_response:
      properties:
        alerts:
          type: array
          items:
            $ref: '#/components/schemas/app_alert'
      type: object
    apps_assign_app_alert_destinations_request:
      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'
      type: object
    apps_alert_response:
      properties:
        alert:
          $ref: '#/components/schemas/app_alert'
      type: object
    apps_rollback_app_request:
      type: object
      properties:
        deployment_id:
          type: string
          description: The ID of the deployment to rollback to.
          example: 3aa4d20e-5527-4c00-b496-601fbd22520a
        skip_pin:
          type: boolean
          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.
          example: false
    app_rollback_validation_condition:
      type: object
      properties:
        code:
          type: string
          enum:
            - incompatible_phase
            - incompatible_result
            - exceeded_revision_limit
            - app_pinned
            - database_config_conflict
            - region_conflict
            - static_site_requires_rebuild
            - image_source_missing_digest
          example: exceeded_revision_limit
          description: |
            A code identifier that represents the failing condition.

            Failing conditions:
              - `incompatible_phase` - indicates that the deployment's phase is not suitable for rollback.
              - `incompatible_result` - indicates that the deployment's result is not suitable for rollback.
              - `exceeded_revision_limit` - indicates that the app has exceeded the rollback revision limits for its tier.
              - `app_pinned` - indicates that there is already a rollback in progress and the app is pinned.
              - `database_config_conflict` - indicates that the deployment's database config is different than the current config.
              - `region_conflict` - indicates that the deployment's region differs from the current app region.
              
            Warning conditions:
              - `static_site_requires_rebuild` - indicates that the deployment contains at least one static site that will require a rebuild.
              - `image_source_missing_digest` - indicates that the deployment contains at least one component with an image source that is missing a digest.
        message:
          type: string
          description: A human-readable message describing the failing condition.
          example: >-
            the deployment is past the maximum historical revision limit of 0
            for the "starter" app tier
        components:
          type: array
          items:
            type: string
            description: >-
              If applicable, a list of components that are failing the
              condition.
          example:
            - www
    app_metrics_bandwidth_usage_details:
      type: object
      properties:
        app_id:
          type: string
          description: The ID of the app.
          example: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
        bandwidth_bytes:
          type: string
          format: uint64
          description: The used bandwidth amount in bytes.
          example: '513668'
      description: Bandwidth usage for an app.
    app_metrics_bandwidth_usage:
      type: object
      properties:
        app_bandwidth_usage:
          type: array
          items:
            $ref: '#/components/schemas/app_metrics_bandwidth_usage_details'
          description: A list of bandwidth usage details by app.
        date:
          type: string
          format: date-time
          description: The date for the metrics data.
          example: '2023-01-17T00:00:00Z'
    app_metrics_bandwidth_usage_request:
      type: object
      properties:
        app_ids:
          type: array
          items:
            type: string
          description: A list of app IDs to query bandwidth metrics for.
          maxItems: 100
          example:
            - 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
            - c2a93513-8d9b-4223-9d61-5e7272c81cf5
        date:
          type: string
          format: date-time
          description: >-
            Optional day to query. Only the date component of the timestamp will
            be considered. Default: yesterday.
          example: '2023-01-17T00:00:00Z'
      required:
        - app_ids
    cdn_endpoint:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          example: 892071a0-bb95-49bc-8021-3afd67a210bf
          description: >-
            A unique ID that can be used to identify and reference a CDN
            endpoint.
        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
          readOnly: true
          example: static-images.nyc3.cdn.digitaloceanspaces.com
          description: >-
            The fully qualified domain name (FQDN) from which the CDN-backed
            content is served.
        ttl:
          type: integer
          example: 3600
          enum:
            - 60
            - 600
            - 3600
            - 86400
            - 604800
          default: 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.
        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.
        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.
        created_at:
          type: string
          format: date-time
          readOnly: true
          example: '2018-03-21T16:02:37Z'
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the CDN endpoint was created.
      required:
        - origin
    update_endpoint:
      type: object
      properties:
        ttl:
          type: integer
          example: 3600
          enum:
            - 60
            - 600
            - 3600
            - 86400
            - 604800
          default: 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.
        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.
        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.
    purge_cache:
      type: object
      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.
      required:
        - files
    certificate:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          example: 892071a0-bb95-49bc-8021-3afd67a210bf
          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.
        not_after:
          type: string
          format: date-time
          readOnly: true
          example: '2017-02-22T00:23:00Z'
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents the certificate's expiration date.
        sha1_fingerprint:
          type: string
          readOnly: true
          example: dfcc9f57d86bf58e321c2c6c31c7a971be244ac7
          description: >-
            A unique identifier generated from the SHA-1 fingerprint of the
            certificate.
        created_at:
          type: string
          format: date-time
          readOnly: true
          example: '2017-02-08T16:02:37Z'
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the certificate was created.
        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.
        state:
          type: string
          enum:
            - pending
            - verified
            - error
          readOnly: true
          example: verified
          description: >-
            A string representing the current state of the certificate. It may
            be `pending`, `verified`, or `error`.
        type:
          type: string
          enum:
            - custom
            - lets_encrypt
          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.
    certificate_create_base:
      type: object
      properties:
        name:
          type: string
          example: web-cert-01
          description: A unique human-readable name referring to a certificate.
        type:
          type: string
          enum:
            - custom
            - lets_encrypt
          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.
      required:
        - name
    certificate_request_lets_encrypt:
      title: Let's Encrypt Certificate Request
      allOf:
        - $ref: '#/components/schemas/certificate_create_base'
        - type: object
          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`).
          required:
            - dns_names
    certificate_request_custom:
      title: Custom Certificate Request
      allOf:
        - $ref: '#/components/schemas/certificate_create_base'
        - type: object
          properties:
            private_key:
              type: string
              example: |-
                -----BEGIN PRIVATE KEY-----
                MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBIZMz8pnK6V52
                SVf+CYssOfCQHAx5f0Ou5rYbq3xNh8VHAIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1
                DwGb8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86X
                wrE4oFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3w
                Z2mzZ03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1F
                ZRnak/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFX
                fqqbQwuRAgMBAAECggEBAILLmkW0JzOkmLTDNzR0giyRkLoIROqDpfLtjKdwm95l
                9NUBJcU4vCvXQITKt/NhtnNTexcowg8pInb0ksJpg3UGE+4oMNBXVi2UW5MQZ5cm
                cVkQqgXkBF2YAY8FMaB6EML+0En2+dGR/3gIAr221xsFiXe1kHbB8Nb2c/d5HpFt
                eRpLVJnK+TxSr78PcZA8DDGlSgwvgimdAaFUNO2OqB9/0E9UPyKk2ycdff/Z6ldF
                0hkCLtdYTTl8Kf/OwjcuTgmA2O3Y8/CoQX/L+oP9Rvt9pWCEfuebiOmHJVPO6Y6x
                gtQVEXwmF1pDHH4Qtz/e6UZTdYeMl9G4aNO2CawwcaYECgYEA57imgSOG4XsJLRh
                GGncV9R/xhy4AbDWLtAMzQRX4ktvKCaHWyQV2XK2we/cu29NLv2Y89WmerTNPOU+
                P8+pB31uty2ELySVn15QhKpQClVEAlxCnnNjXYrii5LOM80+lVmxvQwxVd8Yz8nj
                IntyioXNBEnYS7V2RxxFGgFun1cCgYEA1V3W+Uyamhq8JS5EY0FhyGcXdHd70K49
                W1ou7McIpncf9tM9acLS1hkI98rd2T69Zo8mKoV1V2hjFaKUYfNys6tTkYWeZCcJ
                3rW44j9DTD+FmmjcX6b8DzfybGLehfNbCw6n67/r45DXIV/fk6XZfkx6IEGO4ODt
                Nfnvx4TuI1cCgYBACDiKqwSUvmkUuweOo4IuCxyb5Ee8v98P5JIE/VRDxlCbKbpx
                pxEam6aBBQVcDi+n8o0H3WjjlKc6UqbW/01YMoMrvzotxNBLz8Y0QtQHZvR6KoCG
                RKCKstxTcWflzKuknbqN4RapAhNbKBDJ8PMSWfyDWNyaXzSmBdvaidbF1QKBgDI0
                o4oD0Xkjg1QIYAUu9FBQmb9JAjRnW36saNBEQS/SZg4RRKknM683MtoDvVIKJk0E
                sAlfX+4SXQZRPDMUMtA+Jyrd0xhj6zmhbwClvDMr20crF3fWdgcqtft1BEFmsuyW
                JUMe5OWmRkjPI2+9ncDPRAllA7a8lnSV/Crph5N/AoGBAIK249temKrGe9pmsmAo
                QbNuYSmwpnMoAqdHTrl70HEmK7ob6SIVmsR8QFAkH7xkYZc4Bxbx4h1bdpozGB+/
                AangbiaYJcAOD1QyfiFbflvI1RFeHgrk7VIafeSeQv6qu0LLMi2zUbpgVzxt78Wg
                eTuK2xNR0PIM8OI7pRpgyj1I
                -----END PRIVATE KEY-----
              description: >-
                The contents of a PEM-formatted private-key corresponding to the
                SSL certificate.
            leaf_certificate:
              type: string
              example: |-
                -----BEGIN CERTIFICATE-----
                MIIFFjCCA/6gAwIBAgISA0AznUJmXhu08/89ZuSPC/kRMA0GCSqGSIb3DQEBCwUA
                MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
                ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjExMjQwMDIzMDBaFw0x
                NzAyMjIwMDIzMDBaMCQxIjAgBgNVBAMTGWNsb3VkLmFuZHJld3NvbWV0aGluZy5j
                b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBIZMz8pnK6V52SVf+
                CYssOfCQHAx5f0Ou5rYbq3xNh8VWHIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1DwGb
                8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86XwrE4
                oFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3wZ2mz
                Z03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1FZRna
                k/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFXfqqb
                QwuRAgMBAAGjggIaMIICFjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
                BQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLsAFcxAhFX1
                MbCnzr9hEO5rL4jqMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAG
                CCsGAQUFBwEBBGQwYjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgzLmxl
                dHNlbmNyeXB0Lm9yZy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5s
                ZXRzZW5jcnlwdC5vcmcvMCQGA1UdEQQdMBuCGWNsb3VkLmFuZHJld3NvbWV0aGlu
                Zy5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgWrgeYGCysGAQQBgt8TAQEBMIHW
                MCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYB
                BQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1
                cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSQ2ziBhY2NvcmRhbmNlIHdp
                dGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNl
                bmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAOZVQvrjM
                PKXLARTjB5XsgfyDN3/qwLl7SmwGkPe+B+9FJpfScYG1JzVuCj/SoaPaK34G4x/e
                iXwlwOXtMOtqjQYzNu2Pr2C+I+rVmaxIrCUXFmC205IMuUBEeWXG9Y/HvXQLPabD
                D3Gdl5+Feink9SDRP7G0HaAwq13hI7ARxkL9p+UIY39X0dV3WOboW2Re8nrkFXJ7
                q9Z6shK5QgpBfsLjtjNsQzaGV3ve1gOg25aTJGearBWOvEjJNA1wGMoKVXOtYwm/
                WyWoVdCQ8HmconcbJB6xc0UZ1EjvzRr5ZIvSa5uHZD0L3m7/kpPWlAlFJ7hHASPu
                UlF1zblDmg2Iaw==
                -----END CERTIFICATE-----
              description: The contents of a PEM-formatted public SSL certificate.
            certificate_chain:
              type: string
              example: |-
                -----BEGIN CERTIFICATE-----
                MIIFFjCCA/6gAwIBAgISA0AznUJmXhu08/89ZuSPC/kRMA0GCSqGSIb3DQEBCwUA
                MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
                ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjExMjQwMDIzMDBaFw0x
                NzAyMjIwMDIzMDBaMCQxIjAgBgNVBAMTGWNsb3VkLmFuZHJld3NvbWV0aGluZy5j
                b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBIZMz7tnK6V52SVf+
                CYssOfCQHAx5f0Ou5rYbq3xNh8VHAIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1DwGb
                8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86XwrE4
                oFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3wZ2mz
                Z03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1FZRna
                k/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFXfqqb
                QwuRAgMBAAGjggIaMIICFjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
                BQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLsAFcxAhFX1
                MbCnzr9hEO5rL4jqMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAG
                CCsGAQUFBwEBBGQwYjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgzLmxl
                dHNlbmNyeXB0Lm9yZy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5s
                ZXRzZW5jcnlwdC5vcmcvMCQGA1UdEQQdMBuCGWNsb3VkLmFuZHJld3NvbWV0aGlu
                Zy5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeWECysGAQQBgt8TAQEBMIHW
                MCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYB
                BQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1
                cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSQ2ziBhY2NvcmRhbmNlIHdp
                dGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBsdHRwczovL2xldHNl
                bmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAOZVQvrjM
                PKXLARTjB5XsgfyDN3/qwLl7SmwGkPe+B+9FJpfScYG1JzVuCj/SoaPaK34G4x/e
                iXwlwOXtMOtqjQYzNu2Pr2C+I+rVmaxIrCUXFmC205IMuUBEeWXG9Y/HvXQLPabD
                D3Gdl5+Feink9SDRP7G0HaAwq13hI7ARxkL3o+UIY39X0dV3WOboW2Re8nrkFXJ7
                q9Z6shK5QgpBfsLjtjNsQzaGV3ve1gOg25aTJGearBWOvEjJNA1wGMoKVXOtYwm/
                WyWoVdCQ8HmconcbJB6xc0UZ1EjvzRr5ZIvSa5uHZD0L3m7/kpPWlAlFJ7hHASPu
                UlF1zblDmg2Iaw==
                -----END CERTIFICATE-----
                -----BEGIN CERTIFICATE-----
                MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
                MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
                DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
                SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
                GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
                AQ8AMIIBCgKCAQEAnNMM8FrlLsd3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
                q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
                SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
                Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
                a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
                /PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIPOIUo4IBfTCCAXkwEgYDVR0T
                AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
                CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
                bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
                c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
                VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
                ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
                MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
                Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
                AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
                uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
                wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
                X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
                PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
                KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
                -----END CERTIFICATE-----
              description: >-
                The full PEM-formatted trust chain between the certificate
                authority's certificate and your domain's SSL certificate.
          required:
            - private_key
            - leaf_certificate
    balance:
      type: object
      properties:
        month_to_date_balance:
          type: string
          description: >-
            Balance as of the `generated_at` time.  This value includes the
            `account_balance` and `month_to_date_usage`.
          example: '23.44'
        account_balance:
          type: string
          description: >-
            Current balance of the customer's most recent billing activity. 
            Does not reflect `month_to_date_usage`.
          example: '12.23'
        month_to_date_usage:
          type: string
          description: >-
            Amount used in the current billing period as of the `generated_at`
            time.
          example: '11.21'
        generated_at:
          type: string
          format: date-time
          description: The time at which balances were most recently generated.
          example: '2019-07-09T15:01:12Z'
    billing_history:
      type: object
      properties:
        description:
          type: string
          description: Description of the billing history entry.
          example: Invoice for May 2018
        amount:
          type: string
          description: Amount of the billing history entry.
          example: '12.34'
        invoice_id:
          type: string
          description: >-
            ID of the invoice associated with the billing history entry, if 
            applicable.
          example: '123'
        invoice_uuid:
          type: string
          description: >-
            UUID of the invoice associated with the billing history entry, if 
            applicable.
          example: example-uuid
        date:
          type: string
          format: date-time
          description: Time the billing history entry occurred.
          example: '2018-06-01T08:44:38Z'
        type:
          type: string
          description: Type of billing history entry.
          example: Invoice
          enum:
            - ACHFailure
            - Adjustment
            - AttemptFailed
            - Chargeback
            - Credit
            - CreditExpiration
            - Invoice
            - Payment
            - Refund
            - Reversal
    meta_optional_total:
      type: object
      properties:
        meta:
          $ref: '#/components/schemas/meta_properties'
      required:
        - meta
    invoice_preview:
      type: object
      description: The invoice preview.
      properties:
        invoice_uuid:
          type: string
          description: The UUID of the invoice. The canonical reference for the invoice.
          example: fdabb512-6faf-443c-ba2e-665452332a9e
        invoice_id:
          type: string
          description: >-
            ID of the invoice. Listed on the face of the invoice PDF as the
            "Invoice number".
          example: '123456789'
        amount:
          type: string
          description: >-
            Total amount of the invoice, in USD.  This will reflect
            month-to-date usage in the invoice preview.
          example: '23.45'
        invoice_period:
          type: string
          description: >-
            Billing period of usage for which the invoice is issued, in
            `YYYY-MM`  format.
          example: 2020-01
        updated_at:
          type: string
          description: >-
            Time the invoice was last updated.  This is only included with the
            invoice preview.
          example: '2020-01-23T06:31:50Z'
    invoice_item:
      type: object
      properties:
        product:
          type: string
          description: Name of the product being billed in the invoice item.
          example: Kubernetes Clusters
        resource_uuid:
          type: string
          description: UUID of the resource billing in the invoice item if available.
          example: 711157cb-37c8-4817-b371-44fa3504a39c
        resource_id:
          type: string
          description: ID of the resource billing in the invoice item if available.
          example: '2353624'
        group_description:
          type: string
          description: >-
            Description of the invoice item when it is a grouped set of usage,
            such  as DOKS or databases.
          example: my-doks-cluster
        description:
          type: string
          description: Description of the invoice item.
          example: a56e086a317d8410c8b4cfd1f4dc9f82
        amount:
          type: string
          description: Billed amount of this invoice item. Billed in USD.
          example: '12.34'
        duration:
          type: string
          description: Duration of time this invoice item was used and subsequently billed.
          example: '744'
        duration_unit:
          type: string
          description: Unit of time for duration.
          example: Hours
        start_time:
          type: string
          description: Time the invoice item began to be billed for usage.
          example: '2020-01-01T00:00:00Z'
        end_time:
          type: string
          description: Time the invoice item stopped being billed for usage.
          example: '2020-02-01T00:00:00Z'
        project_name:
          type: string
          description: Name of the DigitalOcean Project this resource belongs to.
          example: web
    billing_address:
      type: object
      properties:
        address_line1:
          type: string
          description: Street address line 1
          example: 101 Shark Row
        address_line2:
          type: string
          description: Street address line 2
          example: ' '
        city:
          type: string
          description: City
          example: Atlantis
        region:
          type: string
          description: Region
          example: OC
        postal_code:
          type: string
          description: Postal code
          example: '12345'
        country_iso2_code:
          type: string
          description: Country (ISO2) code
          example: US
        created_at:
          type: string
          description: Timestamp billing address was created
          example: '2019-09-03T16:34:46.000+00:00'
        updated_at:
          type: string
          description: Timestamp billing address was updated
          example: '2019-09-03T16:34:46.000+00:00'
    product_charge_item:
      type: object
      properties:
        amount:
          type: string
          description: Amount of the charge
          example: '10.00'
        name:
          type: string
          description: Description of the charge
          example: Spaces Subscription
        count:
          type: string
          description: Number of times the charge was applied
          example: '1'
    product_usage_charges:
      type: object
      properties:
        name:
          type: string
          description: Description of usage charges
          example: Product usage charges
        amount:
          type: string
          description: Total amount charged
          example: '12.34'
        items:
          type: array
          description: List of amount, and grouped aggregates by resource type.
          items:
            $ref: '#/components/schemas/product_charge_item'
          example:
            - amount: '10.00'
              name: Spaces Subscription
              count: '1'
            - amount: '2.34'
              name: Database Clusters
              count: '1'
    simple_charge:
      type: object
      properties:
        name:
          type: string
          description: Name of the charge
          example: Overages
        amount:
          type: string
          description: Total amount charged in USD
          example: '3.45'
    invoice_summary:
      type: object
      properties:
        invoice_uuid:
          type: string
          description: UUID of the invoice
          example: 22737513-0ea7-4206-8ceb-98a575af7681
        invoice_id:
          type: string
          description: ID of the invoice
          example: '123456789'
        billing_period:
          type: string
          description: >-
            Billing period of usage for which the invoice is issued, in
            `YYYY-MM`  format.
          example: 2020-01
        amount:
          type: string
          description: >-
            Total amount of the invoice, in USD.  This will reflect
            month-to-date usage in the invoice preview.
          example: '27.13'
        user_name:
          type: string
          description: Name of the DigitalOcean customer being invoiced.
          example: Sammy Shark
        user_billing_address:
          allOf:
            - description: The billing address of the customer being invoiced.
            - $ref: '#/components/schemas/billing_address'
        user_company:
          type: string
          description: Company of the DigitalOcean customer being invoiced, if set.
          example: DigitalOcean
        user_email:
          type: string
          description: Email of the DigitalOcean customer being invoiced.
          example: sammy@digitalocean.com
        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'
        overages:
          allOf:
            - description: A summary of the overages contributing to the invoice.
            - $ref: '#/components/schemas/simple_charge'
        taxes:
          allOf:
            - description: A summary of the taxes contributing to the invoice.
            - $ref: '#/components/schemas/simple_charge'
        credits_and_adjustments:
          allOf:
            - description: >-
                A summary of the credits and adjustments contributing to the
                invoice.
            - $ref: '#/components/schemas/simple_charge'
    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
    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
    database_layout_option:
      type: object
      properties:
        num_nodes:
          type: integer
          example: 1
        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
    database_layout_options:
      type: object
      properties:
        layouts:
          type: array
          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).
          items:
            $ref: '#/components/schemas/database_layout_option'
    database_version_availability:
      type: object
      properties:
        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.
        version:
          type: string
          example: '8'
          description: The engine version.
    database_version_availabilities:
      type: array
      description: >-
        An array of objects, each indicating the version end-of-life,
        end-of-availability for various database engines
      items:
        $ref: '#/components/schemas/database_version_availability'
    options:
      type: object
      properties:
        options:
          type: object
          properties:
            kafka:
              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'
            pg:
              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'
            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:
            kafka:
              $ref: '#/components/schemas/database_version_availabilities'
            pg:
              $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'
    opensearch_connection:
      type: object
      properties:
        uri:
          type: string
          description: >-
            This is provided as a convenience and should be able to be
            constructed by the other attributes.
          example: >-
            opensearch://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require
          readOnly: true
        host:
          type: string
          description: The FQDN pointing to the opensearch cluster's current primary node.
          example: backend-do-user-19081923-0.db.ondigitalocean.com
          readOnly: true
        port:
          type: integer
          description: The port on which the opensearch dashboard is listening.
          example: 25060
          readOnly: true
        user:
          type: string
          description: The default user for the opensearch dashboard.
          example: doadmin
          readOnly: true
        password:
          type: string
          description: The randomly generated password for the default user.
          example: wv78n3zpz42xezdk
          readOnly: true
        ssl:
          type: boolean
          description: >-
            A boolean value indicating if the connection should be made over
            SSL.
          example: true
          readOnly: true
    database_connection:
      type: object
      properties:
        uri:
          type: string
          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.
          example: >-
            postgres://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require
          readOnly: true
        database:
          type: string
          description: The name of the default database.
          example: defaultdb
          readOnly: true
        host:
          type: string
          description: The FQDN pointing to the database cluster's current primary node.
          example: backend-do-user-19081923-0.db.ondigitalocean.com
          readOnly: true
        port:
          type: integer
          description: The port on which the database cluster is listening.
          example: 25060
          readOnly: true
        user:
          type: string
          description: The default user for the database.
          example: doadmin
          readOnly: true
        password:
          type: string
          description: The randomly generated password for the default user.
          example: wv78n3zpz42xezdk
          readOnly: true
        ssl:
          type: boolean
          description: >-
            A boolean value indicating if the connection should be made over
            SSL.
          example: true
          readOnly: true
    mysql_settings:
      type: object
      properties:
        auth_plugin:
          type: string
          enum:
            - mysql_native_password
            - caching_sha2_password
          example: mysql_native_password
          description: >
            A string specifying the authentication method to be used for
            connections

            to the MySQL user account. The valid values are
            `mysql_native_password`

            or `caching_sha2_password`. If excluded when creating a new user,
            the

            default for the version of MySQL in use will be used. As of MySQL
            8.0, the

            default is `caching_sha2_password`.
      required:
        - auth_plugin
    user_settings:
      type: object
      properties:
        pg_allow_replication:
          type: boolean
          example: true
          description: >
            For Postgres clusters, set to `true` for a user with replication
            rights.

            This option is not currently supported for other database engines.
        opensearch_acl:
          type: array
          items:
            type: object
            properties:
              index:
                type: string
                example: index-abc.*
                description: >-
                  A regex for matching the indexes that this ACL should apply
                  to.
              permission:
                type: string
                enum:
                  - deny
                  - admin
                  - read
                  - readwrite
                  - write
                example: read
                description: >-
                  Permission set applied to the ACL. 'read' allows user to read
                  from the index. 'write' allows for user to write to the index.
                  'readwrite' allows for both 'read' and 'write' permission.
                  'deny'(default) restricts user from performing any operation
                  over an index. 'admin' allows for 'readwrite' as well as any
                  operations to administer the index.
          description: >-
            ACLs (Access Control Lists) specifying permissions on index within a
            OpenSearch cluster.
        acl:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: >-
                  An identifier for the ACL. Will be computed after the ACL is
                  created/updated.
                example: aaa
              topic:
                type: string
                example: topic-abc.*
                description: >-
                  A regex for matching the topic(s) that this ACL should apply
                  to.
              permission:
                type: string
                enum:
                  - admin
                  - consume
                  - produce
                  - produceconsume
                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).
            required:
              - topic
              - permission
          description: >-
            ACLs (Access Control Lists) specifying permissions on topics within
            a Kafka cluster.
    database_user:
      type: object
      properties:
        name:
          type: string
          example: app-01
          description: The name of a database user.
        role:
          type: string
          enum:
            - primary
            - normal
          example: normal
          description: >
            A string representing the database user's role. The value will be
            either

            "primary" or "normal".
          readOnly: true
        password:
          type: string
          example: jge5lfxtzhx42iff
          description: A randomly generated password for the database user.
          readOnly: true
        access_cert:
          type: string
          example: |-
            -----BEGIN CERTIFICATE-----
            MIIFFjCCA/6gAwIBAgISA0AznUJmXhu08/89ZuSPC/kRMA0GCSqGSIb3DQEBCwUA
            MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
            ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjExMjQwMDIzMDBaFw0x
            NzAyMjIwMDIzMDBaMCQxIjAgBgNVBAMTGWNsb3VkLmFuZHJld3NvbWV0aGluZy5j
            b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBIZMz8pnK6V52SVf+
            CYssOfCQHAx5f0Ou5rYbq3xNh8VWHIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1DwGb
            8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86XwrE4
            oFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3wZ2mz
            Z03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1FZRna
            k/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFXfqqb
            QwuRAgMBAAGjggIaMIICFjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
            BQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLsAFcxAhFX1
            MbCnzr9hEO5rL4jqMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAG
            CCsGAQUFBwEBBGQwYjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgzLmxl
            dHNlbmNyeXB0Lm9yZy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5s
            ZXRzZW5jcnlwdC5vcmcvMCQGA1UdEQQdMBuCGWNsb3VkLmFuZHJld3NvbWV0aGlu
            Zy5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgWrgeYGCysGAQQBgt8TAQEBMIHW
            MCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYB
            BQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1
            cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSQ2ziBhY2NvcmRhbmNlIHdp
            dGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNl
            bmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAOZVQvrjM
            PKXLARTjB5XsgfyDN3/qwLl7SmwGkPe+B+9FJpfScYG1JzVuCj/SoaPaK34G4x/e
            iXwlwOXtMOtqjQYzNu2Pr2C+I+rVmaxIrCUXFmC205IMuUBEeWXG9Y/HvXQLPabD
            D3Gdl5+Feink9SDRP7G0HaAwq13hI7ARxkL9p+UIY39X0dV3WOboW2Re8nrkFXJ7
            q9Z6shK5QgpBfsLjtjNsQzaGV3ve1gOg25aTJGearBWOvEjJNA1wGMoKVXOtYwm/
            WyWoVdCQ8HmconcbJB6xc0UZ1EjvzRr5ZIvSa5uHZD0L3m7/kpPWlAlFJ7hHASPu
            UlF1zblDmg2Iaw==
            -----END CERTIFICATE-----
          description: Access certificate for TLS client authentication. (Kafka only)
          readOnly: true
        access_key:
          type: string
          example: |-
            -----BEGIN PRIVATE KEY-----
            MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBIZMz8pnK6V52
            SVf+CYssOfCQHAx5f0Ou5rYbq3xNh8VHAIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1
            DwGb8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86X
            wrE4oFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3w
            Z2mzZ03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1F
            ZRnak/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFX
            fqqbQwuRAgMBAAECggEBAILLmkW0JzOkmLTDNzR0giyRkLoIROqDpfLtjKdwm95l
            9NUBJcU4vCvXQITKt/NhtnNTexcowg8pInb0ksJpg3UGE+4oMNBXVi2UW5MQZ5cm
            cVkQqgXkBF2YAY8FMaB6EML+0En2+dGR/3gIAr221xsFiXe1kHbB8Nb2c/d5HpFt
            eRpLVJnK+TxSr78PcZA8DDGlSgwvgimdAaFUNO2OqB9/0E9UPyKk2ycdff/Z6ldF
            0hkCLtdYTTl8Kf/OwjcuTgmA2O3Y8/CoQX/L+oP9Rvt9pWCEfuebiOmHJVPO6Y6x
            gtQVEXwmF1pDHH4Qtz/e6UZTdYeMl9G4aNO2CawwcaYECgYEA57imgSOG4XsJLRh
            GGncV9R/xhy4AbDWLtAMzQRX4ktvKCaHWyQV2XK2we/cu29NLv2Y89WmerTNPOU+
            P8+pB31uty2ELySVn15QhKpQClVEAlxCnnNjXYrii5LOM80+lVmxvQwxVd8Yz8nj
            IntyioXNBEnYS7V2RxxFGgFun1cCgYEA1V3W+Uyamhq8JS5EY0FhyGcXdHd70K49
            W1ou7McIpncf9tM9acLS1hkI98rd2T69Zo8mKoV1V2hjFaKUYfNys6tTkYWeZCcJ
            3rW44j9DTD+FmmjcX6b8DzfybGLehfNbCw6n67/r45DXIV/fk6XZfkx6IEGO4ODt
            Nfnvx4TuI1cCgYBACDiKqwSUvmkUuweOo4IuCxyb5Ee8v98P5JIE/VRDxlCbKbpx
            pxEam6aBBQVcDi+n8o0H3WjjlKc6UqbW/01YMoMrvzotxNBLz8Y0QtQHZvR6KoCG
            RKCKstxTcWflzKuknbqN4RapAhNbKBDJ8PMSWfyDWNyaXzSmBdvaidbF1QKBgDI0
            o4oD0Xkjg1QIYAUu9FBQmb9JAjRnW36saNBEQS/SZg4RRKknM683MtoDvVIKJk0E
            sAlfX+4SXQZRPDMUMtA+Jyrd0xhj6zmhbwClvDMr20crF3fWdgcqtft1BEFmsuyW
            JUMe5OWmRkjPI2+9ncDPRAllA7a8lnSV/Crph5N/AoGBAIK249temKrGe9pmsmAo
            QbNuYSmwpnMoAqdHTrl70HEmK7ob6SIVmsR8QFAkH7xkYZc4Bxbx4h1bdpozGB+/
            AangbiaYJcAOD1QyfiFbflvI1RFeHgrk7VIafeSeQv6qu0LLMi2zUbpgVzxt78Wg
            eTuK2xNR0PIM8OI7pRpgyj1I
            -----END PRIVATE KEY-----
          description: Access key for TLS client authentication. (Kafka only)
          readOnly: true
        mysql_settings:
          $ref: '#/components/schemas/mysql_settings'
        settings:
          $ref: '#/components/schemas/user_settings'
      required:
        - name
    database_maintenance_window:
      type: object
      nullable: true
      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
          description: >-
            A boolean value indicating whether any maintenance is scheduled to
            be performed in the next window.
          readOnly: true
        description:
          type: array
          items:
            type: string
          description: >-
            A list of strings, each containing information about a pending
            maintenance update.
          example:
            - Update TimescaleDB to version 1.2.1
            - Upgrade to PostgreSQL 11.2 and 10.7 bugfix releases
          readOnly: true
      required:
        - day
        - hour
    firewall_rule:
      type: object
      properties:
        uuid:
          type: string
          pattern: ^$|[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}
          example: 79f26d28-ea8a-41f2-8ad8-8cfcdd020095
          description: A unique ID for the firewall rule itself.
        cluster_uuid:
          type: string
          pattern: ^$|[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}
          example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
          description: A unique ID for the database cluster to which the rule is applied.
        type:
          type: string
          enum:
            - droplet
            - k8s
            - ip_addr
            - tag
            - app
          example: droplet
          description: >-
            The type of resource that the firewall rule allows to access the
            database cluster.
        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'
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the firewall rule was created.
          readOnly: true
      required:
        - type
        - value
    database_service_endpoint:
      type: object
      properties:
        host:
          type: string
          description: A FQDN pointing to the database cluster's node(s).
          example: backend-do-user-19081923-0.db.ondigitalocean.com
          readOnly: true
        port:
          type: integer
          description: The port on which a service is listening.
          example: 9273
          readOnly: true
    database_cluster:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
          description: >-
            A unique ID that can be used to identify and reference a database
            cluster.
          readOnly: true
        name:
          type: string
          example: backend
          description: A unique, human-readable name referring to a database cluster.
        engine:
          type: string
          example: mysql
          enum:
            - pg
            - mysql
            - redis
            - mongodb
            - kafka
            - opensearch
          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.
        version:
          type: string
          example: '8'
          description: >-
            A string representing the version of the database engine in use for
            the cluster.
        semantic_version:
          type: string
          example: 8.0.28
          description: >-
            A string representing the semantic version of the database engine in
            use for the cluster.
          readOnly: true
        num_nodes:
          type: integer
          example: 2
          description: The number of nodes in the database cluster.
        size:
          type: string
          example: db-s-2vcpu-4gb
          description: >-
            The slug identifier representing the size of the nodes in the
            database cluster.
        region:
          type: string
          example: nyc3
          description: >-
            The slug identifier for the region where the database cluster is
            located.
        status:
          type: string
          enum:
            - creating
            - online
            - resizing
            - migrating
            - forking
          example: creating
          description: A string representing the current status of the database cluster.
          readOnly: true
        created_at:
          type: string
          format: date-time
          example: '2019-01-11T18:37:36Z'
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the database cluster was created.
          readOnly: true
        private_network_uuid:
          type: string
          pattern: ^$|[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}
          example: d455e75d-4858-4eec-8c95-da2f0a5f93a7
          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.
        tags:
          type: array
          items:
            type: string
          example:
            - production
          nullable: true
          description: An array of tags that have been applied to the database 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.
        ui_connection:
          allOf:
            - $ref: '#/components/schemas/opensearch_connection'
            - readOnly: true
          description: 'The connection details for OpenSearch dashboard. '
        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
        users:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/database_user'
          readOnly: true
        maintenance_window:
          allOf:
            - $ref: '#/components/schemas/database_maintenance_window'
            - readOnly: true
        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.
        rules:
          type: array
          items:
            $ref: '#/components/schemas/firewall_rule'
        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.
        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.
        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'
          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).
          readOnly: true
      required:
        - name
        - engine
        - num_nodes
        - size
        - region
    database_backup:
      type: object
      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.
      required:
        - database_name
    mysql_advanced_config:
      type: object
      properties:
        backup_hour:
          description: >-
            The hour of day (in UTC) when backup for the service starts. New
            backup only starts if previous backup has already completed.
          minimum: 0
          maximum: 23
          type: integer
          example: 3
        backup_minute:
          description: >-
            The minute of the backup hour when backup for the service starts.
            New backup  only starts if previous backup has already completed.
          minimum: 0
          maximum: 59
          type: integer
          example: 30
        sql_mode:
          description: >-
            Global SQL mode. If empty, uses MySQL server defaults. Must only
            include uppercase alphabetic characters, underscores, and commas.
          type: string
          pattern: ^[A-Z_]*(,[A-Z_]+)*$
          example: ANSI,TRADITIONAL
          maxLength: 1024
        connect_timeout:
          description: >-
            The number of seconds that the mysqld server waits for a connect
            packet before responding with bad handshake.
          type: integer
          minimum: 2
          maximum: 3600
          example: 10
        default_time_zone:
          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.
          type: string
          example: '+03:00'
          minLength: 2
          maxLength: 100
        group_concat_max_len:
          description: >-
            The maximum permitted result length, in bytes, for the
            GROUP_CONCAT() function.
          type: integer
          minimum: 4
          maximum: 18446744073709552000
          example: 1024
        information_schema_stats_expiry:
          description: The time, in seconds, before cached statistics expire.
          type: integer
          minimum: 900
          maximum: 31536000
          example: 86400
        innodb_ft_min_token_size:
          description: The minimum length of words that an InnoDB FULLTEXT index stores.
          type: integer
          minimum: 0
          maximum: 16
          example: 3
        innodb_ft_server_stopword_table:
          description: The InnoDB FULLTEXT index stopword list for all InnoDB tables.
          type: string
          pattern: ^.+/.+$
          example: db_name/table_name
          maxLength: 1024
        innodb_lock_wait_timeout:
          description: >-
            The time, in seconds, that an InnoDB transaction waits for a row
            lock. before giving up.
          type: integer
          minimum: 1
          maximum: 3600
          example: 50
        innodb_log_buffer_size:
          description: >-
            The size of the buffer, in bytes, that InnoDB uses to write to the
            log files. on disk.
          type: integer
          minimum: 1048576
          maximum: 4294967295
          example: 16777216
        innodb_online_alter_log_max_size:
          description: >-
            The upper limit, in bytes, of the size of the temporary log files
            used during online DDL operations for InnoDB tables.
          type: integer
          minimum: 65536
          maximum: 1099511627776
          example: 134217728
        innodb_print_all_deadlocks:
          description: >-
            When enabled, records information about all deadlocks in InnoDB user
            transactions  in the error log. Disabled by default.
          type: boolean
          example: true
        innodb_rollback_on_timeout:
          description: >-
            When enabled, transaction timeouts cause InnoDB to abort and roll
            back the entire transaction.
          type: boolean
          example: true
        interactive_timeout:
          description: >-
            The time, in seconds, the server waits for activity on an
            interactive. connection before closing it.
          type: integer
          minimum: 30
          maximum: 604800
          example: 3600
        internal_tmp_mem_storage_engine:
          description: The storage engine for in-memory internal temporary tables.
          type: string
          enum:
            - TempTable
            - MEMORY
          example: TempTable
        net_read_timeout:
          description: >-
            The time, in seconds, to wait for more data from an existing
            connection. aborting the read.
          type: integer
          minimum: 1
          maximum: 3600
          example: 30
        net_write_timeout:
          description: >-
            The number of seconds to wait for a block to be written to a
            connection before aborting the write.
          type: integer
          minimum: 1
          maximum: 3600
          example: 30
        sql_require_primary_key:
          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.
          type: boolean
          example: true
        wait_timeout:
          description: >-
            The number of seconds the server waits for activity on a
            noninteractive connection before closing it.
          type: integer
          minimum: 1
          maximum: 2147483
          example: 28800
        max_allowed_packet:
          description: >-
            The size of the largest message, in bytes, that can be received by
            the server. Default is 67108864 (64M).
          type: integer
          minimum: 102400
          maximum: 1073741824
          example: 67108864
        max_heap_table_size:
          description: >-
            The maximum size, in bytes, of internal in-memory tables. Also set
            tmp_table_size. Default is 16777216 (16M)
          type: integer
          minimum: 1048576
          maximum: 1073741824
          example: 16777216
        sort_buffer_size:
          description: >-
            The sort buffer size, in bytes, for ORDER BY optimization. Default
            is 262144. (256K).
          type: integer
          minimum: 32768
          maximum: 1073741824
          example: 262144
        tmp_table_size:
          description: >-
            The maximum size, in bytes, of internal in-memory tables. Also set
            max_heap_table_size. Default is 16777216 (16M).
          type: integer
          minimum: 1048576
          maximum: 1073741824
          example: 16777216
        slow_query_log:
          description: >-
            When enabled, captures slow queries. When disabled, also truncates
            the mysql.slow_log table. Default is false.
          type: boolean
          example: true
        long_query_time:
          description: >-
            The time, in seconds, for a query to take to execute before  being
            captured by slow_query_logs. Default is 10 seconds.
          type: number
          minimum: 0
          maximum: 3600
          example: 10
        binlog_retention_period:
          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.
          type: number
          minimum: 600
          maximum: 86400
          example: 600
        innodb_change_buffer_max_size:
          description: >-
            Specifies the maximum size of the InnoDB change buffer as a
            percentage of the buffer pool.
          type: integer
          minimum: 0
          maximum: 50
          example: 25
        innodb_flush_neighbors:
          description: >-
            Specifies whether flushing a page from the InnoDB buffer pool also
            flushes other dirty pages in the same extent.
              - 0 &mdash; disables this functionality, dirty pages in the same extent are not flushed.
              - 1 &mdash; flushes contiguous dirty pages in the same extent.
              - 2 &mdash; flushes dirty pages in the same extent.
          type: integer
          enum:
            - 0
            - 1
            - 2
          example: 0
        innodb_read_io_threads:
          description: >-
            The number of I/O threads for read operations in InnoDB. Changing
            this parameter will lead to a restart of the MySQL service.
          type: integer
          minimum: 1
          maximum: 64
          example: 16
        innodb_write_io_threads:
          description: >-
            The number of I/O threads for write operations in InnoDB. Changing
            this parameter will lead to a restart of the MySQL service.
          type: integer
          minimum: 1
          maximum: 64
          example: 16
        innodb_thread_concurrency:
          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.
          type: integer
          minimum: 0
          maximum: 1000
          example: 0
        net_buffer_length:
          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.
          type: integer
          minimum: 1024
          maximum: 1048576
          example: 4096
    pgbouncer_advanced_config:
      type: object
      description: PGBouncer connection pooling settings
      properties:
        server_reset_query_always:
          description: Run server_reset_query (DISCARD ALL) in all pooling modes.
          type: boolean
          example: false
        ignore_startup_parameters:
          description: List of parameters to ignore when given in startup packet.
          type: array
          example:
            - extra_float_digits
            - search_path
          items:
            description: Enum of parameters to ignore when given in startup packet.
            type: string
            enum:
              - extra_float_digits
              - search_path
          maxItems: 32
        min_pool_size:
          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.
          type: integer
          minimum: 0
          maximum: 10000
          example: 1
        server_lifetime:
          description: >-
            The pooler closes any unused server connection that has been
            connected longer than this amount of seconds.
          type: integer
          minimum: 60
          maximum: 86400
          example: 3600
        server_idle_timeout:
          description: >-
            Drops server connections if they have been idle more than this many
            seconds.  If 0, timeout is disabled. 
          type: integer
          minimum: 0
          maximum: 86400
          example: 600
        autodb_pool_size:
          description: >-
            If non-zero, automatically creates a pool of that size per user when
            a pool doesn't exist.
          type: integer
          minimum: 0
          maximum: 10000
          example: 1
        autodb_pool_mode:
          enum:
            - session
            - transaction
            - statement
          example: session
          description: PGBouncer pool mode
          type: string
        autodb_max_db_connections:
          description: >-
            Only allows a maximum this many server connections per database
            (regardless of user). If 0, allows unlimited connections.
          type: integer
          minimum: 0
          maximum: 2147483647
          example: 1
        autodb_idle_timeout:
          description: >-
            If the automatically-created database pools have been unused this
            many seconds, they are freed. If 0, timeout is disabled.
          type: integer
          minimum: 0
          maximum: 86400
          example: 3600
    timescaledb_advanced_config:
      type: object
      description: TimescaleDB extension configuration values
      properties:
        max_background_workers:
          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.
          type: integer
          minimum: 1
          maximum: 4096
          example: 8
    postgres_advanced_config:
      type: object
      properties:
        autovacuum_freeze_max_age:
          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.
          type: integer
          minimum: 200000000
          maximum: 1500000000
          example: 200000000
        autovacuum_max_workers:
          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.
          type: integer
          minimum: 1
          maximum: 20
          example: 5
        autovacuum_naptime:
          description: >-
            Specifies the minimum delay, in seconds, between autovacuum runs on
            any given database. The default is one minute.
          type: integer
          minimum: 0
          maximum: 86400
          example: 43200
        autovacuum_vacuum_threshold:
          description: >-
            Specifies the minimum number of updated or deleted tuples needed to
            trigger a VACUUM in any one table. The default is 50 tuples.
          type: integer
          minimum: 0
          maximum: 2147483647
          example: 50
        autovacuum_analyze_threshold:
          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.
          type: integer
          minimum: 0
          maximum: 2147483647
          example: 50
        autovacuum_vacuum_scale_factor:
          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).
          type: number
          minimum: 0
          maximum: 1
          example: 0.2
        autovacuum_analyze_scale_factor:
          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).
          type: number
          minimum: 0
          maximum: 1
          example: 0.2
        autovacuum_vacuum_cost_delay:
          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.
          type: integer
          minimum: -1
          maximum: 100
          example: 20
        autovacuum_vacuum_cost_limit:
          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.
          type: integer
          minimum: -1
          maximum: 10000
          example: -1
        backup_hour:
          description: >-
            The hour of day (in UTC) when backup for the service starts. New
            backup only starts if previous backup has already completed.
          minimum: 0
          maximum: 23
          type: integer
          example: 3
        backup_minute:
          description: >-
            The minute of the backup hour when backup for the service starts.
            New backup is only started if previous backup has already completed.
          minimum: 0
          maximum: 59
          type: integer
          example: 30
        bgwriter_delay:
          description: >-
            Specifies the delay, in milliseconds, between activity rounds for
            the background writer. Default is 200 ms.
          type: integer
          minimum: 10
          maximum: 10000
          example: 200
        bgwriter_flush_after:
          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.
          type: integer
          minimum: 0
          maximum: 2048
          example: 512
        bgwriter_lru_maxpages:
          description: >-
            The maximum number of buffers that the background writer can write.
            Setting this to zero disables background writing. Default is 100.
          type: integer
          minimum: 0
          maximum: 1073741823
          example: 100
        bgwriter_lru_multiplier:
          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.
          type: number
          minimum: 0
          maximum: 10
          example: 2
        deadlock_timeout:
          description: >-
            The amount of time, in milliseconds, to wait on a lock before
            checking to see if there is a deadlock condition.
          type: integer
          minimum: 500
          maximum: 1800000
          example: 1000
        default_toast_compression:
          description: >-
            Specifies the default TOAST compression method for values of
            compressible columns (the default is lz4).
          type: string
          enum:
            - lz4
            - pglz
          example: lz4
        idle_in_transaction_session_timeout:
          description: >-
            Time out sessions with open transactions after this number of
            milliseconds
          type: integer
          minimum: 0
          maximum: 604800000
          example: 10000
        jit:
          description: >-
            Activates, in a boolean, the system-wide use of Just-in-Time
            Compilation (JIT).
          type: boolean
          example: true
        log_autovacuum_min_duration:
          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.
          type: integer
          minimum: -1
          maximum: 2147483647
          example: -1
        log_error_verbosity:
          description: >-
            Controls the amount of detail written in the server log for each
            message that is logged.
          type: string
          enum:
            - TERSE
            - DEFAULT
            - VERBOSE
          example: VERBOSE
        log_line_prefix:
          description: >-
            Selects one of the available log-formats. These can support popular
            log analyzers like pgbadger, pganalyze, etc.
          type: string
          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'
          example: pid=%p,user=%u,db=%d,app=%a,client=%h
        log_min_duration_statement:
          description: >-
            Log statements that take more than this number of milliseconds to
            run. If -1, disables.
          type: integer
          minimum: -1
          maximum: 86400000
          example: -1
        max_files_per_process:
          description: PostgreSQL maximum number of files that can be open per process.
          type: integer
          minimum: 1000
          maximum: 4096
          example: 2048
        max_prepared_transactions:
          description: >-
            PostgreSQL maximum prepared transactions. Once increased, this
            parameter cannot be lowered from its set value.
          type: integer
          minimum: 0
          maximum: 10000
          example: 20
        max_pred_locks_per_transaction:
          description: PostgreSQL maximum predicate locks per transaction.
          type: integer
          minimum: 64
          maximum: 640
          example: 128
        max_locks_per_transaction:
          description: >-
            PostgreSQL maximum locks per transaction. Once increased, this
            parameter cannot be lowered from its set value.
          type: integer
          minimum: 64
          maximum: 6400
          example: 128
        max_stack_depth:
          description: Maximum depth of the stack in bytes.
          type: integer
          minimum: 2097152
          maximum: 6291456
          example: 2097152
        max_standby_archive_delay:
          description: Max standby archive delay in milliseconds.
          type: integer
          minimum: 1
          maximum: 43200000
          example: 43200
        max_standby_streaming_delay:
          description: Max standby streaming delay in milliseconds.
          type: integer
          minimum: 1
          maximum: 43200000
          example: 43200
        max_replication_slots:
          description: PostgreSQL maximum replication slots.
          type: integer
          minimum: 8
          maximum: 64
          example: 16
        max_logical_replication_workers:
          description: >-
            PostgreSQL maximum logical replication workers (taken from the pool
            of max_parallel_workers).
          type: integer
          minimum: 4
          maximum: 64
          example: 16
        max_parallel_workers:
          description: >-
            Sets the maximum number of workers that the system can support for
            parallel queries.
          type: integer
          minimum: 0
          maximum: 96
          example: 12
        max_parallel_workers_per_gather:
          description: >-
            Sets the maximum number of workers that can be started by a single
            Gather or Gather Merge node.
          type: integer
          minimum: 0
          maximum: 96
          example: 16
        max_worker_processes:
          description: >-
            Sets the maximum number of background processes that the system can
            support. Once increased, this parameter cannot be lowered from its
            set value.
          type: integer
          minimum: 8
          maximum: 96
          example: 16
        pg_partman_bgw.role:
          type: string
          pattern: ^[_A-Za-z0-9][-._A-Za-z0-9]{0,63}$
          maxLength: 64
          example: myrolename
          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.
        pg_partman_bgw.interval:
          description: Sets the time interval to run pg_partman's scheduled tasks.
          type: integer
          minimum: 3600
          maximum: 604800
          example: 3600
        pg_stat_statements.track:
          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.
          type: string
          enum:
            - all
            - top
            - none
          example: all
        temp_file_limit:
          description: PostgreSQL temporary file limit in KiB. If -1, sets to unlimited.
          type: integer
          example: 5000000
          minimum: -1
          maximum: 2147483647
        timezone:
          description: PostgreSQL service timezone
          type: string
          example: Europe/Helsinki
          maxLength: 64
        track_activity_query_size:
          description: >-
            Specifies the number of bytes reserved to track the currently
            executing command for each active session.
          type: integer
          example: 1024
          minimum: 1024
          maximum: 10240
        track_commit_timestamp:
          description: Record commit time of transactions.
          type: string
          enum:
            - 'off'
            - 'on'
          example: 'off'
        track_functions:
          description: Enables tracking of function call counts and time used.
          type: string
          enum:
            - all
            - pl
            - none
          example: all
        track_io_timing:
          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.
          type: string
          enum:
            - 'off'
            - 'on'
          example: 'off'
        max_wal_senders:
          description: >-
            PostgreSQL maximum WAL senders. Once increased, this parameter
            cannot be lowered from its set value.
          type: integer
          minimum: 20
          maximum: 64
          example: 32
        wal_sender_timeout:
          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.
          type: integer
          minimum: 0
          maximum: 10800000
          example: 60000
        wal_writer_delay:
          description: >-
            WAL flush interval in milliseconds. Note that setting this value to
            lower than the default 200ms may negatively impact performance
          type: integer
          minimum: 10
          maximum: 200
          example: 50
        shared_buffers_percentage:
          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.
          type: number
          minimum: 20
          maximum: 60
          example: 41.5
        pgbouncer:
          $ref: '#/components/schemas/pgbouncer_advanced_config'
        work_mem:
          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).
          type: integer
          minimum: 1
          maximum: 1024
          example: 4
        timescaledb:
          $ref: '#/components/schemas/timescaledb_advanced_config'
        synchronous_replication:
          description: >-
            Synchronous replication type. Note that the service plan also needs
            to support synchronous replication.
          type: string
          example: 'off'
          enum:
            - 'off'
            - quorum
        stat_monitor_enable:
          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.
          type: boolean
          example: false
    eviction_policy_model:
      type: string
      enum:
        - noeviction
        - allkeys_lru
        - allkeys_random
        - volatile_lru
        - volatile_random
        - volatile_ttl
      description: >-
        A string specifying the desired eviction policy for the Redis cluster.


        - `noeviction`: Don't evict any data, returns error when memory limit is
        reached.

        - `allkeys_lru:` Evict any key, least recently used (LRU) first.

        - `allkeys_random`: Evict keys in a random order.

        - `volatile_lru`: Evict keys with expiration only, least recently used
        (LRU) first.

        - `volatile_random`: Evict keys with expiration only in a random order.

        - `volatile_ttl`: Evict keys with expiration only, shortest time-to-live
        (TTL) first.
      example: allkeys_lru
    redis_advanced_config:
      type: object
      properties:
        redis_maxmemory_policy:
          $ref: '#/components/schemas/eviction_policy_model'
        redis_pubsub_client_output_buffer_limit:
          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.
          type: integer
          minimum: 32
          maximum: 512
          example: 64
        redis_number_of_databases:
          type: integer
          minimum: 1
          maximum: 128
          description: >-
            Set number of redis databases. Changing this will cause a restart of
            redis service.
          example: 16
        redis_io_threads:
          description: Redis IO thread count
          type: integer
          minimum: 1
          maximum: 32
          example: 1
        redis_lfu_log_factor:
          description: >-
            Counter logarithm factor for volatile-lfu and allkeys-lfu
            maxmemory-policies
          type: integer
          minimum: 0
          maximum: 100
          default: 10
          example: 10
        redis_lfu_decay_time:
          description: LFU maxmemory-policy counter decay time in minutes
          type: integer
          minimum: 1
          maximum: 120
          default: 1
          example: 1
        redis_ssl:
          description: Require SSL to access Redis
          type: boolean
          default: true
          example: true
        redis_timeout:
          description: Redis idle connection timeout in seconds
          type: integer
          minimum: 0
          maximum: 31536000
          default: 300
          example: 300
        redis_notify_keyspace_events:
          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.

            - `K` &mdash; Keyspace events

            - `E` &mdash; Keyevent events

            - `g` &mdash; Generic commands (e.g. `DEL`, `EXPIRE`, `RENAME`, ...)

            - `$` &mdash; String commands

            - `l` &mdash; List commands

            - `s` &mdash; Set commands

            - `h` &mdash; Hash commands

            - `z` &mdash; Sorted set commands

            - `t` &mdash; Stream commands

            - `d` &mdash; Module key type events

            - `x` &mdash; Expired events

            - `e` &mdash; Evicted events

            - `m` &mdash; Key miss events

            - `n` &mdash; New key events

            - `A` &mdash; Alias for `"g$lshztxed"`
          type: string
          pattern: ^[KEg\$lshzxeA]*$
          default: ''
          maxLength: 32
          example: K
        redis_persistence:
          type: string
          enum:
            - 'off'
            - 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.
          example: rdb
        redis_acl_channels_default:
          type: string
          enum:
            - allchannels
            - resetchannels
          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.
          example: allchannels
    kafka_advanced_config:
      type: object
      properties:
        compression_type:
          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.
          type: string
          enum:
            - gzip
            - snappy
            - lz4
            - zstd
            - uncompressed
            - producer
          example: gzip
        group_initial_rebalance_delay_ms:
          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.
          type: integer
          example: 3000
          minimum: 0
          maximum: 300000
        group_min_session_timeout_ms:
          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.
          type: integer
          example: 6000
          minimum: 0
          maximum: 60000
        group_max_session_timeout_ms:
          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.
          type: integer
          example: 1800000
          minimum: 0
          maximum: 1800000
        connections_max_idle_ms:
          description: >-
            Idle connections timeout: the server socket processor threads close
            the connections that idle for longer than this.
          type: integer
          minimum: 1000
          example: 540000
          maximum: 3600000
        max_incremental_fetch_session_cache_slots:
          description: >-
            The maximum number of incremental fetch sessions that the broker
            will maintain.
          type: integer
          example: 1000
          minimum: 1000
          maximum: 10000
        message_max_bytes:
          description: The maximum size of message that the server can receive.
          type: integer
          example: 1048588
          minimum: 0
          maximum: 100001200
        offsets_retention_minutes:
          description: Log retention window in minutes for offsets topic
          type: integer
          example: 10080
          minimum: 1
          maximum: 2147483647
        log_cleaner_delete_retention_ms:
          description: How long are delete records retained?
          type: integer
          minimum: 0
          maximum: 315569260000
          example: 86400000
        log_cleaner_min_cleanable_ratio:
          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.
          type: number
          minimum: 0.2
          maximum: 0.9
          example: 0.5
        log_cleaner_max_compaction_lag_ms:
          description: >-
            The maximum amount of time message will remain uncompacted. Only
            applicable for logs that are being compacted
          type: integer
          minimum: 30000
          maximum: 9223372036854776000
          example: 60000
        log_cleaner_min_compaction_lag_ms:
          description: >-
            The minimum time a message will remain uncompacted in the log. Only
            applicable for logs that are being compacted.
          type: integer
          minimum: 0
          maximum: 9223372036854776000
          example: 100000
        log_cleanup_policy:
          description: The default cleanup policy for segments beyond the retention window
          type: string
          enum:
            - delete
            - compact
            - compact,delete
          example: delete
        log_flush_interval_messages:
          description: >-
            The number of messages accumulated on a log partition before
            messages are flushed to disk
          type: integer
          minimum: 1
          maximum: 9223372036854776000
          example: 9223372036854776000
        log_flush_interval_ms:
          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
          type: integer
          minimum: 0
          maximum: 9223372036854776000
          example: 1000000
        log_index_interval_bytes:
          description: The interval with which Kafka adds an entry to the offset index
          type: integer
          minimum: 0
          maximum: 104857600
          example: 4096
        log_index_size_max_bytes:
          description: The maximum size in bytes of the offset index
          type: integer
          minimum: 1048576
          maximum: 104857600
          example: 10485760
        log_message_downconversion_enable:
          description: >-
            This configuration controls whether down-conversion of message
            formats is enabled to satisfy consume requests.
          type: boolean
          example: true
        log_message_timestamp_type:
          description: >-
            Define whether the timestamp in the message is message create time
            or log append time.
          type: string
          enum:
            - CreateTime
            - LogAppendTime
          example: CreateTime
        log_message_timestamp_difference_max_ms:
          description: >-
            The maximum difference allowed between the timestamp when a broker
            receives a message and the timestamp specified in the message
          type: integer
          minimum: 0
          maximum: 9223372036854776000
          example: 1000000
        log_preallocate:
          description: Controls whether to preallocate a file when creating a new segment
          type: boolean
          example: false
        log_retention_bytes:
          description: The maximum size of the log before deleting messages
          type: integer
          minimum: -1
          maximum: 9223372036854776000
          example: 1000000
        log_retention_hours:
          description: The number of hours to keep a log file before deleting it
          type: integer
          minimum: -1
          maximum: 2147483647
          example: 1000000
        log_retention_ms:
          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.
          type: integer
          minimum: -1
          maximum: 9223372036854776000
          example: 100000000
        log_roll_jitter_ms:
          description: >-
            The maximum jitter to subtract from logRollTimeMillis (in
            milliseconds). If not set, the value in log.roll.jitter.hours is
            used
          type: integer
          minimum: 0
          maximum: 9223372036854776000
          example: 10000000
        log_roll_ms:
          description: >-
            The maximum time before a new log segment is rolled out (in
            milliseconds).
          type: integer
          minimum: 1
          maximum: 9223372036854776000
          example: 1000000
        log_segment_bytes:
          description: The maximum size of a single log file
          type: integer
          minimum: 10485760
          maximum: 1073741824
          example: 100000000
        log_segment_delete_delay_ms:
          description: >-
            The amount of time to wait before deleting a file from the
            filesystem
          type: integer
          minimum: 0
          maximum: 3600000
          example: 60000
        auto_create_topics_enable:
          description: Enable auto creation of topics
          type: boolean
          example: true
        min_insync_replicas:
          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.
          type: integer
          minimum: 1
          maximum: 7
          example: 1
        num_partitions:
          description: Number of partitions for autocreated topics
          type: integer
          minimum: 1
          maximum: 1000
          example: 10
        default_replication_factor:
          description: Replication factor for autocreated topics
          type: integer
          minimum: 1
          maximum: 10
          example: 2
        replica_fetch_max_bytes:
          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.
          type: integer
          minimum: 1048576
          maximum: 104857600
          example: 2097152
        replica_fetch_response_max_bytes:
          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.
          type: integer
          minimum: 10485760
          maximum: 1048576000
          example: 20971520
        max_connections_per_ip:
          description: >-
            The maximum number of connections allowed from each ip address
            (defaults to 2147483647).
          type: integer
          minimum: 256
          maximum: 2147483647
          example: 512
        producer_purgatory_purge_interval_requests:
          description: >-
            The purge interval (in number of requests) of the producer request
            purgatory (defaults to 1000).
          type: integer
          minimum: 10
          maximum: 10000
          example: 100
        socket_request_max_bytes:
          description: >-
            The maximum number of bytes in a socket request (defaults to
            104857600).
          type: integer
          minimum: 10485760
          maximum: 209715200
          example: 20971520
        transaction_state_log_segment_bytes:
          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)).
          type: integer
          minimum: 1048576
          maximum: 2147483647
          example: 104857600
        transaction_remove_expired_transaction_cleanup_interval_ms:
          description: >-
            The interval at which to remove transactions that have expired due
            to transactional.id.expiration.ms passing (defaults to 3600000 (1
            hour)).
          type: integer
          minimum: 600000
          maximum: 3600000
          example: 3600000
    opensearch_advanced_config:
      type: object
      properties:
        http_max_content_length_bytes:
          description: >-
            Maximum content length for HTTP requests to the OpenSearch HTTP API,
            in bytes.
          type: integer
          example: 100000000
          minimum: 1
          maximum: 2147483647
          default: 100000000
        http_max_header_size_bytes:
          description: Maximum size of allowed headers, in bytes.
          type: integer
          example: 8192
          minimum: 1024
          maximum: 262144
          default: 8192
        http_max_initial_line_length_bytes:
          description: Maximum length of an HTTP URL, in bytes.
          type: integer
          example: 4096
          minimum: 1024
          maximum: 65536
          default: 4096
        indices_query_bool_max_clause_count:
          description: >-
            Maximum number of clauses Lucene BooleanQuery can have.  Only
            increase it if necessary, as it may cause performance issues.
          type: integer
          example: 1024
          minimum: 64
          maximum: 4096
          default: 1024
        indices_fielddata_cache_size_percentage:
          description: >-
            Maximum amount of heap memory used for field data cache, expressed
            as a percentage. Decreasing the value too much will increase
            overhead of loading field data. Increasing the value too much will
            decrease amount of heap available for other operations.
          type: integer
          example: 3
          minimum: 3
          maximum: 100
        indices_memory_index_buffer_size_percentage:
          description: >-
            Total amount of heap used for indexing buffer before writing
            segments to disk, expressed as a percentage. Too low value will slow
            down indexing; too high value will increase indexing performance but
            causes performance issues for query performance.
          type: integer
          example: 10
          minimum: 3
          maximum: 40
          default: 10
        indices_memory_min_index_buffer_size_mb:
          description: >-
            Minimum amount of heap used for indexing buffer before writing
            segments to disk, in mb. Works in conjunction with
            indices_memory_index_buffer_size_percentage, each being enforced.
          type: integer
          example: 48
          minimum: 3
          maximum: 2048
          default: 48
        indices_memory_max_index_buffer_size_mb:
          description: >-
            Maximum amount of heap used for indexing buffer before writing
            segments to disk, in mb. Works in conjunction with
            indices_memory_index_buffer_size_percentage, each being enforced.
            The default is unbounded.
          type: integer
          example: 48
          minimum: 3
          maximum: 2048
        indices_queries_cache_size_percentage:
          description: >-
            Maximum amount of heap used for query cache.  Too low value will
            decrease query performance and increase performance for other
            operations; too high value will cause issues with other
            functionality.
          type: integer
          example: 10
          minimum: 3
          maximum: 40
          default: 10
        indices_recovery_max_mb_per_sec:
          description: >-
            Limits total inbound and outbound recovery traffic for each node,
            expressed in mb per second. Applies to both peer recoveries as well
            as snapshot recoveries (i.e., restores from a snapshot).
          type: integer
          example: 40
          minimum: 40
          maximum: 400
          default: 40
        indices_recovery_max_concurrent_file_chunks:
          description: Maximum number of file chunks sent in parallel for each recovery.
          type: integer
          example: 2
          minimum: 2
          maximum: 5
          default: 2
        thread_pool_search_size:
          description: >-
            Number of workers in the search operation thread pool.  Do note this
            may have maximum value depending on CPU count - value is
            automatically lowered if set to higher than maximum value.
          type: integer
          example: 1
          minimum: 1
          maximum: 128
        thread_pool_search_throttled_size:
          description: >-
            Number of workers in the search throttled operation thread pool.
            This pool is used for searching frozen indices. Do note this may
            have maximum value depending on CPU count - value is automatically
            lowered if set to higher than maximum value.
          type: integer
          example: 1
          minimum: 1
          maximum: 128
        thread_pool_get_size:
          description: >-
            Number of workers in the get operation thread pool.  Do note this
            may have maximum value depending on CPU count - value is
            automatically lowered if set to higher than maximum value.
          type: integer
          example: 1
          minimum: 1
          maximum: 128
        thread_pool_analyze_size:
          description: >-
            Number of workers in the analyze operation thread pool.  Do note
            this may have maximum value depending on CPU count - value is
            automatically lowered if set to higher than maximum value.
          type: integer
          example: 1
          minimum: 1
          maximum: 128
        thread_pool_write_size:
          description: >-
            Number of workers in the write operation thread pool.  Do note this
            may have maximum value depending on CPU count - value is
            automatically lowered if set to higher than maximum value.
          type: integer
          example: 1
          minimum: 1
          maximum: 128
        thread_pool_force_merge_size:
          description: >-
            Number of workers in the force merge operation thread pool. This
            pool is used for forcing a merge between shards of one or more
            indices. Do note this may have maximum value depending on CPU count
            - value is automatically lowered if set to higher than maximum
            value.
          type: integer
          example: 1
          minimum: 1
          maximum: 128
        thread_pool_search_queue_size:
          description: Size of queue for operations in the search thread pool.
          type: integer
          example: 10
          minimum: 10
          maximum: 2000
        thread_pool_search_throttled_queue_size:
          description: Size of queue for operations in the search throttled thread pool.
          type: integer
          example: 10
          minimum: 10
          maximum: 2000
        thread_pool_get_queue_size:
          description: Size of queue for operations in the get thread pool.
          type: integer
          example: 10
          minimum: 10
          maximum: 2000
        thread_pool_analyze_queue_size:
          description: Size of queue for operations in the analyze thread pool.
          type: integer
          example: 10
          minimum: 10
          maximum: 2000
        thread_pool_write_queue_size:
          description: Size of queue for operations in the write thread pool.
          type: integer
          example: 10
          minimum: 10
          maximum: 2000
        ism_enabled:
          description: Specifies whether ISM is enabled or not.
          type: boolean
          example: true
          default: true
        ism_history_enabled:
          description: >-
            Specifies whether audit history is enabled or not. The logs from ISM
            are automatically indexed to a logs document.
          type: boolean
          example: true
          default: true
        ism_history_max_age_hours:
          description: Maximum age before rolling over the audit history index, in hours.
          type: integer
          example: 24
          minimum: 1
          maximum: 2147483647
          default: 24
        ism_history_max_docs:
          description: >-
            Maximum number of documents before rolling over the audit history
            index.
          type: integer
          example: 2500000
          minimum: 1
          maximum: 9223372036854776000
          default: 2500000
        ism_history_rollover_check_period_hours:
          description: >-
            The time between rollover checks for the audit history index, in
            hours.
          type: integer
          example: 8
          minimum: 1
          maximum: 2147483647
          default: 8
        ism_history_rollover_retention_period_days:
          description: Length of time long audit history indices are kept, in days.
          type: integer
          example: 30
          minimum: 1
          maximum: 2147483647
          default: 30
        search_max_buckets:
          description: Maximum number of aggregation buckets allowed in a single response.
          type: integer
          example: 10000
          minimum: 1
          maximum: 1000000
          default: 10000
        action_auto_create_index_enabled:
          description: Specifices whether to allow automatic creation of indices.
          type: boolean
          example: true
          default: true
        enable_security_audit:
          description: Specifies whether to allow security audit logging.
          type: boolean
          example: false
          default: false
        action_destructive_requires_name:
          description: >-
            Specifies whether to require explicit index names when deleting
            indices.
          type: boolean
          example: false
        cluster_max_shards_per_node:
          description: Maximum number of shards allowed per data node.
          type: integer
          example: 100
          minimum: 100
          maximum: 10000
        override_main_response_version:
          description: >-
            Compatibility mode sets OpenSearch to report its version as 7.10 so
            clients continue to work.
          type: boolean
          example: false
          default: false
        script_max_compilations_rate:
          description: >-
            Limits the number of inline script compilations within a period of
            time. Default is use-context
          type: string
          example: 75/5m
          default: use-context
        cluster_routing_allocation_node_concurrent_recoveries:
          description: >-
            Maximum concurrent incoming/outgoing shard recoveries (normally
            replicas) are allowed to happen per node . 
          type: integer
          example: 2
          minimum: 2
          maximum: 16
          default: 2
        reindex_remote_whitelist:
          description: >-
            Allowlist of remote IP addresses for reindexing. Changing this value
            will cause all OpenSearch instances to restart.
          type: array
          items:
            type: string
          example:
            - 255.255.223.233:9200
            - 222.33.222.222:6300
    mongo_advanced_config:
      type: object
      properties:
        default_read_concern:
          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/).
          type: string
          enum:
            - local
            - available
            - majority
          default: local
          example: local
        default_write_concern:
          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/).
          type: string
          default: majority
          example: majority
        transaction_lifetime_limit_seconds:
          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).
          type: integer
          minimum: 1
          default: 60
          example: 100
        slow_op_threshold_ms:
          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).
          type: integer
          minimum: 0
          default: 100
          example: 200
        verbosity:
          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).
          type: integer
          minimum: 0
          maximum: 5
          default: 0
          example: 3
    database_config:
      type: object
      properties:
        config:
          anyOf:
            - $ref: '#/components/schemas/mysql_advanced_config'
            - $ref: '#/components/schemas/postgres_advanced_config'
            - $ref: '#/components/schemas/redis_advanced_config'
            - $ref: '#/components/schemas/mongo_advanced_config'
            - $ref: '#/components/schemas/kafka_advanced_config'
            - $ref: '#/components/schemas/opensearch_advanced_config'
    ca:
      type: object
      properties:
        certificate:
          type: string
          example: >-
            LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVRVENDQXFtZ0F3SUJBZ0lVRUZZWTdBWFZQS0Raam9jb1lpMk00Y0dvcU0wd0RRWUpLb1pJaHZjTkFRRU0KQlFBd09qRTRNRFlHQTFVRUF3d3ZOek0zT1RaaE1XRXRaamhrTUMwME9HSmpMV0V4Wm1NdFpqbGhNVFZsWXprdwpORGhsSUZCeWIycGxZM1FnUTBFd0hoY05NakF3TnpFM01UVTFNREEyV2hjTk16QXdOekUxTVRVMU1EQTJXakE2Ck1UZ3dOZ1lEVlFRRERDODNNemM1Tm1FeFlTMW1PR1F3TFRRNFltTXRZVEZtWXkxbU9XRXhOV1ZqT1RBME9HVWcKVUhKdmFtVmpkQ0JEUVRDQ0FhSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnR1BBRENDQVlvQ2dnR0JBTVdScXhycwpMZnpNdHZyUmxKVEw4MldYMVBLZkhKbitvYjNYcmVBY3FZd1dBUUp2Q3IycmhxSXZieVZzMGlaU0NzOHI4c3RGClljQ0R1bkxJNmUwTy9laERZYTBIT2RrMkFFRzE1ckVOVmNha2NSczcyQWlHVHNrdkNXS2VkUjFTUWswVWt0WCsKQUg4S1ExS3F5bzNtZ2Y2cVV1WUpzc3JNTXFselk3YTN1RVpEb2ZqTjN5Q3MvM21pTVJKcVcyNm1JV0IrUUlEbAo5YzdLRVF5MTZvdCtjeHVnd0lLMm9oZHMzaFY1bjBKMFVBM0I3QWRBdXY5aUl5L3JHaHlTNm5CNTdaWm9JZnAyCnFybXdOY0UrVjlIdXhQSGtRVjFOQjUwOFFudWZ4Z0E5VCtqU2VrdGVUbWFORkxqNjFXL3BtcndrTytOaWFXUTIKaGgzVXBKOEozY1BoNkErbHRnUmpSV2NEb2lsYVNwRVVpU09WemNNYVFvalZKYVJlNk9NbnZYc29NaSs3ZzdneApWcittQ0lUcGcvck9DaXpBWWQ2UFAxLzdYTjk1ZXNmU2tBQnM5c3hJakpjTUFqbDBYTEFzRmtGZVdyeHNIajlVCmJnaDNWYXdtcnpUeXhZT0RQcXV1cS9JcGlwc0RRT3Fpb2ZsUStkWEJJL3NUT0NNbVp6K0pNcG5HYXdJREFRQUIKb3o4d1BUQWRCZ05WSFE0RUZnUVVSekdDRlE3WEtUdHRDN3JzNS8ydFlQcExTZGN3RHdZRFZSMFRCQWd3QmdFQgovd0lCQURBTEJnTlZIUThFQkFNQ0FRWXdEUVlKS29aSWh2Y05BUUVNQlFBRGdnR0JBSWFKQ0dSVVNxUExtcmcvCmk3MW10b0NHUDdzeG1BVXVCek1oOEdrU25uaVdaZnZGMTRwSUtqTlkwbzVkWmpHKzZqK1VjalZtK0RIdGE1RjYKOWJPeEk5S0NFeEI1blBjRXpMWjNZYitNOTcrellxbm9zUm85S21DVFJBb2JrNTZ0WU1FS1h1aVJja2tkMm1yUQo4cGw2N2xxdThjM1V4c0dHZEZVT01wMkk3ZTNpdUdWVm5UR0ZWM3JQZUdaQ0J3WGVyUUQyY0F4UjkzS3BnWVZ2ClhUUzk5dnpSbm1HOHhhUm9EVy9FbEdXZ2xWd0Q5a1JrbXhUUkdoYTdDWVZCcjFQVWY2dVVFVjhmVFIxc1hFZnIKLytMR1JoSVVsSUhWT3l2Yzk3YnZYQURPbWF1MWZDVE5lWGtRdTNyZnZFSlBmaFlLeVIwT0V3eWVvdlhRNzl0LwpTV2ZGTjBreU1Pc1UrNVNIdHJKSEh1eWNWcU0yQlVVK083VjM1UnNwOU9MZGRZMFFVbTZldFpEVEhhSUhYYzRRCnl1Rm1OL1NhSFZtNE0wL3BTVlJQdVd6TmpxMnZyRllvSDRtbGhIZk95TUNJMjc2elE2aWhGNkdDSHlkOUJqajcKUm1UWGEyNHM3NWhmSi9YTDV2bnJSdEtpVHJlVHF6V21EOVhnUmNMQ0gyS1hJaVRtSWc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
          description: >-
            base64 encoding of the certificate used to secure database
            connections
          readOnly: true
      required:
        - certificate
    online_migration:
      type: object
      properties:
        id:
          type: string
          description: The ID of the most recent migration.
          example: 77b28fc8-19ff-11eb-8c9c-c68e24557488
        status:
          type: string
          description: The current status of the migration.
          enum:
            - running
            - canceled
            - error
            - done
          example: running
        created_at:
          type: string
          description: The time the migration was initiated, in ISO 8601 format.
          example: '2020-10-29T15:57:38Z'
    source_database:
      type: object
      properties:
        source:
          type: object
          properties:
            host:
              type: string
              description: >-
                The FQDN pointing to the database cluster's current primary
                node.
              example: backend-do-user-19081923-0.db.ondigitalocean.com
            port:
              type: integer
              description: The port on which the database cluster is listening.
              example: 25060
            dbname:
              type: string
              description: The name of the default database.
              example: defaultdb
            username:
              type: string
              description: The default user for the database.
              example: doadmin
            password:
              type: string
              description: The randomly generated password for the default user.
              example: wv78n3zpz42xezdk
        disable_ssl:
          type: boolean
          description: Enables SSL encryption when connecting to the source database.
          example: false
        ignore_dbs:
          type: array
          items:
            type: string
          example:
            - db0
            - db1
          default: []
          description: List of databases that should be ignored during migration.
    database_cluster_resize:
      type: object
      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.
      required:
        - size
        - num_nodes
    backup:
      type: object
      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.
      required:
        - created_at
        - size_gigabytes
    database_replica:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
          description: >-
            A unique ID that can be used to identify and reference a database
            replica.
          readOnly: true
        name:
          type: string
          example: read-nyc3-01
          description: The name to give the read-only replicating
        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.
        size:
          type: string
          example: db-s-2vcpu-4gb
          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.
        status:
          type: string
          enum:
            - creating
            - online
            - resizing
            - migrating
            - forking
          example: creating
          description: A string representing the current status of the database cluster.
          readOnly: true
        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.
        created_at:
          type: string
          format: date-time
          example: '2019-01-11T18:37:36Z'
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the database cluster was created.
          readOnly: true
        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.
        connection:
          allOf:
            - readOnly: true
            - $ref: '#/components/schemas/database_connection'
        private_connection:
          allOf:
            - readOnly: true
            - $ref: '#/components/schemas/database_connection'
        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.
      required:
        - name
    events_logs:
      type: object
      properties:
        id:
          type: string
          description: ID of the particular event.
          example: pe8u2huh
        cluster_name:
          type: string
          description: The name of cluster.
          example: sample_cluster
        event_type:
          type: string
          enum:
            - cluster_maintenance_perform
            - cluster_master_promotion
            - cluster_create
            - cluster_update
            - cluster_delete
            - cluster_poweron
            - cluster_poweroff
          description: Type of the event.
          example: cluster_create
        create_time:
          type: string
          description: The time of the generation of a event.
          example: '2020-10-29T15:57:38Z'
    database:
      type: object
      properties:
        name:
          type: string
          example: alpha
          description: The name of the database.
      required:
        - name
    connection_pool:
      type: object
      properties:
        name:
          type: string
          description: >-
            A unique name for the connection pool. Must be between 3 and 60
            characters.
          example: backend-pool
        mode:
          type: string
          description: >-
            The PGBouncer transaction mode for the connection pool. The allowed
            values are session, transaction, and statement.
          example: transaction
        size:
          type: integer
          format: int32
          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.
          example: 10
        db:
          type: string
          description: The database for use with the connection pool.
          example: defaultdb
        user:
          type: string
          description: >-
            The name of the user for use with the connection pool. When
            excluded, all sessions connect to the database as the inbound user.
          example: doadmin
        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
      required:
        - name
        - mode
        - size
        - db
    connection_pools:
      type: object
      properties:
        pools:
          type: array
          readOnly: true
          description: An array of connection pool objects.
          items:
            $ref: '#/components/schemas/connection_pool'
    connection_pool_update:
      type: object
      properties:
        mode:
          type: string
          description: >-
            The PGBouncer transaction mode for the connection pool. The allowed
            values are session, transaction, and statement.
          example: transaction
        size:
          type: integer
          format: int32
          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.
          example: 10
        db:
          type: string
          description: The database for use with the connection pool.
          example: defaultdb
        user:
          type: string
          description: >-
            The name of the user for use with the connection pool. When
            excluded, all sessions connect to the database as the inbound user.
          example: doadmin
      required:
        - mode
        - size
        - db
    sql_mode:
      type: object
      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.
      required:
        - sql_mode
    version:
      type: string
      example: '8'
      description: >-
        A string representing the version of the database engine in use for the
        cluster.
    version-2:
      type: object
      properties:
        version:
          $ref: '#/components/schemas/version'
    kafka_topic_base:
      type: object
      properties:
        name:
          type: string
          description: The name of the Kafka topic.
          example: events
        replication_factor:
          type: integer
          example: 2
          description: The number of nodes to replicate data across the cluster.
        partition_count:
          type: integer
          example: 3
          description: >-
            The number of partitions available for the topic. On update, this
            value can only be increased.
    kafka_topic:
      type: object
      allOf:
        - $ref: '#/components/schemas/kafka_topic_base'
        - properties:
            state:
              type: string
              enum:
                - active
                - configuring
                - deleting
                - unknown
              example: active
              description: The state of the Kafka topic.
    kafka_topic_config:
      type: object
      properties:
        cleanup_policy:
          type: string
          enum:
            - delete
            - compact
            - compact_delete
          example: delete
          default: 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.
        compression_type:
          type: string
          enum:
            - producer
            - gzip
            - snappy
            - Iz4
            - zstd
            - uncompressed
          example: producer
          default: producer
          description: The compression_type specifies the compression type of the topic.
        delete_retention_ms:
          type: integer
          example: 86400000
          default: 86400000
          description: >-
            The delete_retention_ms specifies how long (in ms) to retain delete
            tombstone markers for topics.
        file_delete_delay_ms:
          type: integer
          example: 60000
          default: 60000
          description: >-
            The file_delete_delay_ms specifies the time (in ms) to wait before
            deleting a file from the filesystem.
        flush_messages:
          type: integer
          example: 9223372036854776000
          default: 9223372036854776000
          description: >-
            The flush_messages specifies the number of messages to accumulate on
            a log partition before messages are flushed to disk.
        flush_ms:
          type: integer
          example: 9223372036854776000
          default: 9223372036854776000
          description: >-
            The flush_ms specifies the maximum time (in ms) that a message is
            kept in memory before being flushed to disk.
        index_interval_bytes:
          type: integer
          example: 4096
          default: 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
          example: 9223372036854776000
          default: 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.
        max_message_bytes:
          type: integer
          example: 1048588
          default: 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.
        message_down_conversion_enable:
          type: boolean
          example: true
          default: 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.
        message_format_version:
          type: string
          example: 3.0-IV1
          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
          default: 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:
          type: string
          example: create_time
          enum:
            - create_time
            - log_append_time
          default: 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
          minimum: 0
          maximum: 1
          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.
        min_compaction_lag_ms:
          type: integer
          example: 0
          default: 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.
        min_insync_replicas:
          type: integer
          example: 1
          default: 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.
        preallocate:
          type: boolean
          example: false
          default: false
          description: >-
            The preallocate specifies whether a file should be preallocated on
            disk when creating a new log segment.
        retention_bytes:
          type: integer
          example: 1000000
          default: -1
          description: >-
            The retention_bytes specifies the maximum size of the log (in bytes)
            before deleting messages. -1 indicates that there is no limit.
        retention_ms:
          type: integer
          example: 604800000
          default: 604800000
          description: >-
            The retention_ms specifies the maximum amount of time (in ms) to
            keep a message before deleting it.
        segment_bytes:
          type: integer
          example: 209715200
          default: 209715200
          minimum: 14
          description: >-
            The segment_bytes specifies the maximum size of a single log file
            (in bytes).
        segment_jitter_ms:
          type: integer
          example: 0
          default: 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.
        segment_ms:
          type: integer
          example: 604800000
          default: 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.
    kafka_topic_create:
      type: object
      allOf:
        - $ref: '#/components/schemas/kafka_topic_base'
        - properties:
            config:
              $ref: '#/components/schemas/kafka_topic_config'
    kafka_topic_partition:
      type: object
      properties:
        size:
          type: integer
          description: Size of the topic partition in bytes.
          example: 4096
        id:
          type: integer
          description: An identifier for the partition.
          example: 1
        in_sync_replicas:
          type: integer
          description: >-
            The number of nodes that are in-sync (have the latest data) for the
            given partition
          example: 3
        earliest_offset:
          type: integer
          description: The earliest consumer offset amongst consumer groups.
          example: 0
        consumer_groups:
          type: array
          nullable: true
          items:
            type: object
            properties:
              group_name:
                type: string
                description: Name of the consumer group.
                example: consumer
              offset:
                type: integer
                description: The current offset of the consumer group.
                example: 0
    kafka_topic_verbose:
      type: object
      properties:
        name:
          type: string
          description: The name of the Kafka topic.
          example: events
        state:
          type: string
          enum:
            - active
            - configuring
            - deleting
            - unknown
          example: active
          description: The state of the Kafka topic.
        replication_factor:
          type: integer
          example: 2
          description: The number of nodes to replicate data across the cluster.
        partitions:
          type: array
          items:
            $ref: '#/components/schemas/kafka_topic_partition'
        config:
          $ref: '#/components/schemas/kafka_topic_config'
    kafka_topic_update:
      type: object
      properties:
        replication_factor:
          type: integer
          example: 2
          description: The number of nodes to replicate data across the cluster.
        partition_count:
          type: integer
          example: 3
          description: >-
            The number of partitions available for the topic. On update, this
            value can only be increased.
        config:
          $ref: '#/components/schemas/kafka_topic_config'
    logsink_base_verbose:
      type: object
      properties:
        sink_id:
          type: string
          example: dfcc9f57d86bf58e321c2c6c31c7a971be244ac7
          description: A unique identifier for Logsink
        sink_name:
          type: string
          description: The name of the Logsink
          example: prod-logsink
        sink_type:
          type: string
          enum:
            - rsyslog
            - elasticsearch
            - opensearch
          example: rsyslog
    rsyslog_logsink:
      type: object
      properties:
        server:
          type: string
          example: 192.168.0.1
          description: DNS name or IPv4 address of the rsyslog server
        port:
          type: integer
          example: 514
          maximum: 65535
          description: The internal port on which the rsyslog server is listening
        tls:
          type: boolean
          example: false
          description: >-
            Use TLS (as the messages are not filtered and may contain sensitive
            information, it is highly recommended to set this to true if the
            remote server supports it)
        format:
          type: string
          enum:
            - rfc5424
            - rfc3164
            - custom
          example: rfc5424
          description: >-
            Message format used by the server, this can be either rfc3164 (the
            old BSD style message format), `rfc5424` (current syslog message
            format) or custom
        logline:
          type: string
          example: <%pri%>%timestamp:::date-rfc3339% %HOSTNAME% %app-name% %msg%
          description: >
            Conditional (required if `format` == `custom`).


            Syslog log line template for a custom format, supporting limited
            rsyslog style templating (using `%tag%`). Supported tags are:
            `HOSTNAME`, `app-name`, `msg`, `msgid`, `pri`, `procid`,
            `structured-data`, `timestamp` and `timestamp:::date-rfc3339`.
        sd:
          type: string
          example: TOKEN tag="LiteralValue"
          description: content of the structured data block of rfc5424 message
        ca:
          type: string
          example: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n'
          description: PEM encoded CA certificate
        key:
          type: string
          example: '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n'
          description: (PEM format) client key if the server requires client authentication
        cert:
          type: string
          example: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n'
          description: (PEM format) client cert to use
      required:
        - server
        - port
        - tls
        - format
    elasticsearch_logsink:
      type: object
      properties:
        url:
          type: string
          example: https://user:passwd@192.168.0.1:9200
          description: Elasticsearch connection URL
        index_prefix:
          type: string
          example: elastic-logs
          description: Elasticsearch index prefix
        index_days_max:
          type: integer
          default: 7
          example: 5
          maximum: 10000
          minimum: 1
          description: Maximum number of days of logs to keep
        timeout:
          type: number
          format: float
          example: 10
          default: 10
          minimum: 10
          maximum: 120
          description: Elasticsearch request timeout limit
        ca:
          type: string
          example: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n'
          description: PEM encoded CA certificate
      required:
        - url
        - index_prefix
    opensearch_logsink:
      type: object
      properties:
        url:
          type: string
          example: https://user:passwd@192.168.0.1:9200
          description: Opensearch connection URL
        index_prefix:
          type: string
          example: opensearch-logs
          description: Opensearch index prefix
        index_days_max:
          type: integer
          default: 7
          example: 5
          maximum: 10000
          minimum: 1
          description: Maximum number of days of logs to keep
        timeout:
          type: number
          format: float
          example: 10
          default: 10
          minimum: 10
          maximum: 120
          description: Opensearch request timeout limit
        ca:
          type: string
          example: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n'
          description: PEM encoded CA certificate
      required:
        - url
        - index_prefix
    logsink_verbose:
      type: object
      allOf:
        - $ref: '#/components/schemas/logsink_base_verbose'
        - properties:
            config:
              anyOf:
                - $ref: '#/components/schemas/rsyslog_logsink'
                - $ref: '#/components/schemas/elasticsearch_logsink'
                - $ref: '#/components/schemas/opensearch_logsink'
              example:
                config:
                  server: 192.168.0.1
                  port: 514
                  tls: false
                  format: rfc5424
    logsink_base:
      type: object
      properties:
        sink_name:
          type: string
          description: The name of the Logsink
          example: prod-logsink
        sink_type:
          type: string
          enum:
            - rsyslog
            - elasticsearch
            - opensearch
          example: rsyslog
    logsink_create:
      type: object
      allOf:
        - $ref: '#/components/schemas/logsink_base'
        - properties:
            config:
              anyOf:
                - $ref: '#/components/schemas/rsyslog_logsink'
                - $ref: '#/components/schemas/elasticsearch_logsink'
                - $ref: '#/components/schemas/opensearch_logsink'
    logsink_update:
      type: object
      properties:
        config:
          anyOf:
            - $ref: '#/components/schemas/rsyslog_logsink'
            - $ref: '#/components/schemas/elasticsearch_logsink'
            - $ref: '#/components/schemas/opensearch_logsink'
      required:
        - config
    databases_basic_auth_credentials:
      type: object
      properties:
        basic_auth_username:
          type: string
          example: username
          description: basic authentication username for metrics HTTP endpoint
        basic_auth_password:
          type: string
          example: password
          description: basic authentication password for metrics HTTP endpoint
    database_metrics_credentials:
      type: object
      properties:
        credentials:
          $ref: '#/components/schemas/databases_basic_auth_credentials'
    opensearch_index_base:
      type: object
      properties:
        index_name:
          type: string
          description: The name of the opensearch index.
          example: events
        number_of_shards:
          type: integer
          example: 2
          description: The number of shards for the index.
        number_of_replicas:
          type: integer
          example: 3
          description: The number of replicas for the index.
        size:
          type: integer
          example: 208
          description: The size of the index.
        created_time:
          type: string
          format: date-time
          example: '2021-01-01T00:00:00Z'
          description: The date and time the index was created.
    opensearch_index:
      type: object
      allOf:
        - $ref: '#/components/schemas/opensearch_index_base'
        - properties:
            status:
              type: string
              enum:
                - unknown
                - open
                - close
                - none
              example: open
              description: The status of the OpenSearch index.
            health:
              type: string
              enum:
                - unknown
                - green
                - yellow
                - red
                - red*
              example: green
              description: The health of the OpenSearch index.
    domain:
      type: object
      properties:
        name:
          type: string
          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.
          example: example.com
        ip_address:
          type: string
          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.
          example: 192.0.2.1
        ttl:
          type: integer
          readOnly: true
          nullable: 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.
          example: 1800
        zone_file:
          type: string
          readOnly: true
          nullable: 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.
          example: >
            $ORIGIN example.com.

            $TTL 1800

            example.com. IN SOA ns1.digitalocean.com. hostmaster.example.com.
            1415982609 10800 3600 604800 1800

            example.com. 1800 IN NS ns1.digitalocean.com.

            example.com. 1800 IN NS ns2.digitalocean.com.

            example.com. 1800 IN NS ns3.digitalocean.com.

            example.com. 1800 IN A 1.2.3.4
    domain_record:
      type: object
      required:
        - type
      properties:
        id:
          type: integer
          description: A unique identifier for each domain record.
          example: 28448429
          readOnly: true
        type:
          type: string
          description: 'The type of the DNS record. For example: A, CNAME, TXT, ...'
          example: NS
        name:
          type: string
          description: The host name, alias, or service being defined by the record.
          example: '@'
        data:
          type: string
          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.
          example: ns1.digitalocean.com
        priority:
          type: integer
          description: The priority for SRV and MX records.
          nullable: true
          example: null
        port:
          type: integer
          description: The port for SRV records.
          nullable: true
          example: null
        ttl:
          type: integer
          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.
          example: 1800
        weight:
          type: integer
          description: The weight for SRV records.
          nullable: true
          example: null
        flags:
          type: integer
          description: An unsigned integer between 0-255 used for CAA records.
          nullable: true
          example: null
        tag:
          type: string
          description: >-
            The parameter tag for CAA records. Valid values are "issue",
            "issuewild", or "iodef"
          nullable: true
          example: null
    domain_record_a:
      allOf:
        - $ref: '#/components/schemas/domain_record'
        - required:
            - type
            - name
            - data
    domain_record_aaaa:
      allOf:
        - $ref: '#/components/schemas/domain_record'
        - required:
            - type
            - name
            - data
    domain_record_caa:
      allOf:
        - $ref: '#/components/schemas/domain_record'
        - required:
            - type
            - name
            - data
            - flags
            - tag
    domain_record_cname:
      allOf:
        - $ref: '#/components/schemas/domain_record'
        - required:
            - type
            - name
            - data
    domain_record_mx:
      allOf:
        - $ref: '#/components/schemas/domain_record'
        - required:
            - type
            - data
            - priority
    domain_record_ns:
      allOf:
        - $ref: '#/components/schemas/domain_record'
        - required:
            - type
            - name
            - data
            - flags
            - tag
    domain_record_soa:
      allOf:
        - $ref: '#/components/schemas/domain_record'
        - required:
            - type
            - ttl
    domain_record_srv:
      allOf:
        - $ref: '#/components/schemas/domain_record'
        - required:
            - type
            - name
            - data
            - priority
            - port
            - flags
            - tag
    domain_record_txt:
      allOf:
        - $ref: '#/components/schemas/domain_record'
        - required:
            - type
            - name
            - data
            - flags
            - tag
    kernel:
      type: object
      description: >
        **Note**: All Droplets created after March 2017 use internal kernels by
        default.

        These Droplets will have this attribute set to `null`.


        The current
        [kernel](https://www.digitalocean.com/docs/droplets/how-to/kernel/)

        for Droplets with externally managed kernels. This will initially be set
        to

        the kernel of the base image when the Droplet is created.
      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.
    image_name:
      type: string
      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.
      example: Nifty New Snapshot
    distribution:
      type: string
      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.
      enum:
        - Arch Linux
        - CentOS
        - CoreOS
        - Debian
        - Fedora
        - Fedora Atomic
        - FreeBSD
        - Gentoo
        - openSUSE
        - RancherOS
        - Rocky Linux
        - Ubuntu
        - Unknown
      example: Ubuntu
    region_slug:
      type: string
      description: >-
        The slug identifier for the region where the resource will initially be 
        available.
      enum:
        - ams1
        - ams2
        - ams3
        - blr1
        - fra1
        - lon1
        - nyc1
        - nyc2
        - nyc3
        - sfo1
        - sfo2
        - sfo3
        - sgp1
        - tor1
      example: nyc3
    regions_array:
      type: array
      items:
        $ref: '#/components/schemas/region_slug'
      description: >-
        This attribute is an array of the regions that the image is available
        in. The regions are represented by their identifying slug values.
      example:
        - nyc1
        - nyc2
    image_description:
      type: string
      description: An optional free-form text field to describe an image.
      example: ' '
    tags_array:
      type: array
      items:
        type: string
      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.
      example:
        - base-image
        - prod
    image:
      type: object
      properties:
        id:
          type: integer
          description: >-
            A unique number that can be used to identify and reference a
            specific image.
          example: 7555620
          readOnly: true
        name:
          $ref: '#/components/schemas/image_name'
        type:
          type: string
          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).
          enum:
            - base
            - snapshot
            - backup
            - custom
            - admin
          example: snapshot
        distribution:
          $ref: '#/components/schemas/distribution'
        slug:
          type: string
          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.
          example: nifty1
        public:
          type: boolean
          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.
          example: true
        regions:
          $ref: '#/components/schemas/regions_array'
        created_at:
          type: string
          format: date-time
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the image was created.
          example: '2020-05-04T22:23:02Z'
        min_disk_size:
          type: integer
          description: >-
            The minimum disk size in GB required for a Droplet to use this
            image.
          example: 20
          nullable: true
          minimum: 0
        size_gigabytes:
          type: number
          format: float
          nullable: true
          description: The size of the image in gigabytes.
          example: 2.34
        description:
          $ref: '#/components/schemas/image_description'
        tags:
          $ref: '#/components/schemas/tags_array'
        status:
          type: string
          description: >-
            A status string indicating the state of a custom image. This may be
            `NEW`,
             `available`, `pending`, `deleted`, or `retired`.
          enum:
            - NEW
            - available
            - pending
            - deleted
            - retired
          example: NEW
        error_message:
          type: string
          description: >-
            A string containing information about errors that may occur when
            importing
             a custom image.
          example: ' '
    size:
      type: object
      properties:
        slug:
          type: string
          example: s-1vcpu-1gb
          description: A human-readable string that is used to uniquely identify each size.
        memory:
          type: integer
          multipleOf: 8
          minimum: 8
          example: 1024
          description: >-
            The amount of RAM allocated to Droplets created of this size. The
            value is represented in megabytes.
        vcpus:
          type: integer
          example: 1
          description: The integer of number CPUs allocated to Droplets of this size.
        disk:
          type: integer
          example: 25
          description: >-
            The amount of disk space set aside for Droplets of this size. The
            value is represented in gigabytes.
        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.
        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.
        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.
        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.
        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.
      required:
        - available
        - disk
        - memory
        - price_hourly
        - price_monthly
        - regions
        - slug
        - transfer
        - vcpus
        - description
    network_v4:
      type: object
      properties:
        ip_address:
          type: string
          format: ipv4
          example: 104.236.32.182
          description: The IP address of the IPv4 network interface.
        netmask:
          type: string
          format: ipv4
          example: 255.255.192.0
          description: The netmask of the IPv4 network interface.
        gateway:
          type: string
          example: 104.236.0.1
          description: >
            The gateway of the specified IPv4 network interface.


            For private interfaces, a gateway is not provided. This is denoted
            by

            returning `nil` as its value.
        type:
          type: string
          enum:
            - public
            - private
          example: public
          description: The type of the IPv4 network interface.
    network_v6:
      type: object
      properties:
        ip_address:
          type: string
          format: ipv6
          example: 2604:a880:0:1010::18a:a001
          description: The IP address of the IPv6 network interface.
        netmask:
          type: integer
          example: 64
          description: The netmask of the IPv6 network interface.
        gateway:
          type: string
          format: ipv6
          example: 2604:a880:0:1010::1
          description: The gateway of the specified IPv6 network interface.
        type:
          type: string
          enum:
            - public
          example: public
          description: |
            The type of the IPv6 network interface.

            **Note**: IPv6 private  networking is not currently supported.
    droplet:
      type: object
      properties:
        id:
          type: integer
          example: 3164444
          description: >-
            A unique identifier for each Droplet instance. This is automatically
            generated upon Droplet creation.
        name:
          type: string
          example: example.com
          description: The human-readable name set for the Droplet instance.
        memory:
          type: integer
          multipleOf: 8
          example: 1024
          description: Memory of the Droplet in megabytes.
        vcpus:
          type: integer
          example: 1
          description: The number of virtual CPUs.
        disk:
          type: integer
          example: 25
          description: The size of the Droplet's disk in gigabytes.
        locked:
          type: boolean
          example: false
          description: >-
            A boolean value indicating whether the Droplet has been locked,
            preventing actions by users.
        status:
          type: string
          enum:
            - new
            - active
            - 'off'
            - archive
          example: active
          description: >-
            A status string indicating the state of the Droplet instance. This
            may be "new", "active", "off", or "archive".
        kernel:
          $ref: '#/components/schemas/kernel'
        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.
        features:
          type: array
          items:
            type: string
          example:
            - backups
            - private_networking
            - ipv6
          description: An array of features enabled on 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.
        next_backup_window:
          type: object
          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.
          nullable: true
          properties:
            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.
            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.
        snapshot_ids:
          type: array
          items:
            type: integer
          example:
            - 67512819
          description: >-
            An array of snapshot IDs of any snapshots created from the Droplet
            instance.
        image:
          $ref: '#/components/schemas/image'
        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.
        size:
          $ref: '#/components/schemas/size'
        size_slug:
          type: string
          example: s-1vcpu-1gb
          description: The unique slug identifier for the size of this Droplet.
        networks:
          type: object
          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.
          properties:
            v4:
              type: array
              items:
                $ref: '#/components/schemas/network_v4'
            v6:
              type: array
              items:
                $ref: '#/components/schemas/network_v6'
        region:
          $ref: '#/components/schemas/region'
        tags:
          type: array
          items:
            type: string
          example:
            - web
            - env:prod
          description: An array of Tags the Droplet has been tagged with.
        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.
      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
    droplet_create:
      type: object
      properties:
        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.
        size:
          type: string
          example: s-1vcpu-1gb
          description: >-
            The slug identifier for the size that you wish to select for this
            Droplet.
        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.
        ssh_keys:
          type: array
          items:
            anyOf:
              - type: string
              - type: integer
          example:
            - 289794
            - 3b:16:e4:bf:8b:00:8b:b8:59:8c:a9:d3:f0:19:fa:45
          default: []
          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.
        backups:
          type: boolean
          example: true
          default: false
          description: >-
            A boolean indicating whether automated backups should be enabled for
            the Droplet.
        ipv6:
          type: boolean
          example: true
          default: false
          description: A boolean indicating whether to enable IPv6 on the Droplet.
        monitoring:
          type: boolean
          example: true
          default: false
          description: >-
            A boolean indicating whether to install the DigitalOcean agent for
            monitoring.
        tags:
          type: array
          items:
            type: string
          nullable: true
          example:
            - env:prod
            - web
          default: []
          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.
        user_data:
          type: string
          example: |
            #cloud-config
            runcmd:
              - touch /test.txt
          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.
        private_networking:
          type: boolean
          example: true
          default: false
          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.
        volumes:
          type: array
          items:
            type: string
          example:
            - 12e97116-7280-11ed-b3d0-0a58ac146812
          default: []
          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.
        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.
        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`.
      required:
        - size
        - image
    droplet_single_create:
      title: Single Droplet Request
      allOf:
        - type: object
          properties:
            name:
              type: string
              maxLength: 255
              pattern: ^[a-zA-Z0-9]?[a-z0-9A-Z.\-]*[a-z0-9A-Z]$
              example: example.com
              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.
          required:
            - name
        - $ref: '#/components/schemas/droplet_create'
    droplet_multi_create:
      title: Multiple Droplet Request
      allOf:
        - type: object
          properties:
            names:
              type: array
              items:
                type: string
                maxLength: 255
                pattern: ^[a-zA-Z0-9]?[a-z0-9A-Z.\-]*[a-z0-9A-Z]$
              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.
          required:
            - names
        - $ref: '#/components/schemas/droplet_create'
    action_link:
      type: object
      description: >-
        The linked actions can be used to check the status of a Droplet's create
        event.
      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.
    snapshots_base:
      type: object
      properties:
        name:
          type: string
          example: web-01-1595954862243
          description: A human-readable name for the snapshot.
        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.
        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.
        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.
      required:
        - name
        - created_at
        - regions
        - min_disk_size
        - size_gigabytes
    droplet_snapshot:
      allOf:
        - type: object
          properties:
            id:
              type: integer
              example: 6372321
              description: The unique identifier for the snapshot or backup.
          required:
            - id
        - $ref: '#/components/schemas/snapshots_base'
        - type: object
          properties:
            type:
              type: string
              enum:
                - snapshot
                - backup
              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.
          required:
            - type
    droplet_action:
      required:
        - type
      type: object
      description: Specifies the action that will be taken on the Droplet.
      properties:
        type:
          type: string
          enum:
            - enable_backups
            - disable_backups
            - reboot
            - power_cycle
            - shutdown
            - power_off
            - power_on
            - restore
            - password_reset
            - resize
            - rebuild
            - rename
            - change_kernel
            - enable_ipv6
            - snapshot
          example: reboot
          description: The type of action to initiate for the Droplet.
    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.
    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.
    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.
    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.
    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.
    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.
    firewall_rule_base:
      type: object
      properties:
        protocol:
          type: string
          enum:
            - tcp
            - udp
            - icmp
          description: >-
            The type of traffic to be allowed. This may be one of `tcp`, `udp`,
            or `icmp`.
          example: tcp
        ports:
          type: string
          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".
          example: '8000'
      required:
        - protocol
        - ports
    firewall_rule_target:
      type: object
      properties:
        addresses:
          type: array
          items:
            type: string
          description: >-
            An array of strings containing the IPv4 addresses, IPv6 addresses,
            IPv4 CIDRs, and/or IPv6 CIDRs to which the firewall will allow
            traffic.
          example:
            - 1.2.3.4
            - 18.0.0.0/8
        droplet_ids:
          type: array
          items:
            type: integer
          description: >-
            An array containing the IDs of the Droplets to which the firewall
            will allow traffic.
          example:
            - 8043964
        load_balancer_uids:
          type: array
          items:
            type: string
          description: >-
            An array containing the IDs of the load balancers to which the
            firewall will allow traffic.
          example:
            - 4de7ac8b-495b-4884-9a69-1050c6793cd6
        kubernetes_ids:
          type: array
          items:
            type: string
          description: >-
            An array containing the IDs of the Kubernetes clusters to which the
            firewall will allow traffic.
          example:
            - 41b74c5d-9bd0-5555-5555-a57c495b81a3
        tags:
          $ref: '#/components/schemas/tags_array'
          description: >-
            An array containing the names of Tags corresponding to groups of
            Droplets to which the firewall will allow traffic.
          example:
            - frontend
    firewall_rules:
      type: object
      properties:
        inbound_rules:
          nullable: true
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/firewall_rule_base'
              - properties:
                  sources:
                    $ref: '#/components/schemas/firewall_rule_target'
                    description: >-
                      An object specifying locations from which inbound
                      traffic will be accepted.
                required:
                  - sources
        outbound_rules:
          nullable: true
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/firewall_rule_base'
              - properties:
                  destinations:
                    $ref: '#/components/schemas/firewall_rule_target'
                    description: >-
                      An object specifying locations to which outbound
                      traffic that will be allowed.
                required:
                  - destinations
    firewall:
      type: object
      allOf:
        - properties:
            id:
              type: string
              description: >-
                A unique ID that can be used to identify and reference a
                firewall.
              readOnly: true
              example: bb4b2611-3d72-467b-8602-280330ecd65c
            status:
              type: string
              description: >-
                A status string indicating the current state of the firewall.
                This can be "waiting", "succeeded", or "failed".
              enum:
                - waiting
                - succeeded
                - failed
              readOnly: true
              example: waiting
            created_at:
              type: string
              format: date-time
              description: >-
                A time value given in ISO8601 combined date and time format that
                represents when the firewall was created.
              readOnly: true
              example: '2020-05-23T21:24:00Z'
            pending_changes:
              type: array
              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.
              items:
                type: object
                properties:
                  droplet_id:
                    type: integer
                    example: 8043964
                  removing:
                    type: boolean
                    example: false
                  status:
                    type: string
                    example: waiting
              readOnly: true
              example:
                - droplet_id: 8043964
                  removing: false
                  status: waiting
            name:
              type: string
              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 (-).
              pattern: ^[a-zA-Z0-9][a-zA-Z0-9\.-]+$
              example: firewall
            droplet_ids:
              type: array
              description: >-
                An array containing the IDs of the Droplets assigned to the
                firewall.
              nullable: true
              items:
                type: integer
              example:
                - 8043964
            tags:
              allOf:
                - $ref: '#/components/schemas/tags_array'
                - description: >-
                    An array containing the names of the Tags assigned to the
                    firewall.
                  example: gateway
        - $ref: '#/components/schemas/firewall_rules'
    associated_resource:
      type: object
      description: >-
        An objects containing information about a resource associated with a
        Droplet.
      properties:
        id:
          type: string
          example: '61486916'
          description: The unique identifier for the resource associated with the Droplet.
        name:
          type: string
          example: ubuntu-s-1vcpu-1gb-nyc1-01-1585758823330
          description: The name of 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.
    selective_destroy_associated_resource:
      type: object
      description: >-
        An object containing information about a resource to be scheduled for
        deletion.
      properties:
        floating_ips:
          type: array
          deprecated: true
          description: >-
            An array of unique identifiers for the floating IPs to be scheduled
            for deletion.
          items:
            type: string
          example:
            - '6186916'
        reserved_ips:
          type: array
          description: >-
            An array of unique identifiers for the reserved IPs to be scheduled
            for deletion.
          items:
            type: string
          example:
            - '6186916'
        snapshots:
          type: array
          description: >-
            An array of unique identifiers for the snapshots to be scheduled for
            deletion.
          items:
            type: string
          example:
            - '61486916'
        volumes:
          type: array
          description: >-
            An array of unique identifiers for the volumes to be scheduled for
            deletion.
          items:
            type: string
          example:
            - ba49449a-7435-11ea-b89e-0a58ac14480f
        volume_snapshots:
          type: array
          description: >-
            An array of unique identifiers for the volume snapshots to be
            scheduled for deletion.
          items:
            type: string
          example:
            - edb0478d-7436-11ea-86e6-0a58ac144b91
    destroyed_associated_resource:
      type: object
      description: >-
        An object containing information about a resource scheduled for
        deletion.
      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.
    associated_resource_status:
      type: object
      description: >-
        An objects containing information about a resources scheduled for
        deletion.
      properties:
        droplet:
          $ref: '#/components/schemas/destroyed_associated_resource'
        resources:
          type: object
          description: >-
            An object containing additional information about resource related
            to a Droplet requested to be destroyed.
          properties:
            reserved_ips:
              type: array
              items:
                $ref: '#/components/schemas/destroyed_associated_resource'
            floating_ips:
              type: array
              items:
                $ref: '#/components/schemas/destroyed_associated_resource'
            snapshots:
              type: array
              items:
                $ref: '#/components/schemas/destroyed_associated_resource'
            volumes:
              type: array
              items:
                $ref: '#/components/schemas/destroyed_associated_resource'
            volume_snapshots:
              type: array
              items:
                $ref: '#/components/schemas/destroyed_associated_resource'
        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.
        failures:
          type: integer
          example: 0
          description: >-
            A count of the associated resources that failed to be destroyed, if
            any.
    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.
        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:
          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.
          anyOf:
            - title: 'null'
              type: object
              nullable: true
              description: >-
                If the floating IP is not assigned to a Droplet, the value will
                be null.
            - $ref: '#/components/schemas/droplet'
          example: null
        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.
        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.
    floating_ip_create:
      oneOf:
        - title: Assign to Droplet
          type: object
          properties:
            droplet_id:
              type: integer
              example: 2457247
              description: The ID of the Droplet that the floating IP will be assigned to.
          required:
            - droplet_id
        - title: Reserve to Region
          type: object
          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.
          required:
            - region
    floatingIPsAction:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - assign
            - unassign
          description: The type of action to initiate for the floating IP.
      discriminator:
        propertyName: type
        mapping:
          assign: '#/components/schemas/floating_ip_action_assign'
          unassign: '#/components/schemas/floating_ip_action_unassign'
    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.
    floating_ip_action_unassign:
      allOf:
        - $ref: '#/components/schemas/floatingIPsAction'
        - type: object
          required:
            - type
    namespace_info:
      type: object
      properties:
        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.
        label:
          type: string
          example: my namespace
          description: The namespace's unique name.
        region:
          type: string
          example: nyc1
          description: The namespace's datacenter region.
        uuid:
          type: string
          example: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
          description: The namespace's Universally Unique Identifier.
        key:
          type: string
          example: d1zcd455h01mqjfs4s2eaewyejehi5f2uj4etqq3h7cera8iwkub6xg5of1wdde2
          description: >-
            A random alpha numeric string. This key is used in conjunction with
            the namespace's UUID to authenticate 

            a user to use the namespace via `doctl`, DigitalOcean's official
            CLI.
    create_namespace:
      type: object
      properties:
        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.
        label:
          type: string
          example: my namespace
          description: The namespace's unique name.
      required:
        - region
        - label
    scheduled_details:
      type: object
      description: |
        Trigger details for SCHEDULED type, where body is optional.
      properties:
        cron:
          description: >-
            valid cron expression string which is required for SCHEDULED type
            triggers.
          type: string
          example: '* * * * *'
        body:
          description: Optional data to be sent to function while triggering the function.
          type: object
          nullable: true
          properties:
            name:
              type: string
              example: Welcome to DO!
      required:
        - cron
    trigger_info:
      type: object
      properties:
        namespace:
          type: string
          example: fn-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
          description: A unique string format of UUID with a prefix fn-.
        name:
          type: string
          example: my trigger
          description: The trigger's unique name within the namespace.
        function:
          type: string
          example: hello
          description: Name of function(action) that exists in the given namespace.
        type:
          type: string
          example: SCHEDULED
          description: String which indicates the type of trigger source like SCHEDULED.
        is_enabled:
          type: boolean
          example: true
          description: Indicates weather the trigger is paused or unpaused.
        created_at:
          type: string
          example: '2022-11-11T04:16:45Z'
          description: UTC time string.
        updated_at:
          type: string
          example: '2022-11-11T04:16:45Z'
          description: UTC time string.
        scheduled_details:
          $ref: '#/components/schemas/scheduled_details'
        scheduled_runs:
          type: object
          properties:
            last_run_at:
              description: >-
                Indicates last run time. null value indicates trigger not run
                yet.
              type: string
              nullable: true
              example: '2022-11-11T04:16:45Z'
            next_run_at:
              description: >-
                Indicates next run time. null value indicates trigger will not
                run.
              type: string
              nullable: true
              example: '2022-11-11T04:16:45Z'
    create_trigger:
      type: object
      properties:
        name:
          type: string
          example: my trigger
          description: The trigger's unique name within the namespace.
        function:
          type: string
          example: hello
          description: Name of function(action) that exists in the given namespace.
        type:
          type: string
          example: SCHEDULED
          description: >-
            One of different type of triggers. Currently only SCHEDULED is
            supported.
        is_enabled:
          type: boolean
          example: true
          description: Indicates weather the trigger is paused or unpaused.
        scheduled_details:
          $ref: '#/components/schemas/scheduled_details'
      required:
        - name
        - function
        - type
        - is_enabled
        - scheduled_details
    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'
    image_update:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/image_name'
        distribution:
          $ref: '#/components/schemas/distribution'
        description:
          $ref: '#/components/schemas/image_description'
    image_new_custom:
      type: object
      allOf:
        - $ref: '#/components/schemas/image_update'
        - properties:
            url:
              type: string
              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.
              example: >-
                http://cloud-images.ubuntu.com/minimal/releases/bionic/release/ubuntu-18.04-minimal-cloudimg-amd64.img
            region:
              $ref: '#/components/schemas/region_slug'
            tags:
              $ref: '#/components/schemas/tags_array'
      required:
        - name
        - url
        - region
      example:
        name: ubuntu-18.04-minimal
        url: >-
          http://cloud-images.ubuntu.com/minimal/releases/bionic/release/ubuntu-18.04-minimal-cloudimg-amd64.img
        distribution: Ubuntu
        region: nyc3
        description: Cloud-optimized image w/ small footprint
        tags:
          - base-image
          - prod
    image_action_base:
      type: object
      properties:
        type:
          type: string
          description: >-
            The action to be taken on the image. Can be either `convert` or
            `transfer`.
          enum:
            - convert
            - transfer
          example: convert
      required:
        - type
    image_action_transfer:
      allOf:
        - $ref: '#/components/schemas/image_action_base'
        - type: object
          properties:
            region:
              $ref: '#/components/schemas/region_slug'
          required:
            - type
            - region
    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.
    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:
          type: string
          enum:
            - NoSchedule
            - PreferNoSchedule
            - NoExecute
          example: NoSchedule
          description: >-
            How the node reacts to pods that it won't tolerate. Available effect
            values are `NoSchedule`, `PreferNoSchedule`, and `NoExecute`.
    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
          description: >-
            An object containing a `state` attribute whose value is set to a
            string indicating the current status of the node.
          properties:
            state:
              type: string
              enum:
                - provisioning
                - running
                - draining
                - deleting
              example: provisioning
              description: A string indicating the current status of the node.
        droplet_id:
          type: string
          example: '205545370'
          description: The ID of the Droplet used for the worker 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.
        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.
    kubernetes_node_pool_base:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          example: cdda885e-7663-40c8-bc74-3a036c66545d
          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.
        count:
          type: integer
          example: 3
          description: The number of Droplet instances in 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`.
        labels:
          type: object
          nullable: true
          example: null
          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.
        auto_scale:
          type: boolean
          example: true
          description: >-
            A boolean value indicating whether auto-scaling is enabled for this
            node pool.
        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`.
        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`.
        nodes:
          type: array
          readOnly: true
          description: >-
            An object specifying the details of a specific worker node in a node
            pool.
          items:
            $ref: '#/components/schemas/node'
    kubernetes_node_pool:
      type: object
      allOf:
        - $ref: '#/components/schemas/kubernetes_node_pool_size'
        - $ref: '#/components/schemas/kubernetes_node_pool_base'
      required:
        - name
        - size
        - count
    maintenance_policy:
      type: object
      nullable: true
      description: >-
        An object specifying the maintenance window policy for the Kubernetes
        cluster.
      properties:
        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`).
        duration:
          type: string
          readOnly: true
          example: 4h0m0s
          description: >-
            The duration of the maintenance window policy in human-readable
            format.
        day:
          type: string
          enum:
            - any
            - monday
            - tuesday
            - wednesday
            - thursday
            - friday
            - saturday
            - sunday
          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.
    control_plane_firewall:
      type: object
      nullable: true
      description: >-
        An object specifying the control plane firewall for the Kubernetes
        cluster. Control plane firewall is in early availability (invite only).
      properties:
        enable:
          type: boolean
          description: Indicates whether the control plane firewall is enabled.
          example: true
        allowed_addresses:
          type: array
          description: >-
            An array of public addresses (IPv4 or CIDR) allowed to access the
            control plane.
          items:
            type: string
          example:
            - 1.2.3.4/32
            - 1.1.0.0/16
    cluster:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          example: bd5f5959-5e1e-4205-a714-a914373942af
          description: >-
            A unique ID that can be used to identify and reference a Kubernetes
            cluster.
        name:
          type: string
          example: prod-cluster-01
          description: A human-readable name for a Kubernetes cluster.
        region:
          type: string
          example: nyc1
          description: >-
            The slug identifier for the region where the Kubernetes cluster is
            located.
        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.
        cluster_subnet:
          type: string
          format: cidr
          readOnly: true
          example: 10.244.0.0/16
          description: >-
            The range of IP addresses in the overlay network of the Kubernetes
            cluster in CIDR notation.
        service_subnet:
          type: string
          readOnly: true
          example: 10.245.0.0/16
          description: >-
            The range of assignable IP addresses for services running in the
            Kubernetes cluster in CIDR notation.
        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.
        ipv4:
          type: string
          readOnly: true
          example: 68.183.121.157
          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+)
        endpoint:
          type: string
          readOnly: true
          example: https://bd5f5959-5e1e-4205-a714-a914373942af.k8s.ondigitalocean.com
          description: The base URL of the API server on the Kubernetes master node.
        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`.
        node_pools:
          type: array
          description: >-
            An object specifying the details of the worker nodes available to
            the Kubernetes cluster.
          items:
            $ref: '#/components/schemas/kubernetes_node_pool'
        maintenance_policy:
          $ref: '#/components/schemas/maintenance_policy'
        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.
        status:
          type: object
          readOnly: true
          description: >-
            An object containing a `state` attribute whose value is set to a
            string indicating the current status of the cluster.
          properties:
            state:
              type: string
              enum:
                - running
                - provisioning
                - degraded
                - error
                - deleted
                - upgrading
                - deleting
              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.
        created_at:
          type: string
          format: date-time
          readOnly: true
          example: '2018-11-15T16:00:11Z'
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the Kubernetes cluster was created.
        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.
        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.
        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.
        registry_enabled:
          type: boolean
          readOnly: true
          example: true
          description: >-
            A read-only boolean value indicating if a container registry is
            integrated with the cluster.
        control_plane_firewall:
          $ref: '#/components/schemas/control_plane_firewall'
      required:
        - name
        - region
        - version
        - node_pools
    cluster_update:
      type: object
      properties:
        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`.
        maintenance_policy:
          $ref: '#/components/schemas/maintenance_policy'
        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.
        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.
        control_plane_firewall:
          $ref: '#/components/schemas/control_plane_firewall'
      required:
        - name
    associated_kubernetes_resource:
      type: object
      properties:
        id:
          type: string
          description: The ID of a resource associated with a Kubernetes cluster.
          example: edb0478d-7436-11ea-86e6-0a58ac144b91
        name:
          type: string
          description: The name of a resource associated with a Kubernetes cluster.
          example: volume-001
    associated_kubernetes_resources:
      type: object
      description: >-
        An object containing the IDs of resources associated with a Kubernetes
        cluster.
      properties:
        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.
        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.
        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.
    destroy_associated_kubernetes_resources:
      type: object
      description: >-
        An object containing the IDs of resources to be destroyed along with
        their associated with a Kubernetes cluster.
      properties:
        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.
        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.
        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.
    credentials:
      type: object
      properties:
        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.
        certificate_authority_data:
          type: string
          format: byte
          example: >-
            LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURKekNDQWcrZ0F3SUJBZ0lDQm5Vd0RRWUpLb1pJaHZjTkFRRUxCUUF3TXpFVk1CTUdBMVVFQ2hNTVJHbG4KYVhSaGJFOWpaV0Z1TVJvd0dBWURWUVFERXhGck9ITmhZWE1nUTJ4MWMzUmxjaUJEUVRBZUZ3MHlNREE0TURNeApOVEkxTWpoYUZ3MDBNREE0TURNeE5USTFNamhhTURNeEZUQVRCZ05WQkFvVERFUnBaMmwwWVd4UFkyVmhiakVhCk1CZ0dBMVVFQXhNUmF6aHpZV0Z6SUVOc2RYTjBaWElnUTBFd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUIKRHdBd2dnRUtBb0lCQVFDc21oa2JrSEpUcGhZQlN0R05VVE1ORVZTd2N3bmRtajArelQvcUZaNGsrOVNxUnYrSgpBd0lCaGpBU0JnTlZIUk1CQWY4RUNEQUdBUUgvQWdFQU1CMEdBMVVkRGdRV0JCUlRzazhhZ1hCUnFyZXdlTXJxClhwa3E1NXg5dVRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQXB6V2F6bXNqYWxXTEx3ZjVpbWdDblNINDlKcGkKYWkvbzFMdEJvVEpleGdqZzE1ZVppaG5BMUJMc0lWNE9BZGM3UEFsL040L0hlbENrTDVxandjamRnNVdaYnMzYwozcFVUQ0g5bVVwMFg1SVdhT1VKV292Q1hGUlM1R2VKYXlkSDVPUXhqTURzR2N2UlNvZGQrVnQ2MXE3aWdFZ2I1CjBOZ1l5RnRnc2p0MHpJN3hURzZFNnlsOVYvUmFoS3lIQks2eExlM1RnUGU4SXhWa2RwT3QzR0FhSDRaK0pLR3gKYisyMVZia1NnRE1QQTlyR0VKNVZwVXlBV0FEVXZDRVFHV0hmNGpQN2ZGZlc3T050S0JWY3h3YWFjcVBVdUhzWApwRG5DZVR3V1NuUVp6L05xNmQxWUtsMFdtbkwzTEowemJzRVFGbEQ4MkkwL09MY2dZSDVxMklOZHhBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
          description: >-
            A base64 encoding of bytes representing the certificate authority
            data for accessing the cluster.
        client_certificate_data:
          type: string
          format: byte
          deprecated: true
          nullable: true
          example: null
          description: >
            A base64 encoding of bytes representing the x509 client

            certificate data for access the cluster. This is only returned for
            clusters

            without support for token-based authentication.


            Newly created Kubernetes clusters do not return credentials using

            certificate-based authentication. For additional information,

            [see
            here](https://www.digitalocean.com/docs/kubernetes/how-to/connect-to-cluster/#authenticate).
        client_key_data:
          type: string
          format: byte
          deprecated: true
          nullable: true
          example: null
          description: >
            A base64 encoding of bytes representing the x509 client key

            data for access the cluster. This is only returned for clusters
            without

            support for token-based authentication.


            Newly created Kubernetes clusters do not return credentials using

            certificate-based authentication. For additional information,

            [see
            here](https://www.digitalocean.com/docs/kubernetes/how-to/connect-to-cluster/#authenticate).
        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.
        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.
    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.
    kubernetes_node_pool_update:
      type: object
      allOf:
        - $ref: '#/components/schemas/kubernetes_node_pool_base'
      required:
        - name
        - count
    user:
      type: object
      properties:
        kubernetes_cluster_user:
          type: object
          properties:
            username:
              type: string
              format: email
              example: sammy@digitalocean.com
              description: The username for the cluster admin user.
            groups:
              type: array
              items:
                type: string
              example:
                - k8saas:authenticated
              description: A list of in-cluster groups that the user belongs to.
    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.
    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.
    kubernetes_options:
      type: object
      properties:
        options:
          properties:
            regions:
              type: array
              items:
                $ref: '#/components/schemas/kubernetes_region'
            versions:
              type: array
              items:
                $ref: '#/components/schemas/kubernetes_version'
            sizes:
              type: array
              items:
                $ref: '#/components/schemas/kubernetes_size'
    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.
        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.
        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.
        diagnostics:
          description: >-
            An array of diagnostics reporting potential problems for the given
            cluster.
          type: array
          items:
            type: object
            properties:
              check_name:
                type: string
                example: unused-config-map
                description: The clusterlint check that resulted in the diagnostic.
              severity:
                type: string
                example: warning
                description: Can be one of error, warning or suggestion.
              message:
                type: string
                example: Unused config map
                description: Feedback about the object for users to fix.
              object:
                type: object
                description: >-
                  Metadata about the Kubernetes API object the diagnostic is
                  reported on.
                properties:
                  name:
                    type: string
                    example: foo
                    description: Name of the object
                  kind:
                    type: string
                    example: config map
                    description: The kind of Kubernetes API object
                  namespace:
                    type: string
                    example: kube-system
                    description: The namespace the object resides in the cluster.
    clusterlint_request:
      type: object
      properties:
        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.
        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.
        exclude_groups:
          type: array
          items:
            type: string
          example:
            - workload-health
          description: >-
            An array of check groups that will be omitted when clusterlint
            executes checks.
        exclude_checks:
          type: array
          items:
            type: string
          example:
            - default-namespace
          description: >-
            An array of checks that will be run when clusterlint executes
            checks.
    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.
    forwarding_rule:
      type: object
      description: An object specifying a forwarding rule for a load balancer.
      properties:
        entry_protocol:
          type: string
          enum:
            - http
            - https
            - http2
            - http3
            - tcp
            - udp
          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.
        entry_port:
          type: integer
          example: 443
          description: >-
            An integer representing the port on which the load balancer instance
            will listen.
        target_protocol:
          type: string
          enum:
            - http
            - https
            - http2
            - tcp
            - udp
          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.
        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.
        tls_passthrough:
          type: boolean
          example: false
          description: >-
            A boolean value indicating whether SSL encrypted traffic will be
            passed through to the backend Droplets.
      required:
        - entry_protocol
        - entry_port
        - target_protocol
        - target_port
    health_check:
      type: object
      description: An object specifying health check settings for the load balancer.
      properties:
        protocol:
          type: string
          enum:
            - http
            - https
            - tcp
          default: http
          example: http
          description: >-
            The protocol used for health checks sent to the backend Droplets.
            The possible values are `http`, `https`, or `tcp`.
        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.
        path:
          type: string
          default: /
          example: /
          description: >-
            The path on the backend Droplets to which the load balancer instance
            will send a request.
        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.
        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.
        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.
    sticky_sessions:
      type: object
      description: An object specifying sticky sessions settings for the load balancer.
      properties:
        type:
          type: string
          enum:
            - cookies
            - none
          example: cookies
          default: none
          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.
    lb_firewall:
      type: object
      description: >-
        An object specifying allow and deny rules to control traffic to the load
        balancer.
      properties:
        deny:
          type: array
          items:
            type: string
          example:
            - ip:1.2.3.4
            - cidr:2.3.0.0/16
          default: []
          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
          example:
            - ip:1.2.3.4
            - cidr:2.3.0.0/16
          default: []
          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')
    load_balancer_base:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          example: 4de7ac8b-495b-4884-9a69-1050c6793cd6
          description: >-
            A unique ID that can be used to identify and reference a load
            balancer.
        name:
          type: string
          example: example-lb-01
          description: A human-readable name for a load balancer instance.
        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.
        ip:
          type: string
          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
          example: 104.131.186.241
          description: >-
            An attribute containing the public-facing IP address of the load
            balancer.
        size_unit:
          type: integer
          default: 1
          minimum: 1
          maximum: 100
          example: 3
          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.
        size:
          type: string
          enum:
            - lb-small
            - lb-medium
            - lb-large
          deprecated: true
          default: lb-small
          example: lb-small
          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.

            * `lb-small` = 1 node

            * `lb-medium` = 3 nodes

            * `lb-large` = 6 nodes


            You can resize load balancers after creation up to once per hour.
            You cannot resize a load balancer within the first hour of its
            creation.
        algorithm:
          type: string
          example: round_robin
          enum:
            - round_robin
            - least_connections
          deprecated: true
          default: round_robin
          description: >-
            This field has been deprecated. You can no longer specify an
            algorithm for load balancers.
        status:
          type: string
          example: new
          enum:
            - new
            - active
            - errored
          readOnly: true
          description: >-
            A status string indicating the current state of the load balancer.
            This can be `new`, `active`, or `errored`.
        created_at:
          type: string
          format: date-time
          readOnly: true
          example: '2017-02-01T22:22:58Z'
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the load balancer was created.
        forwarding_rules:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/forwarding_rule'
          description: >-
            An array of objects specifying the forwarding rules for a load
            balancer.
        health_check:
          $ref: '#/components/schemas/health_check'
        sticky_sessions:
          $ref: '#/components/schemas/sticky_sessions'
        redirect_http_to_https:
          type: boolean
          example: true
          default: false
          description: >-
            A boolean value indicating whether HTTP requests to the load
            balancer on port 80 will be redirected to HTTPS on port 443.
        enable_proxy_protocol:
          type: boolean
          example: true
          default: false
          description: A boolean value indicating whether PROXY Protocol is in use.
        enable_backend_keepalive:
          type: boolean
          example: true
          default: false
          description: >-
            A boolean value indicating whether HTTP keepalive connections are
            maintained to target Droplets.
        http_idle_timeout_seconds:
          type: integer
          example: 90
          default: 60
          minimum: 30
          maximum: 600
          description: >-
            An integer value which configures the idle timeout for HTTP requests
            to the target droplets.
        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.
        disable_lets_encrypt_dns_records:
          type: boolean
          example: true
          default: false
          description: >-
            A boolean value indicating whether to disable automatic DNS record
            creation for Let's Encrypt certificates that are added to the load
            balancer.
        firewall:
          $ref: '#/components/schemas/lb_firewall'
      required:
        - forwarding_rules
    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.
    load_balancer_create:
      oneOf:
        - title: Assign Droplets by ID
          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'
          required:
            - droplet_ids
            - region
        - title: Assign Droplets by Tag
          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'
          required:
            - tag
            - region
    slack_details:
      type: object
      required:
        - url
        - channel
      properties:
        channel:
          type: string
          example: Production Alerts
          description: Slack channel to notify of an alert trigger.
        url:
          type: string
          description: Slack Webhook URL.
          example: https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ
    alerts:
      type: object
      required:
        - slack
        - email
      properties:
        email:
          description: An email to notify on an alert trigger.
          example:
            - bob@exmaple.com
          type: array
          items:
            type: string
        slack:
          type: array
          description: Slack integration details.
          items:
            $ref: '#/components/schemas/slack_details'
    alert_policy:
      type: object
      required:
        - uuid
        - type
        - description
        - compare
        - value
        - window
        - entities
        - tags
        - alerts
        - enabled
      properties:
        alerts:
          $ref: '#/components/schemas/alerts'
        compare:
          type: string
          example: GreaterThan
          enum:
            - GreaterThan
            - LessThan
        description:
          type: string
          example: CPU Alert
        enabled:
          type: boolean
          example: true
        entities:
          type: array
          items:
            type: string
          example:
            - '192018292'
        tags:
          type: array
          items:
            type: string
          example:
            - droplet_tag
        type:
          type: string
          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
          example: v1/insights/droplet/cpu
        uuid:
          type: string
          example: 78b3da62-27e5-49ba-ac70-5db0b5935c64
        value:
          type: number
          format: float
          example: 80
        window:
          type: string
          enum:
            - 5m
            - 10m
            - 30m
            - 1h
          example: 5m
    list_alert_policy:
      type: object
      required:
        - policies
      properties:
        policies:
          type: array
          items:
            $ref: '#/components/schemas/alert_policy'
    alert_policy_request:
      type: object
      required:
        - type
        - description
        - compare
        - value
        - window
        - entities
        - tags
        - alerts
        - enabled
      properties:
        alerts:
          $ref: '#/components/schemas/alerts'
        compare:
          type: string
          example: GreaterThan
          enum:
            - GreaterThan
            - LessThan
        description:
          type: string
          example: CPU Alert
        enabled:
          type: boolean
          example: true
        entities:
          type: array
          items:
            type: string
          example:
            - '192018292'
        tags:
          type: array
          items:
            type: string
          example:
            - droplet_tag
        type:
          type: string
          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
          example: v1/insights/droplet/cpu
        value:
          type: number
          format: float
          example: 80
        window:
          type: string
          example: 5m
          enum:
            - 5m
            - 10m
            - 30m
            - 1h
    metrics_result:
      type: object
      required:
        - metric
        - values
      properties:
        metric:
          type: object
          description: >-
            An object containing the metric's labels. These labels are key/value
            pairs that vary depending on the metric being queried. For example,
            load balancer metrics contain a `lb_id` label, while Droplet metrics
            contain a `host_id` label, and App Platform metrics contain a
            `app_component` label.
          additionalProperties:
            type: string
          example:
            host_id: '19201920'
        values:
          type: array
          description: An array of values for the metric.
          example:
            - - 1435781430
              - '1'
            - - 1435781445
              - '1'
          items:
            type: array
            items:
              oneOf:
                - type: integer
                - type: string
    metrics_data:
      type: object
      required:
        - resultType
        - result
      properties:
        result:
          type: array
          description: Result of query.
          items:
            $ref: '#/components/schemas/metrics_result'
        resultType:
          type: string
          enum:
            - matrix
          example: matrix
    metrics:
      type: object
      required:
        - status
        - data
      properties:
        data:
          $ref: '#/components/schemas/metrics_data'
        status:
          type: string
          example: success
          enum:
            - success
            - error
    project_base:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          example: 4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679
          description: The unique universal identifier of this project.
        owner_uuid:
          type: string
          readOnly: true
          example: 99525febec065ca37b2ffe4f852fd2b2581895e7
          description: The unique universal identifier of the project owner.
        owner_id:
          type: integer
          readOnly: true
          example: 258992
          description: The integer id of the project owner.
        name:
          type: string
          maxLength: 175
          example: my-web-api
          description: >-
            The human-readable name for the project. The maximum length is 175
            characters and the name must be unique.
        description:
          type: string
          maxLength: 255
          example: My website API
          description: >-
            The description of the project. The maximum length is 255
            characters.
        purpose:
          type: string
          maxLength: 255
          example: Service or API
          description: >
            The purpose of the project. The maximum length is 255 characters. It
            can

            have one of the following values:


            - Just trying out DigitalOcean

            - Class project / Educational purposes

            - Website or blog

            - Web Application

            - Service or API

            - Mobile Application

            - Machine learning / AI / Data processing

            - IoT

            - Operational / Developer tooling


            If another value for purpose is specified, for example, "your custom
            purpose",

            your purpose will be stored as `Other: your custom purpose`.
        environment:
          type: string
          enum:
            - Development
            - Staging
            - Production
          example: Production
          description: The environment of the project's resources.
        created_at:
          type: string
          format: date-time
          readOnly: true
          example: '2018-09-27T20:10:35Z'
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the project was created.
        updated_at:
          type: string
          format: date-time
          readOnly: true
          example: '2018-09-27T20:10:35Z'
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the project was updated.
    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.
    urn:
      type: string
      pattern: >-
        ^do:(dbaas|domain|droplet|floatingip|loadbalancer|space|volume|kubernetes|vpc):.*
      example: do:droplet:13457723
      description: >-
        The uniform resource name (URN) for the resource in the format
        do:resource_type:resource_id.
    resource:
      type: object
      properties:
        urn:
          $ref: '#/components/schemas/urn'
        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.
        links:
          type: object
          description: >-
            The links object contains the `self` object, which contains the
            resource relationship.
          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.
        status:
          type: string
          enum:
            - ok
            - not_found
            - assigned
            - already_assigned
            - service_down
          example: ok
          description: The status of assigning and fetching the resources.
    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.
    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.
        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.
        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_bandwidth_bytes:
          type: integer
          example: 5368709120
          description: >-
            The amount of outbound data transfer 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.
        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.
    subscription:
      type: object
      properties:
        tier:
          $ref: '#/components/schemas/subscription_tier_base'
        created_at:
          type: string
          format: date-time
          readOnly: true
          example: '2020-01-23T21:19:12Z'
          description: The time at which the subscription was created.
        updated_at:
          type: string
          format: date-time
          readOnly: true
          example: '2020-11-05T15:53:24Z'
          description: The time at which the subscription was last updated.
    registry:
      type: object
      properties:
        name:
          type: string
          maxLength: 63
          pattern: ^[a-z0-9-]{1,63}$
          example: example
          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.
        created_at:
          type: string
          format: date-time
          readOnly: true
          example: '2020-03-21T16:02:37Z'
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the registry was created.
        region:
          type: string
          example: fra1
          description: Slug of the region where registry data is stored
        storage_usage_bytes:
          type: integer
          readOnly: true
          example: 29393920
          description: The amount of storage used in the registry in bytes.
        storage_usage_bytes_updated_at:
          type: string
          format: date-time
          readOnly: true
          example: '2020-11-04T21:39:49.530562231Z'
          description: >-
            The time at which the storage usage was updated. Storage usage is
            calculated asynchronously, and may not immediately reflect pushes to
            the registry.
        subscription:
          allOf:
            - readOnly: true
            - $ref: '#/components/schemas/subscription'
    registry_create:
      type: object
      properties:
        name:
          type: string
          maxLength: 63
          pattern: ^[a-z0-9-]{1,63}$
          example: example
          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.
        subscription_tier_slug:
          type: string
          enum:
            - starter
            - basic
            - professional
          example: basic
          description: >-
            The slug of the subscription tier to sign up for. Valid values can
            be retrieved using the options endpoint.
        region:
          type: string
          enum:
            - nyc3
            - sfo3
            - ams3
            - sgp1
            - fra1
          example: fra1
          description: >-
            Slug of the region where registry data is stored. When not provided,
            a region will be selected.
      required:
        - name
        - subscription_tier_slug
    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.
    validate_registry:
      type: object
      properties:
        name:
          type: string
          maxLength: 63
          pattern: ^[a-z0-9-]{1,63}$
          example: example
          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.
      required:
        - name
    repository_tag:
      type: object
      properties:
        registry_name:
          type: string
          example: example
          description: The name of the container registry.
        repository:
          type: string
          example: repo-1
          description: The name of the repository.
        tag:
          type: string
          example: latest
          description: The name of the tag.
        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.
        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.
    repository:
      type: object
      properties:
        registry_name:
          type: string
          example: example
          description: The name of the container registry.
        name:
          type: string
          example: repo-1
          description: The name of the repository.
        latest_tag:
          $ref: '#/components/schemas/repository_tag'
        tag_count:
          type: integer
          example: 1
          description: The number of tags in the repository.
    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.
    repository_manifest:
      type: object
      properties:
        registry_name:
          type: string
          example: example
          description: The name of the container registry.
        repository:
          type: string
          example: repo-1
          description: The name of the repository.
        digest:
          type: string
          example: >-
            sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221
          description: The manifest digest
        compressed_size_bytes:
          type: integer
          example: 2803255
          description: The compressed size of the manifest in bytes.
        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.
        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
    repository_v2:
      type: object
      properties:
        registry_name:
          type: string
          example: example
          description: The name of the container registry.
        name:
          type: string
          example: repo-1
          description: The name of the repository.
        latest_manifest:
          $ref: '#/components/schemas/repository_manifest'
        tag_count:
          type: integer
          example: 1
          description: The number of tags in the repository.
        manifest_count:
          type: integer
          example: 1
          description: The number of manifests in the repository.
    garbage_collection:
      type: object
      properties:
        uuid:
          type: string
          example: eff0feee-49c7-4e8f-ba5c-a320c109c8a8
          description: A string specifying the UUID of the garbage collection.
        registry_name:
          type: string
          example: example
          description: The name of the container registry.
        status:
          type: string
          enum:
            - requested
            - waiting for write JWTs to expire
            - scanning manifests
            - deleting unreferenced blobs
            - cancelling
            - failed
            - succeeded
            - cancelled
          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.
        blobs_deleted:
          type: integer
          example: 42
          description: The number of blobs deleted as a result of this garbage collection.
        freed_bytes:
          type: integer
          example: 667
          description: The number of bytes freed as a result of this garbage collection.
    update_registry:
      type: object
      properties:
        cancel:
          type: boolean
          example: true
          description: >-
            A boolean value indicating that the garbage collection should be
            cancelled.
    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:
            type: string
            enum:
              - OverRepositoryLimit
              - OverStorageLimit
          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.
    neighbor_ids:
      type: object
      properties:
        neighbor_ids:
          type: array
          items:
            type: array
            items:
              type: integer
          description: >-
            An array of arrays. Each array will contain a set of Droplet IDs for
            Droplets that share a physical server.
          example:
            - - 168671828
              - 168663509
              - 168671815
            - - 168671883
              - 168671750
    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.
        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:
          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.
          anyOf:
            - title: 'null'
              type: object
              nullable: true
              description: >-
                If the reserved IP is not assigned to a Droplet, the value will
                be null.
            - $ref: '#/components/schemas/droplet'
          example: null
        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.
        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.
    reserved_ip_create:
      oneOf:
        - title: Assign to Droplet
          type: object
          properties:
            droplet_id:
              type: integer
              example: 2457247
              description: The ID of the Droplet that the reserved IP will be assigned to.
          required:
            - droplet_id
        - title: Reserve to Region
          type: object
          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.
          required:
            - region
    reserved_ip_action_type:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - assign
            - unassign
          description: The type of action to initiate for the reserved IP.
      discriminator:
        propertyName: type
        mapping:
          assign: '#/components/schemas/reserved_ip_action_assign'
          unassign: '#/components/schemas/reserved_ip_action_unassign'
    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.
    reserved_ip_action_unassign:
      allOf:
        - $ref: '#/components/schemas/reserved_ip_action_type'
        - type: object
          required:
            - type
    snapshots:
      allOf:
        - type: object
          properties:
            id:
              type: string
              example: '6372321'
              description: The unique identifier for the snapshot.
          required:
            - id
        - $ref: '#/components/schemas/snapshots_base'
        - type: object
          properties:
            resource_id:
              type: string
              example: '200776916'
              description: >-
                The unique identifier for the resource that the snapshot
                originated from.
            resource_type:
              type: string
              enum:
                - droplet
                - volume
              example: droplet
              description: The type of resource that the snapshot originated from.
            tags:
              description: An array of Tags the snapshot has been tagged with.
              type: array
              items:
                type: string
              nullable: true
              example:
                - web
                - env:prod
          required:
            - resource_id
            - resource_type
            - tags
    tags_metadata:
      type: object
      description: >-
        Tagged Resource Statistics include metadata regarding the resource type
        that has been tagged.
      properties:
        count:
          type: integer
          description: The number of tagged objects for this type of resource.
          example: 5
          minimum: 0
        last_tagged_uri:
          type: string
          description: The URI for the last tagged object for this type of resource.
          example: https://api.digitalocean.com/v2/images/7555620
    tags:
      type: object
      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.

        Tags have two attributes: a user defined `name` attribute and an
        embedded `resources` attribute with information about resources that
        have been tagged.
      properties:
        name:
          type: string
          description: >
            The name of the tag. Tags may contain letters, numbers, colons,
            dashes, and underscores.

            There is a limit of 255 characters per tag.


            **Note:** Tag names are case stable, which means the capitalization
            you use when you first create a tag is canonical.


            When 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`).


            Tagged 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".
          pattern: ^[a-zA-Z0-9_\-\:]+$
          maxLength: 255
          example: extra-awesome
        resources:
          type: object
          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.
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/tags_metadata'
            - properties:
                droplets:
                  $ref: '#/components/schemas/tags_metadata'
                imgages:
                  $ref: '#/components/schemas/tags_metadata'
                volumes:
                  $ref: '#/components/schemas/tags_metadata'
                volume_snapshots:
                  $ref: '#/components/schemas/tags_metadata'
                databases:
                  $ref: '#/components/schemas/tags_metadata'
          example:
            count: 5
            last_tagged_uri: https://api.digitalocean.com/v2/images/7555620
            droplets:
              count: 1
              last_tagged_uri: https://api.digitalocean.com/v2/droplets/3164444
            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
            volume_snapshots:
              count: 1
              last_tagged_uri: >-
                https://api.digitalocean.com/v2/snapshots/1f6f46e8-6b60-11e9-be4e-0a58ac144519
            databases:
              count: 1
              last_tagged_uri: >-
                https://api.digitalocean.com/v2/databases/b92438f6-ba03-416c-b642-e9236db91976
    error_with_root_causes:
      type: object
      properties:
        error:
          description: A message providing information about the error.
          type: string
          example: not_found
        messages:
          description: A list of error messages.
          type: array
          items:
            type: string
          nullable: true
          example: null
        root_causes:
          description: >-
            A list of underlying causes for the error, including details to
            help  resolve it when possible.
          type: array
          items:
            type: string
          example: []
      required:
        - error
        - root_causes
    tags_resource:
      type: object
      properties:
        resources:
          description: >-
            An array of objects containing resource_id and resource_type 
            attributes.
          type: array
          items:
            properties:
              resource_id:
                type: string
                description: The identifier of a resource.
                example: 3d80cb72-342b-4aaa-b92e-4e4abb24a933
              resource_type:
                type: string
                description: The type of the resource.
                example: volume
                enum:
                  - droplet
                  - image
                  - volume
                  - volume_snapshot
          example:
            - resource_id: '9569411'
              resource_type: droplet
            - resource_id: '7555620'
              resource_type: image
            - resource_id: 3d80cb72-342b-4aaa-b92e-4e4abb24a933
              resource_type: volume
      required:
        - resources
    volume_base:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier for the block storage volume.
          example: 506f78a4-e098-11e5-ad9f-000f53306ae1
          readOnly: true
        droplet_ids:
          type: array
          items:
            type: integer
          nullable: 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.
          example: []
          readOnly: true
        name:
          type: string
          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.
          example: example
        description:
          type: string
          description: An optional free-form text field to describe a block storage volume.
          example: Block store for examples
        size_gigabytes:
          type: integer
          description: >-
            The size of the block storage volume in GiB (1024^3). This field
            does not apply  when creating a volume from a snapshot.
          example: 10
        created_at:
          type: string
          description: >-
            A time value given in ISO8601 combined date and time format that
            represents when the block storage volume was created.
          example: '2020-03-02T17:00:49Z'
          readOnly: true
        tags:
          $ref: '#/components/schemas/tags_array'
    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
              description: The type of filesystem currently in-use on the volume.
              example: ext4
            filesystem_label:
              type: string
              description: The label currently applied to the filesystem.
              example: example
    volume_snapshot_id:
      properties:
        snapshot_id:
          type: string
          description: >-
            The unique identifier for the volume snapshot from which to create
            the volume.
          example: b0798135-fb76-11eb-946a-0a58ac146f33
    volume_write_file_system_type:
      type: object
      properties:
        filesystem_type:
          type: string
          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.
          example: ext4
    volume_write_file_system_label:
      type: string
      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.
      example: example
    volumes_ext4:
      type: object
      allOf:
        - $ref: '#/components/schemas/volume_base'
        - $ref: '#/components/schemas/volume_snapshot_id'
        - $ref: '#/components/schemas/volume_write_file_system_type'
        - properties:
            region:
              $ref: '#/components/schemas/region_slug'
            filesystem_label:
              allOf:
                - $ref: '#/components/schemas/volume_write_file_system_label'
                - maxLength: 16
          required:
            - name
            - size_gigabytes
            - region
    volumes_xfs:
      type: object
      allOf:
        - $ref: '#/components/schemas/volume_base'
        - $ref: '#/components/schemas/volume_snapshot_id'
        - $ref: '#/components/schemas/volume_write_file_system_type'
        - properties:
            region:
              $ref: '#/components/schemas/region_slug'
            filesystem_label:
              allOf:
                - $ref: '#/components/schemas/volume_write_file_system_label'
                - maxLength: 12
          required:
            - name
            - size_gigabytes
            - region
    volume_action_post_base:
      type: object
      properties:
        type:
          type: string
          description: The volume action to initiate.
          enum:
            - attach
            - detach
            - resize
          example: attach
        region:
          $ref: '#/components/schemas/region_slug'
      required:
        - type
    volume_action_droplet_id:
      type: integer
      description: >-
        The unique identifier for the Droplet the volume will be attached or
        detached from.
      example: 11612190
    volume_action_post_attach:
      type: object
      allOf:
        - $ref: '#/components/schemas/volume_action_post_base'
        - properties:
            droplet_id:
              $ref: '#/components/schemas/volume_action_droplet_id'
            tags:
              $ref: '#/components/schemas/tags_array'
          required:
            - droplet_id
    volume_action_post_detach:
      type: object
      allOf:
        - $ref: '#/components/schemas/volume_action_post_base'
        - properties:
            droplet_id:
              $ref: '#/components/schemas/volume_action_droplet_id'
          required:
            - droplet_id
    volumeAction:
      type: object
      allOf:
        - properties:
            type:
              type: string
              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.
              example: attach_volume
            resource_id:
              type: integer
              nullable: true
              example: null
        - $ref: '#/components/schemas/action'
    volume_action_post_resize:
      type: object
      allOf:
        - $ref: '#/components/schemas/volume_action_post_base'
        - properties:
            size_gigabytes:
              type: integer
              description: The new size of the block storage volume in GiB (1024^3).
              maximum: 16384
          required:
            - size_gigabytes
    vpc_updatable:
      type: object
      properties:
        name:
          type: string
          pattern: ^[a-zA-Z0-9\-\.]+$
          example: env.prod-vpc
          description: >-
            The name of the VPC. Must be unique and may only contain
            alphanumeric characters, dashes, and periods.
        description:
          type: string
          maxLength: 255
          example: VPC for production environment
          description: >-
            A free-form text field for describing the VPC's purpose. It may be a
            maximum of 255 characters.
    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.
    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.
    vpc_base:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          example: 5a4981aa-9653-4bd1-bef5-d6bff52042e4
          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
          readOnly: true
          example: '2020-03-13T19:20:47.442049222Z'
          description: A time value given in ISO8601 combined date and time format.
    vpc:
      type: object
      allOf:
        - $ref: '#/components/schemas/vpc_updatable'
        - $ref: '#/components/schemas/vpc_create'
        - $ref: '#/components/schemas/vpc_default'
        - $ref: '#/components/schemas/vpc_base'
    vpc_member:
      type: object
      properties:
        name:
          type: string
          example: nyc1-load-balancer-01
          description: The name of the resource.
        urn:
          $ref: '#/components/schemas/urn'
        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.
    check_base:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          example: 5a4981aa-9653-4bd1-bef5-d6bff52042e4
          description: A unique ID that can be used to identify and reference the check.
    check_updatable:
      type: object
      properties:
        name:
          type: string
          example: Landing page check
          description: A human-friendly display name.
        type:
          type: string
          example: https
          enum:
            - ping
            - http
            - 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.
        regions:
          type: array
          items:
            type: string
            enum:
              - us_east
              - us_west
              - eu_west
              - se_asia
          example:
            - us_east
            - eu_west
          description: >-
            An array containing the selected regions to perform healthchecks
            from.
        enabled:
          type: boolean
          example: true
          default: true
          description: A boolean value indicating whether the check is enabled/disabled.
    check:
      type: object
      allOf:
        - $ref: '#/components/schemas/check_base'
        - $ref: '#/components/schemas/check_updatable'
    region_state:
      type: object
      properties:
        status:
          type: string
          example: UP
          enum:
            - DOWN
            - UP
            - CHECKING
        status_changed_at:
          type: string
          example: '2022-03-17T22:28:51Z'
        thirty_day_uptime_percentage:
          type: number
          example: 97.99
    regional_state:
      type: object
      description: A map of region to regional state
      properties:
        us_east:
          $ref: '#/components/schemas/region_state'
        eu_west:
          $ref: '#/components/schemas/region_state'
    previous_outage:
      type: object
      properties:
        region:
          type: string
          example: us_east
        started_at:
          type: string
          example: '2022-03-17T18:04:55Z'
        ended_at:
          type: string
          example: '2022-03-17T18:06:55Z'
        duration_seconds:
          type: integer
          example: 120
    state:
      type: object
      properties:
        regions:
          $ref: '#/components/schemas/regional_state'
        previous_outage:
          $ref: '#/components/schemas/previous_outage'
    alert_base:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          example: 5a4981aa-9653-4bd1-bef5-d6bff52042e4
          description: A unique ID that can be used to identify and reference the alert.
    notification:
      type: object
      description: The notification settings for a trigger alert.
      required:
        - slack
        - email
      properties:
        email:
          description: >-
            An email to notify on an alert trigger. The Email has to be one that
            is verified on that DigitalOcean account.
          example:
            - bob@example.com
          type: array
          items:
            type: string
        slack:
          type: array
          description: Slack integration details.
          items:
            type: object
            required:
              - url
              - channel
            properties:
              channel:
                type: string
                format: string
                example: Production Alerts
                description: Slack channel to notify of an alert trigger.
              url:
                type: string
                format: string
                description: Slack Webhook URL.
                example: https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ
    alert_updatable:
      type: object
      properties:
        name:
          type: string
          example: Landing page degraded performance
          description: A human-friendly display name.
        type:
          type: string
          example: latency
          enum:
            - latency
            - down
            - down_global
            - ssl_expiry
          description: The type of 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:
          type: string
          example: greater_than
          description: The comparison operator used against the alert's threshold.
          enum:
            - greater_than
            - less_than
        notifications:
          $ref: '#/components/schemas/notification'
        period:
          type: string
          example: 2m
          description: Period of time the threshold must be exceeded to trigger the alert.
          enum:
            - 2m
            - 3m
            - 5m
            - 10m
            - 15m
            - 30m
            - 1h
    alert:
      type: object
      allOf:
        - $ref: '#/components/schemas/alert_base'
        - $ref: '#/components/schemas/alert_updatable'
  responses:
    unexpected_error:
      description: Unexpected error
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: example_error
            message: some error message
    oneClicks_all:
      description: A JSON object with a key of `1_clicks`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              1_clicks:
                type: array
                items:
                  $ref: '#/components/schemas/oneClicks'
          examples:
            All 1-Click Applications:
              value:
                1_clicks:
                  - slug: monitoring
                    type: kubernetes
                  - slug: wordpress-18-04
                    type: droplet
    unauthorized:
      description: Unauthorized
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: unauthorized
            message: Unable to authenticate you.
    too_many_requests:
      description: API Rate limit exceeded
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: too_many_requests
            message: API Rate limit exceeded.
    server_error:
      description: Server error.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: server_error
            message: Unexpected server-side error
    oneClicks_create:
      description: >
        The response will verify that a job has been successfully created to
        install a 1-Click. The

        post-installation lifecycle of a 1-Click application can not be managed
        via the DigitalOcean

        API. For additional details specific to the 1-Click, find and view its

        [DigitalOcean Marketplace](https://marketplace.digitalocean.com) page.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: A message about the result of the request.
                example: Successfully kicked off addon job.
          examples:
            Install a 1-Click Application:
              value:
                message: Successfully kicked off addon job.
    account:
      description: >-
        A JSON object keyed on account with an excerpt of the current user
        account data.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              account:
                $ref: '#/components/schemas/account'
    sshKeys_all:
      description: >-
        A JSON object with the key set to `ssh_keys`. The value is an array of
        `ssh_key` objects, each of which contains the standard `ssh_key`
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - properties:
                  ssh_keys:
                    type: array
                    items:
                      $ref: '#/components/schemas/sshKeys'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              ssh_keys:
                - id: 289794
                  fingerprint: 3b:16:e4:bf:8b:00:8b:b8:59:8c:a9:d3:f0:19:fa:45
                  public_key: >-
                    ssh-rsa
                    ANOTHEREXAMPLEaC1yc2EAAAADAQABAAAAQQDDHr/jh2Jy4yALcK4JyWbVkPRaWmhck3IgCoeOO3z1e2dBowLh64QAM+Qb72pxekALga2oi4GvT+TlWNhzPH4V
                    anotherexample
                  name: Other Public Key
              links: {}
              meta:
                total: 1
    sshKeys_new:
      description: The response body will be a JSON object with a key set to `ssh_key`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              ssh_key:
                $ref: '#/components/schemas/sshKeys'
      links:
        sshKeys_get_by_id:
          $ref: '#/components/links/sshKeys_get_by_id'
        sshKeys_get_by_fingerprint:
          $ref: '#/components/links/sshKeys_get_by_fingerprint'
        sshKeys_delete_by_id:
          $ref: '#/components/links/sshKeys_delete_by_id'
        sshKeys_delete_by_fingerprint:
          $ref: '#/components/links/sshKeys_delete_by_fingerprint'
    sshKeys_existing:
      description: >-
        A JSON object with the key set to `ssh_key`. The value is an `ssh_key`
        object containing the standard `ssh_key` attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              ssh_key:
                $ref: '#/components/schemas/sshKeys'
      links:
        sshKeys_get_by_id:
          $ref: '#/components/links/sshKeys_get_by_id'
        sshKeys_get_by_fingerprint:
          $ref: '#/components/links/sshKeys_get_by_fingerprint'
        sshKeys_delete_by_id:
          $ref: '#/components/links/sshKeys_delete_by_id'
        sshKeys_delete_by_fingerprint:
          $ref: '#/components/links/sshKeys_delete_by_fingerprint'
    not_found:
      description: The resource was not found.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: not_found
            message: The resource you requested could not be found.
    no_content:
      description: The action was successful and the response body is empty.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    actions:
      description: >-
        The results will be returned as a JSON object with an actions key.  This
        will be set to an array filled with action objects containing the
        standard action attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  actions:
                    type: array
                    items:
                      $ref: '#/components/schemas/action'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
    action:
      description: >-
        The result will be a JSON object with an action key.  This will be set
        to an action object containing the standard action attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              action:
                $ref: '#/components/schemas/action'
    list_apps:
      description: A JSON object with a `apps` key. This is list of object `apps`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_response'
          examples:
            apps:
              $ref: '#/components/examples/apps'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    new_app:
      description: A JSON or YAML of a `spec` object.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/app_response'
          examples:
            app:
              $ref: '#/components/examples/app'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    apps_get:
      description: A JSON with key `app`
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/app_response'
          examples:
            app:
              $ref: '#/components/examples/app'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    update_app:
      description: A JSON object of the updated `app`
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/app_response'
          examples:
            app:
              $ref: '#/components/examples/app'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    delete_app:
      description: the ID of the app deleted.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_delete_app_response'
          example:
            id: b7d64052-3706-4cb7-b21a-c5a2f44e63b3
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    list_logs:
      description: A JSON object with urls that point to archived logs
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_get_logs_response'
          examples:
            logs:
              $ref: '#/components/examples/logs'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    existing_deployments:
      description: >-
        A JSON object with a `deployments` key. This will be a list of all app
        deployments
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_deployments_response'
          examples:
            deployments:
              $ref: '#/components/examples/deployments'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    new_app_deployment:
      description: A JSON object with a `deployment` key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_deployment_response'
          examples:
            deployment:
              $ref: '#/components/examples/deployment'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    list_deployment:
      description: A JSON of the requested deployment
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_deployment_response'
          examples:
            deployment:
              $ref: '#/components/examples/deployment'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    cancel_deployment:
      description: A JSON the `deployment` that was just cancelled.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_deployment_response'
          examples:
            deployment:
              $ref: '#/components/examples/deployment'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    list_instance:
      description: A JSON with key `instance_sizes`
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_list_instance_sizes_response'
          examples:
            instance_sizes:
              $ref: '#/components/examples/instance_sizes'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    get_instance:
      description: A JSON with key `instance_size`
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_get_instance_size_response'
          examples:
            instance_size:
              $ref: '#/components/examples/instance_size'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    list_regions:
      description: A JSON object with key `regions`
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_list_regions_response'
          examples:
            regions:
              $ref: '#/components/examples/regions'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    propose_app:
      description: A JSON object.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/app_propose_response'
          examples:
            propose:
              $ref: '#/components/examples/propose'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    list_alerts:
      description: A JSON object with a `alerts` key. This is list of object `alerts`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_list_alerts_response'
          examples:
            apps:
              $ref: '#/components/examples/alerts'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    assign_alert_destinations:
      description: A JSON object with an `alert` key. This is an object of type `alert`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/apps_alert_response'
          examples:
            apps:
              $ref: '#/components/examples/alert'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    apps_validate_rollback:
      description: A JSON object with the validation results.
      content:
        application/json:
          schema:
            type: object
            properties:
              valid:
                type: boolean
                description: >-
                  Indicates whether the app can be rolled back to the specified
                  deployment.
              error:
                allOf:
                  - description: >-
                      Contains the failing condition that is causing the
                      rollback to be invalid.
                  - $ref: '#/components/schemas/app_rollback_validation_condition'
              warnings:
                type: array
                description: >-
                  Contains a list of warnings that may cause the rollback to run
                  under unideal circumstances.
                items:
                  $ref: '#/components/schemas/app_rollback_validation_condition'
          examples:
            Valid rollback:
              value:
                valid: true
            Valid rollback with warnings:
              value:
                valid: true
                warnings:
                  - code: image_source_missing_digest
                    components:
                      - docker-worker
                    message: >-
                      one or more components are missing an image digest and are
                      not guaranteed rollback to the old version
            Invalid rollback:
              value:
                valid: false
                error:
                  code: incompatible_result
                  message: deployment result "failed" is unsuitable for rollback
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    get_metrics_bandwidth_usage:
      description: A JSON object with a `app_bandwidth_usage` key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/app_metrics_bandwidth_usage'
          examples:
            app_bandwidth_usage:
              $ref: '#/components/examples/app_bandwidth_usage'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    list_metrics_bandwidth_usage:
      description: A JSON object with a `app_bandwidth_usage` key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/app_metrics_bandwidth_usage'
          examples:
            app_bandwidth_usage:
              $ref: '#/components/examples/app_bandwidth_usage_multiple'
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    all_cdn_endpoints:
      description: >-
        The result will be a JSON object with an `endpoints` key. This will be
        set to an array of endpoint objects, each of which will contain the
        standard CDN endpoint attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  endpoints:
                    type: array
                    items:
                      $ref: '#/components/schemas/cdn_endpoint'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              endpoints:
                - id: 19f06b6a-3ace-4315-b086-499a0e521b76
                  origin: static-images.nyc3.digitaloceanspaces.com
                  endpoint: static-images.nyc3.cdn.digitaloceanspaces.com
                  created_at: '2018-07-19T15:04:16Z'
                  certificate_id: 892071a0-bb95-49bc-8021-3afd67a210bf
                  custom_domain: static.example.com
                  ttl: 3600
              links: {}
              meta:
                total: 1
    existing_endpoint:
      description: >-
        The response will be a JSON object with an `endpoint` key. This will be
        set to an object containing the standard CDN endpoint attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              endpoint:
                $ref: '#/components/schemas/cdn_endpoint'
          examples:
            CDN Endpoint:
              value:
                endpoint:
                  id: 19f06b6a-3ace-4315-b086-499a0e521b76
                  origin: static-images.nyc3.digitaloceanspaces.com
                  endpoint: static-images.nyc3.cdn.digitaloceanspaces.com
                  created_at: '2018-07-19T15:04:16Z'
                  ttl: 3600
            CDN Endpoint With Custom Domain:
              value:
                endpoint:
                  id: 19f06b6a-3ace-4315-b086-499a0e521b76
                  origin: static-images.nyc3.digitaloceanspaces.com
                  endpoint: static-images.nyc3.cdn.digitaloceanspaces.com
                  created_at: '2018-07-19T15:04:16Z'
                  certificate_id: 892071a0-bb95-49bc-8021-3afd67a210bf
                  custom_domain: static.example.com
                  ttl: 3600
    all_certificates:
      description: >-
        The result will be a JSON object with a `certificates` key. This will be
        set to an array of certificate objects, each of which will contain the
        standard certificate attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  certificates:
                    type: array
                    items:
                      $ref: '#/components/schemas/certificate'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          examples:
            AllCertificates:
              $ref: '#/components/examples/certificates_all'
    new_certificate:
      description: >-
        The response will be a JSON object with a key called `certificate`. The
        value of this will be an object that contains the standard attributes
        associated with a certificate.

        When using Let's Encrypt, the initial value of the certificate's `state`
        attribute will be `pending`. When the certificate has been successfully
        issued by Let's Encrypt, this will transition to `verified` and be ready
        for use.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              certificate:
                $ref: '#/components/schemas/certificate'
          examples:
            Custom Certificate:
              $ref: '#/components/examples/certificates_custom'
            Let's Encrypt Certificate:
              $ref: '#/components/examples/certificates_lets_encrypt_pending'
    existing_certificate:
      description: >-
        The response will be a JSON object with a `certificate` key. This will
        be set to an object containing the standard certificate attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              certificate:
                $ref: '#/components/schemas/certificate'
          examples:
            Custom Certificate:
              $ref: '#/components/examples/certificates_custom'
            Let's Encrypt Certificate:
              $ref: '#/components/examples/certificates_lets_encrypt'
    balance:
      description: >-
        The response will be a JSON object that contains the following
        attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/balance'
          example:
            month_to_date_balance: '23.44'
            account_balance: '12.23'
            month_to_date_usage: '11.21'
            generated_at: '2019-07-09T15:01:12Z'
    billing_history:
      description: >-
        The response will be a JSON object that contains the following
        attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            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:
              billing_history:
                - description: Invoice for May 2018
                  amount: '12.34'
                  invoice_id: '123'
                  invoice_uuid: example-uuid
                  date: '2018-06-01T08:44:38Z'
                  type: Invoice
                - description: Payment (MC 2018)
                  amount: '-12.34'
                  date: '2018-06-02T08:44:38Z'
                  type: Payment
              links:
                pages:
                  next: >-
                    https://api.digitalocean.com/v2/customers/my/billing_history?page=2&per_page=2
                  last: >-
                    https://api.digitalocean.com/v2/customers/my/billing_history?page=3&per_page=2
              meta:
                total: 5
    invoices:
      description: >-
        The response will be a JSON object contains that contains a list of
        invoices under the `invoices` key, and the invoice preview under the
        `invoice_preview` key.

        Each element contains the invoice summary attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            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:
              invoices:
                - invoice_uuid: 22737513-0ea7-4206-8ceb-98a575af7681
                  invoice_id: '12345678'
                  amount: '12.34'
                  invoice_period: 2019-12
                - invoice_uuid: fdabb512-6faf-443c-ba2e-665452332a9e
                  invoice_id: '23456789'
                  amount: '23.45'
                  invoice_period: 2019-11
              invoice_preview:
                invoice_uuid: 1afe95e6-0958-4eb0-8d9a-9c5060d3ef03
                invoice_id: '34567890'
                amount: '34.56'
                invoice_period: 2020-02
                updated_at: '2020-02-23T06:31:50Z'
              links:
                pages:
                  next: >-
                    https://api.digitalocean.com/v2/customers/my/invoices?page=2&per_page=2
                  last: >-
                    https://api.digitalocean.com/v2/customers/my/invoices?page=35&per_page=2
              meta:
                total: 70
    invoice:
      description: >-
        The response will be a JSON object with a key called `invoice_items`.
        This will be set to an array of invoice item objects.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  invoice_items:
                    type: array
                    items:
                      $ref: '#/components/schemas/invoice_item'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              invoice_items:
                - product: Kubernetes Clusters
                  resource_uuid: 711157cb-37c8-4817-b371-44fa3504a39c
                  group_description: my-doks-cluster
                  description: a56e086a317d8410c8b4cfd1f4dc9f82
                  amount: '12.34'
                  duration: '744'
                  duration_unit: Hours
                  start_time: '2020-01-01T00:00:00Z'
                  end_time: '2020-02-01T00:00:00Z'
                - product: Spaces Subscription
                  description: Spaces ($5/mo 250GB storage & 1TB bandwidth)
                  amount: '34.45'
                  duration: '744'
                  duration_unit: Hours
                  start_time: '2020-01-01T00:00:00Z'
                  end_time: '2020-02-01T00:00:00Z'
              links:
                pages:
                  next: >-
                    https://api.digitalocean.com/v2/customers/my/invoices/22737513-0ea7-4206-8ceb-98a575af7681?page=2&per_page=2
                  last: >-
                    https://api.digitalocean.com/v2/customers/my/invoices/22737513-0ea7-4206-8ceb-98a575af7681?page=3&per_page=2
              meta:
                total: 6
    invoice_csv:
      description: The response will be a CSV file.
      headers:
        content-disposition:
          $ref: '#/components/headers/content-disposition'
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        text/csv:
          schema:
            type: string
          example: >
            product,group_description,description,hours,start,end,USD,project_name,category

            Floating IPs,,Unused Floating IP - 1.1.1.1,100,2020-07-01 00:00:00
            +0000,2020-07-22 18:14:39 +0000,$3.11,,iaas

            Taxes,,STATE SALES TAX (6.25%),,2020-07-01 00:00:00 +0000,2020-07-31
            23:59:59 +0000,$0.16,,iaas
    invoice_pdf:
      description: The response will be a PDF file.
      headers:
        content-disposition:
          $ref: '#/components/headers/content-disposition'
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/pdf:
          schema:
            type: string
            format: binary
    invoice_summary:
      description: >-
        To retrieve a summary for an invoice, send a GET request to 
        `/v2/customers/my/invoices/$INVOICE_UUID/summary`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/invoice_summary'
          example:
            invoice_uuid: 22737513-0ea7-4206-8ceb-98a575af7681
            invoice_id: '123456789'
            billing_period: 2020-01
            amount: '27.13'
            user_name: Sammy Shark
            user_billing_address:
              address_line1: 101 Shark Row
              city: Atlantis
              region: OC
              postal_code: '12345'
              country_iso2_code: US
              created_at: '2019-09-03T16:34:46.000+00:00'
              updated_at: '2019-09-03T16:34:46.000+00:00'
            user_company: DigitalOcean
            user_email: sammy@digitalocean.com
            product_charges:
              name: Product usage charges
              amount: '12.34'
              items:
                - amount: '10.00'
                  name: Spaces Subscription
                  count: '1'
                - amount: '2.34'
                  name: Database Clusters
                  count: '1'
            overages:
              name: Overages
              amount: '3.45'
            taxes:
              name: Taxes
              amount: '4.56'
            credits_and_adjustments:
              name: Credits & adjustments
              amount: '6.78'
    options:
      description: A JSON string with a key of `options`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/options'
          example:
            options:
              kafka:
                regions:
                  - ams3
                  - blr1
                  - fra1
                  - lon1
                  - nyc1
                  - nyc3
                  - sfo2
                  - sfo3
                  - sgp1
                  - syd1
                  - tor1
                versions:
                  - '3.6'
                  - '3.7'
                layouts:
                  - num_nodes: 3
                    sizes:
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
                      - db-s-2vcpu-4gb
                      - db-s-2vcpu-2gb
                  - num_nodes: 6
                    sizes:
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
                  - num_nodes: 9
                    sizes:
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
                  - num_nodes: 15
                    sizes:
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
              mongodb:
                regions:
                  - ams3
                  - blr1
                  - fra1
                  - lon1
                  - nyc1
                  - nyc3
                  - sfo2
                  - sfo3
                  - sgp1
                  - syd1
                  - tor1
                versions:
                  - '5.0'
                  - '6.0'
                  - '7.0'
                layouts:
                  - num_nodes: 1
                    sizes:
                      - db-s-1vcpu-1gb
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - db-s-4vcpu-8gb
                      - db-s-6vcpu-16gb
                      - db-s-8vcpu-32gb
                      - db-s-16vcpu-64gb
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
                      - gd-8vcpu-32gb
                      - gd-16vcpu-64gb
                      - gd-32vcpu-128gb
                      - gd-40vcpu-160gb
                      - so1_5-2vcpu-16gb
                      - so1_5-4vcpu-32gb
                      - so1_5-8vcpu-64gb
                      - so1_5-16vcpu-128gb
                      - so1_5-24vcpu-192gb
                      - so1_5-32vcpu-256gb
                  - num_nodes: 3
                    sizes:
                      - db-s-1vcpu-1gb
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - db-s-4vcpu-8gb
                      - db-s-6vcpu-16gb
                      - db-s-8vcpu-32gb
                      - db-s-16vcpu-64gb
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
                      - gd-8vcpu-32gb
                      - gd-16vcpu-64gb
                      - gd-32vcpu-128gb
                      - gd-40vcpu-160gb
                      - so1_5-2vcpu-16gb
                      - so1_5-4vcpu-32gb
                      - so1_5-8vcpu-64gb
                      - so1_5-16vcpu-128gb
                      - so1_5-24vcpu-192gb
                      - so1_5-32vcpu-256gb
              mysql:
                regions:
                  - ams3
                  - blr1
                  - fra1
                  - lon1
                  - nyc1
                  - nyc3
                  - sfo2
                  - sfo3
                  - sgp1
                  - syd1
                  - tor1
                versions:
                  - '8'
                layouts:
                  - num_nodes: 1
                    sizes:
                      - db-s-1vcpu-1gb
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - db-s-4vcpu-8gb
                      - db-s-6vcpu-16gb
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
                      - gd-8vcpu-32gb
                      - gd-16vcpu-64gb
                      - gd-32vcpu-128gb
                      - gd-40vcpu-160gb
                      - so1_5-2vcpu-16gb
                      - so1_5-4vcpu-32gb
                      - so1_5-8vcpu-64gb
                      - so1_5-16vcpu-128gb
                      - so1_5-24vcpu-192gb
                      - so1_5-32vcpu-256gb
                      - db-intel-1vcpu-1gb
                      - db-amd-1vcpu-1gb
                      - db-intel-1vcpu-2gb
                      - db-amd-1vcpu-2gb
                      - db-amd-2vcpu-4gb
                      - db-intel-2vcpu-4gb
                      - db-amd-2vcpu-8gb
                      - db-intel-2vcpu-8gb
                      - db-intel-4vcpu-8gb
                      - db-amd-4vcpu-8gb
                      - db-amd-4vcpu-16gb
                      - db-intel-4vcpu-16gb
                      - db-intel-8vcpu-32gb
                      - db-amd-8vcpu-32gb
                      - db-intel-16vcpu-64gb
                      - db-amd-16vcpu-64gb
                  - num_nodes: 2
                    sizes:
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - db-s-4vcpu-8gb
                      - db-s-6vcpu-16gb
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
                      - gd-8vcpu-32gb
                      - gd-16vcpu-64gb
                      - gd-32vcpu-128gb
                      - gd-40vcpu-160gb
                      - so1_5-2vcpu-16gb
                      - so1_5-4vcpu-32gb
                      - so1_5-8vcpu-64gb
                      - so1_5-16vcpu-128gb
                      - so1_5-24vcpu-192gb
                      - so1_5-32vcpu-256gb
                      - db-intel-1vcpu-2gb
                      - db-amd-1vcpu-2gb
                      - db-amd-2vcpu-4gb
                      - db-intel-2vcpu-4gb
                      - db-intel-2vcpu-8gb
                      - db-amd-2vcpu-8gb
                      - db-intel-4vcpu-8gb
                      - db-amd-4vcpu-8gb
                      - db-intel-4vcpu-16gb
                      - db-amd-4vcpu-16gb
                      - db-amd-8vcpu-32gb
                      - db-intel-8vcpu-32gb
                      - db-amd-16vcpu-64gb
                      - db-intel-16vcpu-64gb
                  - num_nodes: 3
                    sizes:
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - db-s-4vcpu-8gb
                      - db-s-6vcpu-16gb
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
                      - gd-8vcpu-32gb
                      - gd-16vcpu-64gb
                      - gd-32vcpu-128gb
                      - gd-40vcpu-160gb
                      - so1_5-2vcpu-16gb
                      - so1_5-4vcpu-32gb
                      - so1_5-8vcpu-64gb
                      - so1_5-16vcpu-128gb
                      - so1_5-24vcpu-192gb
                      - so1_5-32vcpu-256gb
                      - db-intel-1vcpu-2gb
                      - db-amd-1vcpu-2gb
                      - db-amd-2vcpu-4gb
                      - db-intel-2vcpu-4gb
                      - db-intel-2vcpu-8gb
                      - db-amd-2vcpu-8gb
                      - db-intel-4vcpu-8gb
                      - db-amd-4vcpu-8gb
                      - db-intel-4vcpu-16gb
                      - db-amd-4vcpu-16gb
                      - db-amd-8vcpu-32gb
                      - db-intel-8vcpu-32gb
                      - db-amd-16vcpu-64gb
                      - db-intel-16vcpu-64gb
              opensearch:
                regions:
                  - ams3
                  - blr1
                  - fra1
                  - lon1
                  - nyc1
                  - nyc3
                  - sfo2
                  - sfo3
                  - sgp1
                  - syd1
                  - tor1
                versions:
                  - '1'
                  - '2'
                layouts:
                  - num_nodes: 1
                    sizes:
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - gd-2vcpu-8gb
                      - m3-2vcpu-16gb
                      - db-s-4vcpu-8gb
                      - gd-4vcpu-16gb
                      - m3-4vcpu-32gb
                      - m3-8vcpu-64gb
                  - num_nodes: 3
                    sizes:
                      - db-s-2vcpu-4gb
                      - gd-2vcpu-8gb
                      - m3-2vcpu-16gb
                      - db-s-4vcpu-8gb
                      - gd-4vcpu-16gb
                      - m3-4vcpu-32gb
                      - m3-8vcpu-64gb
                  - num_nodes: 6
                    sizes:
                      - gd-2vcpu-8gb
                      - m3-2vcpu-16gb
                      - gd-4vcpu-16gb
                      - m3-4vcpu-32gb
                      - m3-8vcpu-64gb
                  - num_nodes: 9
                    sizes:
                      - gd-2vcpu-8gb
                      - m3-2vcpu-16gb
                      - gd-4vcpu-16gb
                      - m3-4vcpu-32gb
                      - m3-8vcpu-64gb
                  - num_nodes: 15
                    sizes:
                      - gd-2vcpu-8gb
                      - m3-2vcpu-16gb
                      - gd-4vcpu-16gb
                      - m3-4vcpu-32gb
                      - m3-8vcpu-64gb
              pg:
                regions:
                  - ams3
                  - blr1
                  - fra1
                  - lon1
                  - nyc1
                  - nyc3
                  - sfo2
                  - sfo3
                  - sgp1
                  - syd1
                  - tor1
                versions:
                  - '13'
                  - '14'
                  - '15'
                  - '16'
                layouts:
                  - num_nodes: 1
                    sizes:
                      - db-s-1vcpu-1gb
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - db-s-4vcpu-8gb
                      - db-s-6vcpu-16gb
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
                      - gd-8vcpu-32gb
                      - gd-16vcpu-64gb
                      - gd-32vcpu-128gb
                      - gd-40vcpu-160gb
                      - so1_5-2vcpu-16gb
                      - so1_5-4vcpu-32gb
                      - so1_5-8vcpu-64gb
                      - so1_5-16vcpu-128gb
                      - so1_5-24vcpu-192gb
                      - so1_5-32vcpu-256gb
                      - db-intel-1vcpu-1gb
                      - db-amd-1vcpu-1gb
                      - db-intel-1vcpu-2gb
                      - db-amd-1vcpu-2gb
                      - db-amd-2vcpu-4gb
                      - db-intel-2vcpu-4gb
                      - db-amd-2vcpu-8gb
                      - db-intel-2vcpu-8gb
                      - db-intel-4vcpu-8gb
                      - db-amd-4vcpu-8gb
                      - db-amd-4vcpu-16gb
                      - db-intel-4vcpu-16gb
                      - db-intel-8vcpu-32gb
                      - db-amd-8vcpu-32gb
                      - db-intel-16vcpu-64gb
                      - db-amd-16vcpu-64gb
                  - num_nodes: 2
                    sizes:
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - db-s-4vcpu-8gb
                      - db-s-6vcpu-16gb
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
                      - gd-8vcpu-32gb
                      - gd-16vcpu-64gb
                      - gd-32vcpu-128gb
                      - gd-40vcpu-160gb
                      - so1_5-2vcpu-16gb
                      - so1_5-4vcpu-32gb
                      - so1_5-8vcpu-64gb
                      - so1_5-16vcpu-128gb
                      - so1_5-24vcpu-192gb
                      - so1_5-32vcpu-256gb
                      - db-intel-1vcpu-2gb
                      - db-amd-1vcpu-2gb
                      - db-amd-2vcpu-4gb
                      - db-intel-2vcpu-4gb
                      - db-intel-2vcpu-8gb
                      - db-amd-2vcpu-8gb
                      - db-intel-4vcpu-8gb
                      - db-amd-4vcpu-8gb
                      - db-intel-4vcpu-16gb
                      - db-amd-4vcpu-16gb
                      - db-amd-8vcpu-32gb
                      - db-intel-8vcpu-32gb
                      - db-amd-16vcpu-64gb
                      - db-intel-16vcpu-64gb
                  - num_nodes: 3
                    sizes:
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - db-s-4vcpu-8gb
                      - db-s-6vcpu-16gb
                      - gd-2vcpu-8gb
                      - gd-4vcpu-16gb
                      - gd-8vcpu-32gb
                      - gd-16vcpu-64gb
                      - gd-32vcpu-128gb
                      - gd-40vcpu-160gb
                      - so1_5-2vcpu-16gb
                      - so1_5-4vcpu-32gb
                      - so1_5-8vcpu-64gb
                      - so1_5-16vcpu-128gb
                      - so1_5-24vcpu-192gb
                      - so1_5-32vcpu-256gb
                      - db-intel-1vcpu-2gb
                      - db-amd-1vcpu-2gb
                      - db-amd-2vcpu-4gb
                      - db-intel-2vcpu-4gb
                      - db-intel-2vcpu-8gb
                      - db-amd-2vcpu-8gb
                      - db-intel-4vcpu-8gb
                      - db-amd-4vcpu-8gb
                      - db-intel-4vcpu-16gb
                      - db-amd-4vcpu-16gb
                      - db-amd-8vcpu-32gb
                      - db-intel-8vcpu-32gb
                      - db-amd-16vcpu-64gb
                      - db-intel-16vcpu-64gb
              redis:
                regions:
                  - ams3
                  - blr1
                  - fra1
                  - lon1
                  - nyc1
                  - nyc3
                  - sfo2
                  - sfo3
                  - sgp1
                  - syd1
                  - tor1
                versions:
                  - '7'
                layouts:
                  - num_nodes: 1
                    sizes:
                      - db-s-1vcpu-1gb
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - db-s-4vcpu-8gb
                      - db-s-6vcpu-16gb
                      - db-s-8vcpu-32gb
                      - db-s-16vcpu-64gb
                      - m-2vcpu-16gb
                      - m-4vcpu-32gb
                      - m-8vcpu-64gb
                      - m-16vcpu-128gb
                      - m-24vcpu-192gb
                      - m-32vcpu-256gb
                  - num_nodes: 2
                    sizes:
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - db-s-4vcpu-8gb
                      - db-s-6vcpu-16gb
                      - db-s-8vcpu-32gb
                      - db-s-16vcpu-64gb
                      - m-2vcpu-16gb
                      - m-4vcpu-32gb
                      - m-8vcpu-64gb
                      - m-16vcpu-128gb
                      - m-24vcpu-192gb
                      - m-32vcpu-256gb
                  - num_nodes: 3
                    sizes:
                      - db-s-1vcpu-2gb
                      - db-s-2vcpu-4gb
                      - db-s-4vcpu-8gb
                      - db-s-6vcpu-16gb
                      - db-s-8vcpu-32gb
                      - db-s-16vcpu-64gb
                      - m-2vcpu-16gb
                      - m-4vcpu-32gb
                      - m-8vcpu-64gb
                      - m-16vcpu-128gb
                      - m-24vcpu-192gb
                      - m-32vcpu-256gb
            version_availability:
              kafka:
                - end_of_life: null
                  end_of_availability: '2024-07-18T00:00:00Z'
                  version: '3.6'
                - end_of_life: null
                  end_of_availability: '2025-01-17T00:00:00Z'
                  version: '3.7'
              mongodb:
                - end_of_life: '2024-10-01T07:00:00Z'
                  end_of_availability: null
                  version: '5.0'
                - end_of_life: '2025-07-01T07:00:00Z'
                  end_of_availability: null
                  version: '6.0'
                - end_of_life: '2026-08-01T07:00:00Z'
                  end_of_availability: null
                  version: '7.0'
              mysql:
                - end_of_life: null
                  end_of_availability: null
                  version: '8'
              opensearch:
                - end_of_life: null
                  end_of_availability: null
                  version: '1'
                - end_of_life: null
                  end_of_availability: null
                  version: '2'
              pg:
                - end_of_life: '2025-11-13T00:00:00Z'
                  end_of_availability: '2025-05-13T00:00:00Z'
                  version: '13'
                - end_of_life: '2026-11-12T00:00:00Z'
                  end_of_availability: '2026-05-12T00:00:00Z'
                  version: '14'
                - end_of_life: '2027-11-11T00:00:00Z'
                  end_of_availability: '2027-05-12T00:00:00Z'
                  version: '15'
                - end_of_life: '2028-11-09T00:00:00Z'
                  end_of_availability: '2028-05-09T00:00:00Z'
                  version: '16'
              redis:
                - end_of_life: null
                  end_of_availability: null
                  version: '7'
    database_clusters:
      description: A JSON object with a key of `databases`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              databases:
                type: array
                items:
                  $ref: '#/components/schemas/database_cluster'
          example:
            databases:
              - id: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
                name: backend
                engine: pg
                version: '10'
                connection:
                  uri: >-
                    postgres://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require
                  database: ''
                  host: backend-do-user-19081923-0.db.ondigitalocean.com
                  port: 25060
                  user: doadmin
                  password: wv78n3zpz42xezdk
                  ssl: true
                private_connection:
                  uri: >-
                    postgres://doadmin:wv78n3zpz42xezdk@private-backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require
                  database: ''
                  host: private-backend-do-user-19081923-0.db.ondigitalocean.com
                  port: 25060
                  user: doadmin
                  password: wv78n3zpz42xezdk
                  ssl: true
                users:
                  - name: doadmin
                    role: primary
                    password: wv78n3zpz42xezdk
                db_names:
                  - defaultdb
                num_nodes: 1
                region: nyc3
                status: online
                created_at: '2019-01-11T18:37:36Z'
                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
                size: db-s-2vcpu-4gb
                tags:
                  - production
                private_network_uuid: d455e75d-4858-4eec-8c95-da2f0a5f93a7
                version_end_of_life: '2023-11-09T00:00:00Z'
                version_end_of_availability: '2023-05-09T00:00:00Z'
                storage_size_mib: 61440
    database_cluster:
      description: A JSON object with a key of `database`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              database:
                $ref: '#/components/schemas/database_cluster'
            required:
              - database
          example:
            database:
              id: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
              name: backend
              engine: pg
              version: '14'
              semantic_version: '14.5'
              connection:
                uri: >-
                  postgres://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require
                database: ''
                host: backend-do-user-19081923-0.db.ondigitalocean.com
                port: 25060
                user: doadmin
                password: wv78n3zpz42xezdk
                ssl: true
              private_connection:
                uri: >-
                  postgres://doadmin:wv78n3zpz42xezdk@private-backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require
                database: ''
                host: private-backend-do-user-19081923-0.db.ondigitalocean.com
                port: 25060
                user: doadmin
                password: wv78n3zpz42xezdk
                ssl: true
              standby_connection:
                uri: >-
                  postgres://doadmin:wv78n3zpz42xezdk@replica-backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require
                database: ''
                host: replica-backend-do-user-19081923-0.db.ondigitalocean.com
                port: 25060
                user: doadmin
                password: wv78n3zpz42xezdk
                ssl: true
              standby_private_connection:
                uri: >-
                  postgres://doadmin:wv78n3zpz42xezdk@private-replica-backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require
                database: ''
                host: >-
                  private-replica-backend-do-user-19081923-0.db.ondigitalocean.com
                port: 25060
                user: doadmin
                password: wv78n3zpz42xezdk
                ssl: true
              users:
                - name: doadmin
                  role: primary
                  password: wv78n3zpz42xezdk
              db_names:
                - defaultdb
              num_nodes: 2
              region: nyc3
              status: creating
              created_at: '2019-01-11T18:37:36Z'
              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
              size: db-s-2vcpu-4gb
              tags:
                - production
              private_network_uuid: d455e75d-4858-4eec-8c95-da2f0a5f93a7
              version_end_of_life: '2023-11-09T00:00:00Z'
              version_end_of_availability: '2023-05-09T00:00:00Z'
              storage_size_mib: 61440
    database_config:
      description: A JSON object with a key of `config`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              config:
                anyOf:
                  - $ref: '#/components/schemas/mysql_advanced_config'
                  - $ref: '#/components/schemas/postgres_advanced_config'
                  - $ref: '#/components/schemas/redis_advanced_config'
                  - $ref: '#/components/schemas/kafka_advanced_config'
                  - $ref: '#/components/schemas/opensearch_advanced_config'
                  - $ref: '#/components/schemas/mongo_advanced_config'
            required:
              - config
          example:
            config:
              sql_mode: >-
                ANSI,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,STRICT_ALL_TABLES
              sql_require_primary_key: true
    ca:
      description: A JSON object with a key of `ca`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              ca:
                $ref: '#/components/schemas/ca'
            required:
              - ca
          example:
            ca:
              certificate: >-
                LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVRVENDQXFtZ0F3SUJBZ0lVRUZZWTdBWFZQS0Raam9jb1lpMk00Y0dvcU0wd0RRWUpLb1pJaHZjTkFRRU0KQlFBd09qRTRNRFlHQTFVRUF3d3ZOek0zT1RaaE1XRXRaamhrTUMwME9HSmpMV0V4Wm1NdFpqbGhNVFZsWXprdwpORGhsSUZCeWIycGxZM1FnUTBFd0hoY05NakF3TnpFM01UVTFNREEyV2hjTk16QXdOekUxTVRVMU1EQTJXakE2Ck1UZ3dOZ1lEVlFRRERDODNNemM1Tm1FeFlTMW1PR1F3TFRRNFltTXRZVEZtWXkxbU9XRXhOV1ZqT1RBME9HVWcKVUhKdmFtVmpkQ0JEUVRDQ0FhSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnR1BBRENDQVlvQ2dnR0JBTVdScXhycwpMZnpNdHZyUmxKVEw4MldYMVBLZkhKbitvYjNYcmVBY3FZd1dBUUp2Q3IycmhxSXZieVZzMGlaU0NzOHI4c3RGClljQ0R1bkxJNmUwTy9laERZYTBIT2RrMkFFRzE1ckVOVmNha2NSczcyQWlHVHNrdkNXS2VkUjFTUWswVWt0WCsKQUg4S1ExS3F5bzNtZ2Y2cVV1WUpzc3JNTXFselk3YTN1RVpEb2ZqTjN5Q3MvM21pTVJKcVcyNm1JV0IrUUlEbAo5YzdLRVF5MTZvdCtjeHVnd0lLMm9oZHMzaFY1bjBKMFVBM0I3QWRBdXY5aUl5L3JHaHlTNm5CNTdaWm9JZnAyCnFybXdOY0UrVjlIdXhQSGtRVjFOQjUwOFFudWZ4Z0E5VCtqU2VrdGVUbWFORkxqNjFXL3BtcndrTytOaWFXUTIKaGgzVXBKOEozY1BoNkErbHRnUmpSV2NEb2lsYVNwRVVpU09WemNNYVFvalZKYVJlNk9NbnZYc29NaSs3ZzdneApWcittQ0lUcGcvck9DaXpBWWQ2UFAxLzdYTjk1ZXNmU2tBQnM5c3hJakpjTUFqbDBYTEFzRmtGZVdyeHNIajlVCmJnaDNWYXdtcnpUeXhZT0RQcXV1cS9JcGlwc0RRT3Fpb2ZsUStkWEJJL3NUT0NNbVp6K0pNcG5HYXdJREFRQUIKb3o4d1BUQWRCZ05WSFE0RUZnUVVSekdDRlE3WEtUdHRDN3JzNS8ydFlQcExTZGN3RHdZRFZSMFRCQWd3QmdFQgovd0lCQURBTEJnTlZIUThFQkFNQ0FRWXdEUVlKS29aSWh2Y05BUUVNQlFBRGdnR0JBSWFKQ0dSVVNxUExtcmcvCmk3MW10b0NHUDdzeG1BVXVCek1oOEdrU25uaVdaZnZGMTRwSUtqTlkwbzVkWmpHKzZqK1VjalZtK0RIdGE1RjYKOWJPeEk5S0NFeEI1blBjRXpMWjNZYitNOTcrellxbm9zUm85S21DVFJBb2JrNTZ0WU1FS1h1aVJja2tkMm1yUQo4cGw2N2xxdThjM1V4c0dHZEZVT01wMkk3ZTNpdUdWVm5UR0ZWM3JQZUdaQ0J3WGVyUUQyY0F4UjkzS3BnWVZ2ClhUUzk5dnpSbm1HOHhhUm9EVy9FbEdXZ2xWd0Q5a1JrbXhUUkdoYTdDWVZCcjFQVWY2dVVFVjhmVFIxc1hFZnIKLytMR1JoSVVsSUhWT3l2Yzk3YnZYQURPbWF1MWZDVE5lWGtRdTNyZnZFSlBmaFlLeVIwT0V3eWVvdlhRNzl0LwpTV2ZGTjBreU1Pc1UrNVNIdHJKSEh1eWNWcU0yQlVVK083VjM1UnNwOU9MZGRZMFFVbTZldFpEVEhhSUhYYzRRCnl1Rm1OL1NhSFZtNE0wL3BTVlJQdVd6TmpxMnZyRllvSDRtbGhIZk95TUNJMjc2elE2aWhGNkdDSHlkOUJqajcKUm1UWGEyNHM3NWhmSi9YTDV2bnJSdEtpVHJlVHF6V21EOVhnUmNMQ0gyS1hJaVRtSWc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    online_migration:
      description: A JSON object.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/online_migration'
          example:
            id: 77b28fc8-19ff-11eb-8c9c-c68e24557488
            status: running
            created_at: '2020-10-29T15:57:38Z'
    accepted:
      description: >-
        The does not indicate the success or failure of any operation, just that
        the request has been accepted for processing.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
    firewall_rules:
      description: A JSON object with a key of `rules`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              rules:
                type: array
                items:
                  $ref: '#/components/schemas/firewall_rule'
          example:
            rules:
              - uuid: 79f26d28-ea8a-41f2-8ad8-8cfcdd020095
                cluster_uuid: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
                type: k8s
                value: ff2a6c52-5a44-4b63-b99c-0e98e7a63d61
                created_at: '2019-11-14T20:30:28Z'
              - uuid: adfe81a8-0fa1-4e2d-973f-06aa5af19b44
                cluster_uuid: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
                type: ip_addr
                value: 192.168.1.1
                created_at: '2019-11-14T20:30:28Z'
              - uuid: b9b42276-8295-4313-b40f-74173a7f46e6
                cluster_uuid: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
                type: droplet
                value: '163973392'
                created_at: '2019-11-14T20:30:28Z'
              - uuid: 718d23e0-13d7-4129-8a00-47fb72ee0deb
                cluster_uuid: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
                type: tag
                value: backend
                created_at: '2019-11-14T20:30:28Z'
    database_backups:
      description: A JSON object with a key of `database_backups`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              backups:
                type: array
                items:
                  $ref: '#/components/schemas/backup'
            required:
              - backups
          example:
            backups:
              - created_at: '2019-01-11T18:42:27Z'
                size_gigabytes: 0.03357696
              - created_at: '2019-01-12T18:42:29Z'
                size_gigabytes: 0.03364864
    database_replicas:
      description: A JSON object with a key of `replicas`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              replicas:
                type: array
                items:
                  $ref: '#/components/schemas/database_replica'
          example:
            replicas:
              - name: read-nyc3-01
                connection:
                  uri: ''
                  database: defaultdb
                  host: read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com
                  port: 25060
                  user: doadmin
                  password: wv78n3zpz42xezdk
                  ssl: true
                private_connection:
                  uri: >-
                    postgres://doadmin:wv78n3zpz42xezdk@private-read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require
                  database: ''
                  host: >-
                    private-read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com
                  port: 25060
                  user: doadmin
                  password: wv78n3zpz42xezdk
                  ssl: true
                region: nyc3
                status: online
                created_at: '2019-01-11T18:37:36Z'
    database_replica:
      description: A JSON object with a key of `replica`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              replica:
                $ref: '#/components/schemas/database_replica'
          example:
            replica:
              name: read-nyc3-01
              connection:
                uri: ''
                database: defaultdb
                host: read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com
                port: 25060
                user: doadmin
                password: wv78n3zpz42xezdk
                ssl: true
              private_connection:
                uri: >-
                  postgres://doadmin:wv78n3zpz42xezdk@private-read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require
                database: ''
                host: private-read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com
                port: 25060
                user: doadmin
                password: wv78n3zpz42xezdk
                ssl: true
              region: nyc3
              status: online
              created_at: '2019-01-11T18:37:36Z'
    events_logs:
      description: A JSON object with a key of `events`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              events:
                type: array
                items:
                  $ref: '#/components/schemas/events_logs'
          example:
            events:
              - id: pe8u2huh
                cluster_name: customer-events
                event_type: cluster_create
                create_time: '2020-10-29T15:57:38Z'
              - id: pe8ufefuh
                cluster_name: customer-events
                event_type: cluster_update
                create_time: '2023-10-30T15:57:38Z'
    users:
      description: A JSON object with a key of `users`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              users:
                type: array
                items:
                  $ref: '#/components/schemas/database_user'
          example:
            users:
              - name: app-01
                role: normal
                password: jge5lfxtzhx42iff
              - name: doadmin
                role: primary
                password: wv78n3zpz42xezd
    user:
      description: A JSON object with a key of `user`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              user:
                $ref: '#/components/schemas/database_user'
            required:
              - user
          examples:
            New User:
              value:
                user:
                  name: app-01
                  role: normal
                  password: jge5lfxtzhx42iff
            New User with MySQL Auth Plugin:
              value:
                user:
                  name: app-02
                  role: normal
                  password: wv78n3zpz42xezdk
                  mysql_settings:
                    auth_plugin: mysql_native_password
            New User for Postgres with replication rights:
              value:
                user:
                  name: app-02
                  role: normal
                  password: wv78n3zpz42xezdk
                  settings:
                    pg_allow_replication: true
            Kafka User:
              value:
                user:
                  name: app-03
                  role: normal
                  password: qv78n3zes42xezdk
                  access_cert: >-
                    -----BEGIN CERTIFICATE-----

                    MIIFFjCCA/6gAwIBAgISA0AznUJmXhu08/89ZuSPC/kRMA0GCSqGSIb3DQEBCwUA

                    MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD

                    ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjExMjQwMDIzMDBaFw0x

                    NzAyMjIwMDIzMDBaMCQxIjAgBgNVBAMTGWNsb3VkLmFuZHJld3NvbWV0aGluZy5j

                    b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBIZMz8pnK6V52SVf+

                    CYssOfCQHAx5f0Ou5rYbq3xNh8VWHIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1DwGb

                    8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86XwrE4

                    oFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3wZ2mz

                    Z03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1FZRna

                    k/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFXfqqb

                    QwuRAgMBAAGjggIaMIICFjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB

                    BQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLsAFcxAhFX1

                    MbCnzr9hEO5rL4jqMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAG

                    CCsGAQUFBwEBBGQwYjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgzLmxl

                    dHNlbmNyeXB0Lm9yZy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5s

                    ZXRzZW5jcnlwdC5vcmcvMCQGA1UdEQQdMBuCGWNsb3VkLmFuZHJld3NvbWV0aGlu

                    Zy5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgWrgeYGCysGAQQBgt8TAQEBMIHW

                    MCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYB

                    BQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1

                    cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSQ2ziBhY2NvcmRhbmNlIHdp

                    dGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNl

                    bmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAOZVQvrjM

                    PKXLARTjB5XsgfyDN3/qwLl7SmwGkPe+B+9FJpfScYG1JzVuCj/SoaPaK34G4x/e

                    iXwlwOXtMOtqjQYzNu2Pr2C+I+rVmaxIrCUXFmC205IMuUBEeWXG9Y/HvXQLPabD

                    D3Gdl5+Feink9SDRP7G0HaAwq13hI7ARxkL9p+UIY39X0dV3WOboW2Re8nrkFXJ7

                    q9Z6shK5QgpBfsLjtjNsQzaGV3ve1gOg25aTJGearBWOvEjJNA1wGMoKVXOtYwm/

                    WyWoVdCQ8HmconcbJB6xc0UZ1EjvzRr5ZIvSa5uHZD0L3m7/kpPWlAlFJ7hHASPu

                    UlF1zblDmg2Iaw==

                    -----END CERTIFICATE-----
                  access_key: >-
                    -----BEGIN PRIVATE KEY-----

                    MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBIZMz8pnK6V52

                    SVf+CYssOfCQHAx5f0Ou5rYbq3xNh8VHAIYJCQ1QxQIxKSP6+uODSYrb2KWyurP1

                    DwGb8OYm0J3syEDtCUQik1cpCzpeNlAZ2f8FzXyYQAqPopxdRpsFz8DtZnVvu86X

                    wrE4oFPl9MReICmZfBNWylpV5qgFPoXyJ70ZAsTm3cEe3n+LBXEnY4YrVDRWxA3w

                    Z2mzZ03HZ1hHrxK9CMnS829U+8sK+UneZpCO7yLRPuxwhmps0wpK/YuZZfRAKF1F

                    ZRnak/SIQ28rnWufmdg16YqqHgl5JOgnb3aslKRvL4dI2Gwnkd2IHtpZnTR0gxFX

                    fqqbQwuRAgMBAAECggEBAILLmkW0JzOkmLTDNzR0giyRkLoIROqDpfLtjKdwm95l

                    9NUBJcU4vCvXQITKt/NhtnNTexcowg8pInb0ksJpg3UGE+4oMNBXVi2UW5MQZ5cm

                    cVkQqgXkBF2YAY8FMaB6EML+0En2+dGR/3gIAr221xsFiXe1kHbB8Nb2c/d5HpFt

                    eRpLVJnK+TxSr78PcZA8DDGlSgwvgimdAaFUNO2OqB9/0E9UPyKk2ycdff/Z6ldF

                    0hkCLtdYTTl8Kf/OwjcuTgmA2O3Y8/CoQX/L+oP9Rvt9pWCEfuebiOmHJVPO6Y6x

                    gtQVEXwmF1pDHH4Qtz/e6UZTdYeMl9G4aNO2CawwcaYECgYEA57imgSOG4XsJLRh

                    GGncV9R/xhy4AbDWLtAMzQRX4ktvKCaHWyQV2XK2we/cu29NLv2Y89WmerTNPOU+

                    P8+pB31uty2ELySVn15QhKpQClVEAlxCnnNjXYrii5LOM80+lVmxvQwxVd8Yz8nj

                    IntyioXNBEnYS7V2RxxFGgFun1cCgYEA1V3W+Uyamhq8JS5EY0FhyGcXdHd70K49

                    W1ou7McIpncf9tM9acLS1hkI98rd2T69Zo8mKoV1V2hjFaKUYfNys6tTkYWeZCcJ

                    3rW44j9DTD+FmmjcX6b8DzfybGLehfNbCw6n67/r45DXIV/fk6XZfkx6IEGO4ODt

                    Nfnvx4TuI1cCgYBACDiKqwSUvmkUuweOo4IuCxyb5Ee8v98P5JIE/VRDxlCbKbpx

                    pxEam6aBBQVcDi+n8o0H3WjjlKc6UqbW/01YMoMrvzotxNBLz8Y0QtQHZvR6KoCG

                    RKCKstxTcWflzKuknbqN4RapAhNbKBDJ8PMSWfyDWNyaXzSmBdvaidbF1QKBgDI0

                    o4oD0Xkjg1QIYAUu9FBQmb9JAjRnW36saNBEQS/SZg4RRKknM683MtoDvVIKJk0E

                    sAlfX+4SXQZRPDMUMtA+Jyrd0xhj6zmhbwClvDMr20crF3fWdgcqtft1BEFmsuyW

                    JUMe5OWmRkjPI2+9ncDPRAllA7a8lnSV/Crph5N/AoGBAIK249temKrGe9pmsmAo

                    QbNuYSmwpnMoAqdHTrl70HEmK7ob6SIVmsR8QFAkH7xkYZc4Bxbx4h1bdpozGB+/

                    AangbiaYJcAOD1QyfiFbflvI1RFeHgrk7VIafeSeQv6qu0LLMi2zUbpgVzxt78Wg

                    eTuK2xNR0PIM8OI7pRpgyj1I

                    -----END PRIVATE KEY-----
                  settings:
                    acl:
                      - id: acl128aaaa99239
                        permission: produceconsume
                        topic: customer-events
                      - id: acl293098flskdf
                        permission: produce
                        topic: customer-events.*
                      - id: acl128ajei20123
                        permission: consume
                        topic: customer-events
    databases:
      description: A JSON object with a key of `databases`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              dbs:
                type: array
                items:
                  $ref: '#/components/schemas/database'
          example:
            dbs:
              - name: alpha
              - name: defaultdb
    database:
      description: A JSON object with a key of `db`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              db:
                $ref: '#/components/schemas/database'
            required:
              - db
          example:
            db:
              name: alpha
    connection_pools:
      description: A JSON object with a key of `pools`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/connection_pools'
          example:
            pools:
              - user: doadmin
                name: reporting-pool
                size: 10
                db: defaultdb
                mode: session
                connection:
                  uri: >-
                    postgres://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25061/foo?sslmode=require
                  database: foo
                  host: backend-do-user-19081923-0.db.ondigitalocean.com
                  port: 25061
                  user: doadmin
                  password: wv78n3zpz42xezdk
                  ssl: true
              - user: doadmin
                name: backend-pool
                size: 10
                db: defaultdb
                mode: transaction
                connection:
                  uri: >-
                    postgres://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25061/backend-pool?sslmode=require
                  database: backend-pool
                  host: backend-do-user-19081923-0.db.ondigitalocean.com
                  port: 25061
                  user: doadmin
                  password: wv78n3zpz42xezdk
                  ssl: true
    connection_pool:
      description: A JSON object with a key of `pool`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              pool:
                $ref: '#/components/schemas/connection_pool'
            required:
              - pool
          example:
            pool:
              user: doadmin
              name: backend-pool
              size: 10
              db: defaultdb
              mode: transaction
              connection:
                uri: >-
                  postgres://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25061/backend-pool?sslmode=require
                database: backend-pool
                host: backend-do-user-19081923-0.db.ondigitalocean.com
                port: 25061
                user: doadmin
                password: wv78n3zpz42xezdk
                ssl: true
    eviction_policy_response:
      description: A JSON string with a key of `eviction_policy`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            required:
              - eviction_policy
            properties:
              eviction_policy:
                $ref: '#/components/schemas/eviction_policy_model'
    sql_mode:
      description: A JSON string with a key of `sql_mode`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/sql_mode'
          example:
            sql_mode: >-
              ANSI,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,STRICT_ALL_TABLES
    kafka_topics:
      description: A JSON object with a key of `topics`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              topics:
                type: array
                items:
                  $ref: '#/components/schemas/kafka_topic'
          example:
            topics:
              - name: customer-events
                state: active
                replication_factor: 2
                partition_count: 3
              - name: engineering-events
                state: configuring
                replication_factor: 2
                partition_count: 10
    kafka_topic:
      description: A JSON object with a key of `topic`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              topic:
                $ref: '#/components/schemas/kafka_topic_verbose'
          example:
            topic:
              name: customer-events
              partitions:
                - size: 4096
                  id: 0
                  in_sync_replicas: 3
                  earliest_offset: 0
                  consumer_groups:
                    - name: consumer-group-1
                      offset: 0
                    - name: consumer-group-2
                      offset: 1
                - size: 4096
                  id: 1
                  in_sync_replicas: 3
                  earliest_offset: 0
                  consumer_groups: null
              replication_factor: 3
              state: active
              config:
                cleanup_policy: delete
                compression_type: producer
                delete_retention_ms: 86400000
                file_delete_delay_ms: 60000
                flush_messages: 9223372036854776000
                flush_ms: 9223372036854776000
                index_interval_bytes: 4096
                max_compaction_lag_ms: 9223372036854776000
                max_message_bytes: 1048588
                message_down_conversion_enable: true
                message_format_version: 3.0-IV1
                message_timestamp_difference_max_ms: 9223372036854776000
                message_timestamp_type: create_time
                min_cleanable_dirty_ratio: 0.5
                min_compaction_lag_ms: 0
                min_insync_replicas: 1
                preallocate: false
                retention_bytes: -1
                retention_ms: 604800000
                segment_bytes: 209715200
                segment_index_bytes: 10485760
                segment_jitter_ms: 0
                segment_ms: 604800000
    logsinks:
      description: A JSON object with a key of `sinks`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              sinks:
                type: array
                items:
                  allOf:
                    - $ref: '#/components/schemas/logsink_verbose'
                  required:
                    - sink_id
                    - sink_name
                    - sink_type
                    - config
          example:
            sinks:
              - sink_id: 799990b6-d551-454b-9ffe-b8618e9d6272
                sink_name: logs-sink-1
                sink_type: rsyslog
                config:
                  server: 192.168.0.1
                  port: 514
                  tls: false
                  format: rfc5424
              - sink_id: d6e95157-5f58-48d0-9023-8cfb409d102a
                sink_name: logs-sink-2
                sink_type: rsyslog
                config:
                  server: 192.168.10.1
                  port: 514
                  tls: false
                  format: rfc3164
    logsink:
      description: A JSON object with a key of `sink`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              sink:
                allOf:
                  - $ref: '#/components/schemas/logsink_verbose'
                required:
                  - sink_id
                  - sink_name
                  - sink_type
                  - config
          examples:
            Create an opensearch logsink:
              value:
                sink:
                  sink_id: dfcc9f57d86bf58e321c2c6c31c7a971be244ac7
                  sink_name: logs-sink
                  sink_type: opensearch
                  config:
                    url: https://user:passwd@192.168.0.1:25060
                    index_prefix: opensearch-logs
                    index_days_max: 5
            Create an elasticsearch logsink:
              value:
                sink:
                  sink_id: dfcc9f57d86bf58e321c2c6c31c7a971be244ac7
                  sink_name: logs-sink
                  sink_type: elasticsearch
                  config:
                    url: https://user:passwd@192.168.0.1:25060
                    index_prefix: elasticsearch-logs
                    index_days_max: 5
            Create a rsyslog logsink:
              value:
                sink:
                  sink_id: dfcc9f57d86bf58e321c2c6c31c7a971be244ac7
                  sink_name: logs-sink
                  sink_type: rsyslog
                  config:
                    server: 192.168.0.1
                    port: 514
                    tls: false
                    format: rfc5424
    database_metrics_auth:
      description: A JSON object with a key of `credentials`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              credentials:
                $ref: '#/components/schemas/database_metrics_credentials'
          example:
            credentials:
              basic_auth_username: username
              basic_auth_password: password
    opensearch_indexes:
      description: A JSON object with a key of `indexes`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              indexes:
                type: array
                items:
                  $ref: '#/components/schemas/opensearch_index'
          example:
            indexes:
              - index_name: sample-data
                number_of_shards: 2
                number_of_replicas: 3
                size: 208
                created_time: '2021-01-01T00:00:00Z'
                status: open
                health: green
              - index_name: logs-*
                number_of_shards: 2
                number_of_replicas: 3
                size: 208
                created_time: '2021-01-01T00:00:00Z'
                status: open
                health: green
    all_domains_response:
      description: >-
        The response will be a JSON object with a key called `domains`. The
        value of this will be an array of Domain objects, each of which contain
        the standard domain attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  domains:
                    type: array
                    items:
                      $ref: '#/components/schemas/domain'
                    description: Array of volumes.
                required:
                  - domains
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              domains:
                - name: example.com
                  ttl: 1800
                  zone_file: >
                    $ORIGIN example.com.

                    $TTL 1800

                    example.com. IN SOA ns1.digitalocean.com.
                    hostmaster.example.com. 1415982609 10800 3600 604800 1800

                    example.com. 1800 IN NS ns1.digitalocean.com.

                    example.com. 1800 IN NS ns2.digitalocean.com.

                    example.com. 1800 IN NS ns3.digitalocean.com.

                    example.com. 1800 IN A 1.2.3.4
              links: {}
              meta:
                total: 1
    create_domain_response:
      description: >-
        The response will be a JSON object with a key called `domain`. The value
        of this will be an object that contains the standard attributes
        associated with a domain.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              domain:
                $ref: '#/components/schemas/domain'
            example:
              domain:
                name: example.com
                ttl: 1800
                zone_file: null
    existing_domain:
      description: >-
        The response will be a JSON object with a key called `domain`. The value
        of this will be an object that contains the standard attributes defined
        for a domain.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              domain:
                $ref: '#/components/schemas/domain'
            example:
              domain:
                name: example.com
                ttl: 1800
                zone_file: >
                  $ORIGIN example.com.

                  $TTL 1800

                  example.com. IN SOA ns1.digitalocean.com.
                  hostmaster.example.com. 1415982611 10800 3600 604800 1800

                  example.com. 1800 IN NS ns1.digitalocean.com.

                  example.com. 1800 IN NS ns2.digitalocean.com.

                  example.com. 1800 IN NS ns3.digitalocean.com.

                  example.com. 1800 IN A 1.2.3.4
    all_domain_records_response:
      description: >-
        The response will be a JSON object with a key called `domain_records`.
        The value of this will be an array of domain record objects, each of
        which contains the standard domain record attributes. For attributes
        that are not used by a specific record type, a value of `null` will be
        returned. For instance, all records other than SRV will have `null` for
        the `weight` and `port` attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  domain_records:
                    type: array
                    items:
                      $ref: '#/components/schemas/domain_record'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          examples:
            All Domain Records:
              $ref: '#/components/examples/domain_records_all'
    created_domain_record:
      description: >-
        The response body will be a JSON object with a key called
        `domain_record`. The value of this will be an object representing the
        new record. Attributes that are not applicable for the record type will
        be set to `null`. An `id` attribute is generated for each record as part
        of the object.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              domain_record:
                $ref: '#/components/schemas/domain_record'
            example:
              domain_record:
                id: 28448433
                type: A
                name: www
                data: 162.10.66.0
                priority: null
                port: null
                ttl: 1800
                weight: null
                flags: null
                tag: null
    domain_record:
      description: >-
        The response will be a JSON object with a key called `domain_record`.
        The value of this will be a domain record object which contains the
        standard domain record attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              domain_record:
                $ref: '#/components/schemas/domain_record'
            example:
              domain_record:
                id: 3352896
                type: A
                name: blog
                data: 162.10.66.0
                priority: null
                port: null
                ttl: 1800
                weight: null
                flags: null
                tag: null
    all_droplets:
      description: A JSON object with a key of `droplets`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  droplets:
                    type: array
                    items:
                      $ref: '#/components/schemas/droplet'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          examples:
            All Droplets:
              $ref: '#/components/examples/droplets_all'
            Droplets Filtered By Tag:
              $ref: '#/components/examples/droplets_tagged'
    droplet_create:
      description: Accepted
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            oneOf:
              - title: Single Droplet Response
                type: object
                properties:
                  droplet:
                    $ref: '#/components/schemas/droplet'
                  links:
                    type: object
                    properties:
                      actions:
                        type: array
                        items:
                          $ref: '#/components/schemas/action_link'
                required:
                  - droplet
                  - links
              - title: Multiple Droplet Response
                type: object
                properties:
                  droplets:
                    type: array
                    items:
                      $ref: '#/components/schemas/droplet'
                  links:
                    type: object
                    properties:
                      actions:
                        type: array
                        items:
                          $ref: '#/components/schemas/action_link'
                required:
                  - droplets
                  - links
          examples:
            Single Droplet Create Response:
              $ref: '#/components/examples/droplet_create_response'
            Multiple Droplet Create Response:
              $ref: '#/components/examples/droplet_multi_create_response'
    no_content_with_content_type:
      description: >-
        The action was successful and the response body is empty. This response
        has content-type set.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
        content-type:
          $ref: '#/components/headers/content-type'
    existing_droplet:
      description: >
        The response will be a JSON object with a key called `droplet`. This
        will be

        set to a JSON object that contains the standard Droplet attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              droplet:
                $ref: '#/components/schemas/droplet'
          examples:
            Single Droplet:
              $ref: '#/components/examples/droplet_single'
    all_droplet_backups:
      description: A JSON object with an `backups` key.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  backups:
                    type: array
                    items:
                      $ref: '#/components/schemas/droplet_snapshot'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          example:
            backups:
              - id: 67539192
                name: web-01- 2020-07-29
                distribution: Ubuntu
                slug: null
                public: false
                regions:
                  - nyc3
                created_at: '2020-07-29T01:44:35Z'
                min_disk_size: 50
                size_gigabytes: 2.34
                type: backup
            links: {}
            meta:
              total: 1
    all_droplet_snapshots:
      description: A JSON object with an `snapshots` key.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  snapshots:
                    type: array
                    items:
                      $ref: '#/components/schemas/droplet_snapshot'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          example:
            snapshots:
              - id: 6372321
                name: web-01-1595954862243
                created_at: '2020-07-28T16:47:44Z'
                regions:
                  - nyc3
                  - sfo3
                min_disk_size: 25
                size_gigabytes: 2.34
                type: snapshot
            links: {}
            meta:
              total: 1
    all_droplet_actions:
      description: A JSON object with an `actions` key.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  actions:
                    type: array
                    items:
                      $ref: '#/components/schemas/action'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          example:
            actions:
              - id: 982864273
                status: completed
                type: create
                started_at: '2020-07-20T19:37:30Z'
                completed_at: '2020-07-20T19:37:45Z'
                resource_id: 3164444
                resource_type: droplet
                region:
                  name: New York 3
                  slug: nyc3
                  features:
                    - private_networking
                    - backups
                    - ipv6
                    - metadata
                    - install_agent
                    - image_transfer
                  available: true
                  sizes:
                    - s-1vcpu-1gb
                    - s-1vcpu-2gb
                    - s-3vcpu-1gb
                    - s-2vcpu-2gb
                    - s-1vcpu-3gb
                    - s-2vcpu-4gb
                    - s-4vcpu-8gb
                    - m-1vcpu-8gb
                    - s-6vcpu-16gb
                    - s-8vcpu-32gb
                    - s-12vcpu-48gb
                region_slug: nyc3
            links: {}
            meta:
              total: 1
    droplet_action:
      description: The response will be a JSON object with a key called `action`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              action:
                $ref: '#/components/schemas/action'
    droplet_actions_response:
      description: The response will be a JSON object with a key called `actions`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              actions:
                type: array
                items:
                  $ref: '#/components/schemas/action'
    all_kernels:
      description: A JSON object that has a key called `kernels`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  kernels:
                    type: array
                    items:
                      $ref: '#/components/schemas/kernel'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          example:
            kernels:
              - id: 7515
                name: DigitalOcean GrubLoader v0.2 (20160714)
                version: 2016.07.13-DigitalOcean_loader_Ubuntu
            links:
              pages:
                next: >-
                  https://api.digitalocean.com/v2/droplets/3164444/kernels?page=2&per_page=1
                last: >-
                  https://api.digitalocean.com/v2/droplets/3164444/kernels?page=171&per_page=1
            meta:
              total: 171
    all_firewalls:
      description: A JSON object that has a key called `firewalls`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  firewalls:
                    type: array
                    items:
                      $ref: '#/components/schemas/firewall'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          example:
            firewalls:
              - id: bb4b2611-3d72-467b-8602-280330ecd65c
                status: succeeded
                created_at: '2020-05-23T21:24:00Z'
                pending_changes:
                  - droplet_id: 8043964
                    removing: true
                    status: waiting
                name: firewall
                droplet_ids:
                  - 89989
                  - 33322
                tags:
                  - base-image
                  - prod
                inbound_rules:
                  - protocol: udp
                    ports: 8000-9000
                    sources:
                      addresses:
                        - 1.2.3.4
                        - 18.0.0.0/8
                      droplet_ids:
                        - 8282823
                        - 3930392
                      load_balancer_uids:
                        - 4de7ac8b-495b-4884-9a69-1050c6793cd6
                      tags:
                        - base-image
                        - dev
                outbound_rules:
                  - protocol: tcp
                    ports: 7000-9000
                    destinations:
                      addresses:
                        - 1.2.3.4
                        - 18.0.0.0/8
                      droplet_ids:
                        - 3827493
                        - 213213
                      load_balancer_uids:
                        - 4de7ac8b-495b-4884-9a69-1050c6793cd6
                      tags:
                        - base-image
                        - prod
            links:
              pages: {}
            meta:
              total: 1
    neighbor_droplets:
      description: A JSON object with an `droplets` key.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  droplets:
                    type: array
                    items:
                      $ref: '#/components/schemas/droplet'
    associated_resources_list:
      description: >-
        A JSON object containing `snapshots`, `volumes`, and `volume_snapshots`
        keys.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  reserved_ips:
                    type: array
                    items:
                      $ref: '#/components/schemas/associated_resource'
                  floating_ips:
                    type: array
                    items:
                      $ref: '#/components/schemas/associated_resource'
                  snapshots:
                    type: array
                    items:
                      $ref: '#/components/schemas/associated_resource'
                  volumes:
                    type: array
                    items:
                      $ref: '#/components/schemas/associated_resource'
                  volume_snapshots:
                    type: array
                    items:
                      $ref: '#/components/schemas/associated_resource'
          example:
            reserved_ips:
              - id: '6186916'
                name: 45.55.96.47
                cost: '4.00'
            floating_ips:
              - id: '6186916'
                name: 45.55.96.47
                cost: '4.00'
            snapshots:
              - id: '61486916'
                name: ubuntu-s-1vcpu-1gb-nyc1-01-1585758823330
                cost: '0.05'
            volumes:
              - id: ba49449a-7435-11ea-b89e-0a58ac14480f
                name: volume-nyc1-01
                cost: '10.00'
            volume_snapshots:
              - id: edb0478d-7436-11ea-86e6-0a58ac144b91
                name: volume-nyc1-01-1585758983629
                cost: '0.04'
    associated_resources_status:
      description: >-
        A JSON object containing containing the status of a request to destroy a
        Droplet and its associated resources.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/associated_resource_status'
          example:
            droplet:
              id: '187000742'
              name: ubuntu-s-1vcpu-1gb-nyc1-01
              destroyed_at: '2020-04-01T18:11:49Z'
            resources:
              reserved_ips:
                - id: '6186916'
                  name: 45.55.96.47
                  destroyed_at: '2020-04-01T18:11:44Z'
              floating_ips:
                - id: '6186916'
                  name: 45.55.96.47
                  destroyed_at: '2020-04-01T18:11:44Z'
              snapshots:
                - id: '61486916'
                  name: ubuntu-s-1vcpu-1gb-nyc1-01-1585758823330
                  destroyed_at: '2020-04-01T18:11:44Z'
              volumes: []
              volume_snapshots:
                - id: edb0478d-7436-11ea-86e6-0a58ac144b91
                  name: volume-nyc1-01-1585758983629
                  destroyed_at: '2020-04-01T18:11:44Z'
            completed_at: '2020-04-01T18:11:49Z'
            failures: 0
    conflict:
      description: Conflict
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: conflict
            message: The request could not be completed due to a conflict.
    list_firewalls_response:
      description: >-
        To list all of the firewalls available on your account, send a GET
        request to `/v2/firewalls`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  firewalls:
                    type: array
                    items:
                      $ref: '#/components/schemas/firewall'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          example:
            firewalls:
              - id: fb6045f1-cf1d-4ca3-bfac-18832663025b
                name: firewall
                status: succeeded
                inbound_rules:
                  - protocol: tcp
                    ports: '80'
                    sources:
                      load_balancer_uids:
                        - 4de7ac8b-495b-4884-9a69-1050c6793cd6
                  - protocol: tcp
                    ports: '22'
                    sources:
                      tags:
                        - gateway
                      addresses:
                        - 18.0.0.0/8
                outbound_rules:
                  - protocol: tcp
                    ports: '80'
                    destinations:
                      addresses:
                        - 0.0.0.0/0
                        - '::/0'
                created_at: '2017-05-23T21:23:59Z'
                droplet_ids:
                  - 8043964
                tags: []
                pending_changes: []
            links: {}
            meta:
              total: 1
    create_firewall_response:
      description: >-
        The response will be a JSON object with a firewall key. This will be set
        to an object containing the standard firewall attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              firewall:
                $ref: '#/components/schemas/firewall'
          example:
            firewall:
              id: bb4b2611-3d72-467b-8602-280330ecd65c
              name: firewall
              status: waiting
              inbound_rules:
                - protocol: tcp
                  ports: '80'
                  sources:
                    load_balancer_uids:
                      - 4de7ac8b-495b-4884-9a69-1050c6793cd6
                - protocol: tcp
                  ports: '22'
                  sources:
                    tags:
                      - gateway
                    addresses:
                      - 18.0.0.0/8
              outbound_rules:
                - protocol: tcp
                  ports: '80'
                  destinations:
                    addresses:
                      - 0.0.0.0/0
                      - '::/0'
              created_at: '2017-05-23T21:24:00Z'
              droplet_ids:
                - 8043964
              tags: []
              pending_changes:
                - droplet_id: 8043964
                  removing: false
                  status: waiting
    bad_request:
      description: Bad Request
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: bad_request
            message: error parsing request body
            request_id: 4851a473-1621-42ea-b2f9-5071c0ea8414
    get_firewall_response:
      description: >-
        The response will be a JSON object with a firewall key. This will be set
        to an object containing the standard firewall attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              firewall:
                $ref: '#/components/schemas/firewall'
          example:
            firewall:
              id: bb4b2611-3d72-467b-8602-280330ecd65c
              name: firewall
              status: succeeded
              inbound_rules:
                - protocol: tcp
                  ports: '80'
                  sources:
                    load_balancer_uids:
                      - 4de7ac8b-495b-4884-9a69-1050c6793cd6
                - protocol: tcp
                  ports: '22'
                  sources:
                    tags:
                      - gateway
                    addresses:
                      - 18.0.0.0/8
              outbound_rules:
                - protocol: tcp
                  ports: '80'
                  destinations:
                    addresses:
                      - 0.0.0.0/0
                      - '::/0'
              created_at: '2017-05-23T21:24:00Z'
              droplet_ids:
                - 8043964
              tags: []
              pending_changes: []
    put_firewall_response:
      description: >-
        The response will be a JSON object with a `firewall` key. This will be
        set to an object containing the standard firewall attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              firewall:
                $ref: '#/components/schemas/firewall'
          example:
            firewall:
              id: bb4b2611-3d72-467b-8602-280330ecd65c
              name: frontend-firewall
              inbound_rules:
                - protocol: tcp
                  ports: '80'
                  sources:
                    load_balancer_uids:
                      - 4de7ac8b-495b-4884-9a69-1050c6793cd6
                - protocol: tcp
                  ports: '22'
                  sources:
                    tags:
                      - gateway
                    addresses:
                      - 18.0.0.0/8
              outbound_rules:
                - protocol: tcp
                  ports: '80'
                  destinations:
                    addresses:
                      - 0.0.0.0/0
                      - '::/0'
              created_at: '2020-05-23T21:24:00Z'
              droplet_ids:
                - 8043964
              tags:
                - frontend
              status: waiting
              pending_changes:
                - droplet_id: 8043964
                  removing: false
                  status: waiting
    floating_ip_list:
      description: >-
        The response will be a JSON object with a key called `floating_ips`.
        This will be set to an array of floating IP objects, each of which will
        contain the standard floating IP attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  floating_ips:
                    type: array
                    items:
                      $ref: '#/components/schemas/floating_ip'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              floating_ips:
                - ip: 45.55.96.47
                  droplet: null
                  region:
                    name: New York 3
                    slug: nyc3
                    features:
                      - private_networking
                      - backups
                      - ipv6
                      - metadata
                      - install_agent
                      - storage
                      - image_transfer
                    available: true
                    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
                  locked: false
                  project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
              links: {}
              meta:
                total: 1
    floating_ip_created:
      description: >-
        The response will be a JSON object with a key called `floating_ip`. The
        value of this will be an object that contains the standard attributes
        associated with a floating IP.

        When assigning a floating IP to a Droplet at same time as it created,
        the response's `links` object will contain links to both the Droplet and
        the assignment action. The latter can be used to check the status of the
        action.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              floating_ip:
                $ref: '#/components/schemas/floating_ip'
              links:
                type: object
                properties:
                  droplets:
                    type: array
                    items:
                      $ref: '#/components/schemas/action_link'
                  actions:
                    type: array
                    items:
                      $ref: '#/components/schemas/action_link'
          examples:
            floating_ip_assigning:
              $ref: '#/components/examples/floating_ip_assigning'
            floating_ip_reserving:
              $ref: '#/components/examples/floating_ip_reserving'
    floating_ip:
      description: >-
        The response will be a JSON object with a key called `floating_ip`. The
        value of this will be an object that contains the standard attributes
        associated with a floating IP.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              floating_ip:
                $ref: '#/components/schemas/floating_ip'
          examples:
            floating_ip_assigned:
              $ref: '#/components/examples/floating_ip_assigned'
            floating_ip_reserved:
              $ref: '#/components/examples/floating_ip_reserved'
    floating_ip_actions:
      description: >-
        The results will be returned as a JSON object with an `actions` key.
        This will be set to an array filled with action objects containing the
        standard floating IP action attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  actions:
                    type: array
                    items:
                      $ref: '#/components/schemas/action'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              actions:
                - id: 72531856
                  status: completed
                  type: reserve_ip
                  started_at: '2015-11-21T21:51:09Z'
                  completed_at: '2015-11-21T21:51:09Z'
                  resource_id: 758604197
                  resource_type: floating_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
                  region_slug: nyc3
              links: {}
              meta:
                total: 1
    floating_ip_action:
      description: >-
        The response will be an object with a key called `action`. The value of
        this will be an object that contains the standard floating IP action
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            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.
            example:
              action:
                id: 72531856
                status: completed
                type: assign_ip
                started_at: '2015-11-12T17:51:03Z'
                completed_at: '2015-11-12T17:51:14Z'
                resource_id: 758604968
                resource_type: floating_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
                region_slug: nyc3
                project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
    list_namespaces:
      description: >-
        An array of JSON objects with a key called `namespaces`.  Each object
        represents a namespace and contains

        the properties associated with it. 
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  namespaces:
                    type: array
                    items:
                      $ref: '#/components/schemas/namespace_info'
    namespace_created:
      description: >-
        A JSON response object with a key called `namespace`. The object
        contains the properties associated

        with the namespace.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              namespace:
                $ref: '#/components/schemas/namespace_info'
    namespace_bad_request:
      description: Bad Request.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: bad_request
            message: 'Invalid request payload: missing label field'
            request_id: 4851a473-1621-42ea-b2f9-5071c0ea8414
    namespace_limit_reached:
      description: Limit Reached
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: unprocessable_entity
            message: namespace limit reached
            request_id: a3275238-3d04-4405-a123-55c389b406c0
    namespace_not_allowed:
      description: Not Allowed.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: forbidden
            message: not allowed to get namespace
            request_id: b11e45a4-892c-48c9-9001-b6cffe9fe795
    namespace_not_found:
      description: Bad Request.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: not_found
            message: namespace not found
            request_id: 88d17b7a-630b-4083-99ce-5b91045efdb4
    list_triggers:
      description: >-
        An array of JSON objects with a key called `namespaces`.  Each object
        represents a namespace and contains

        the properties associated with it. 
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  triggers:
                    type: array
                    items:
                      $ref: '#/components/schemas/trigger_info'
    trigger_response:
      description: >-
        A JSON response object with a key called `trigger`. The object contains
        the properties associated

        with the trigger.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              trigger:
                $ref: '#/components/schemas/trigger_info'
    trigger_bad_request:
      description: Bad Request.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: bad_request
            message: >-
              validating create trigger: validation error: missing trigger name,
              missing function name, missing source details
            request_id: 4851a473-1621-42ea-b2f9-5071c0ea8414
    trigger_limit_reached:
      description: Limit Reached
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: unprocessable_entity
            message: triggers limit reached
            request_id: 7ba99a43-6618-4fe0-9af7-092752ad0d56
    trigger_not_found:
      description: Bad Request.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            namespace not found:
              value:
                id: not_found
                message: namespace not found
                request_id: 88d17b7a-630b-4083-99ce-5b91045efdb4
            trigger not found:
              value:
                id: not_found
                message: trigger not found
                request_id: 88d17b7a-630b-4083-99ce-5b91045efdb4
    all_images:
      description: >-
        The response will be a JSON object with a key called `images`.  This
        will be set to an array of image objects, each of which will contain the
        standard image attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  images:
                    type: array
                    items:
                      $ref: '#/components/schemas/image'
                required:
                  - images
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          examples:
            All:
              $ref: '#/components/examples/images_all'
            Snapshots:
              $ref: '#/components/examples/images_snapshots'
            Distribution:
              $ref: '#/components/examples/images_distribution'
            Custom:
              $ref: '#/components/examples/images_custom'
            Application:
              $ref: '#/components/examples/images_application'
            Tagged:
              $ref: '#/components/examples/images_tagged'
    new_custom_image:
      description: >-
        The response will be a JSON object with a key set to `image`.  The value
        of this will be an image object containing a subset of the standard 
        image attributes as listed below, including the image's `id` and
        `status`.  After initial creation, the `status` will be `NEW`. Using the
        image's id, you  may query the image's status by sending a `GET` request
        to the  `/v2/images/$IMAGE_ID` endpoint.  When the `status` changes to
        `available`, the image will be ready for use.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              image:
                $ref: '#/components/schemas/image'
          example:
            image:
              created_at: '2018-09-20T19:28:00Z'
              description: Cloud-optimized image w/ small footprint
              distribution: Ubuntu
              error_message: ''
              id: 38413969
              name: ubuntu-18.04-minimal
              regions: []
              type: custom
              tags:
                - base-image
                - prod
              status: NEW
    existing_image:
      description: >-
        The response will be a JSON object with a key called `image`.  The value
        of this will be an image object containing the standard image
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              image:
                $ref: '#/components/schemas/image'
            required:
              - image
          example:
            image:
              id: 6918990
              name: 14.04 x64
              distribution: Ubuntu
              slug: ubuntu-16-04-x64
              public: true
              regions:
                - nyc1
                - ams1
                - sfo1
                - nyc2
                - ams2
                - sgp1
                - lon1
                - nyc3
                - ams3
                - nyc3
              created_at: '2014-10-17T20:24:33Z'
              min_disk_size: 20
              size_gigabytes: 2.34
              description: ''
              tags: []
              status: available
              error_message: ''
    updated_image:
      description: >-
        The response will be a JSON object with a key set to `image`.  The value
        of this will be an image object containing the standard image
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              image:
                $ref: '#/components/schemas/image'
            required:
              - image
          example:
            image:
              id: 7938391
              name: new-image-name
              distribution: Ubuntu
              slug: null
              public: false
              regions:
                - nyc3
                - nyc3
              created_at: '2014-11-14T16:44:03Z'
              min_disk_size: 20
              size_gigabytes: 2.34
              description: ''
              tags: []
              status: available
              error_message: ''
    get_image_actions_response:
      description: >-
        The results will be returned as a JSON object with an `actions` key.
        This will be set to an array filled with action objects containing the
        standard action attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  actions:
                    type: array
                    items:
                      $ref: '#/components/schemas/action'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          example:
            actions:
              - id: 29410565
                status: completed
                type: transfer
                started_at: '2014-07-25T15:04:21Z'
                completed_at: '2014-07-25T15:10:20Z'
                resource_id: 7555620
                resource_type: image
                region:
                  name: New York 2
                  slug: nyc2
                  sizes:
                    - s-1vcpu-3gb
                    - m-1vcpu-8gb
                    - s-3vcpu-1gb
                    - s-1vcpu-2gb
                    - s-2vcpu-2gb
                    - s-2vcpu-4gb
                    - s-4vcpu-8gb
                    - s-6vcpu-16gb
                    - s-8vcpu-32gb
                    - s-12vcpu-48gb
                    - s-16vcpu-64gb
                    - s-20vcpu-96gb
                    - s-1vcpu-1gb
                    - c-1vcpu-2gb
                    - s-24vcpu-128gb
                  features:
                    - private_networking
                    - backups
                    - ipv6
                    - metadata
                    - server_id
                    - install_agent
                    - storage
                    - image_transfer
                  available: true
                region_slug: nyc2
            links:
              pages:
                last: >-
                  https://api.digitalocean.com/v2/images/7555620/actions?page=5&per_page=1
                next: >-
                  https://api.digitalocean.com/v2/images/7555620/actions?page=2&per_page=1
            meta:
              total: 5
    post_image_action_response:
      description: >-
        The response will be a JSON object with a key called `action`. The value
        of this will be an object containing the standard image action
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/action'
          example:
            action:
              id: 36805527
              status: in-progress
              type: transfer
              started_at: '2014-11-14T16:42:45Z'
              completed_at: null
              resource_id: 7938269
              resource_type: image
              region:
                name: New York 3
                slug: nyc3
                sizes:
                  - s-1vcpu-3gb
                  - m-1vcpu-8gb
                  - s-3vcpu-1gb
                  - s-1vcpu-2gb
                  - s-2vcpu-2gb
                  - s-2vcpu-4gb
                  - s-4vcpu-8gb
                  - s-6vcpu-16gb
                  - s-8vcpu-32gb
                  - s-12vcpu-48gb
                  - s-16vcpu-64gb
                  - s-20vcpu-96gb
                  - s-1vcpu-1gb
                  - c-1vcpu-2gb
                  - s-24vcpu-128gb
                features:
                  - private_networking
                  - backups
                  - ipv6
                  - metadata
                  - server_id
                  - install_agent
                  - storage
                  - image_transfer
                available: true
              region_slug: nyc3
    get_image_action_response:
      description: >-
        The response will be an object with a key called `action`. The value of
        this will be an object that contains the standard image action
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/action'
          example:
            action:
              id: 36805527
              status: in-progress
              type: transfer
              started_at: '2014-11-14T16:42:45Z'
              completed_at: null
              resource_id: 7938269
              resource_type: image
              region:
                name: New York 3
                slug: nyc3
                sizes:
                  - s-1vcpu-3gb
                  - m-1vcpu-8gb
                  - s-3vcpu-1gb
                  - s-1vcpu-2gb
                  - s-2vcpu-2gb
                  - s-2vcpu-4gb
                  - s-4vcpu-8gb
                  - s-6vcpu-16gb
                  - s-8vcpu-32gb
                  - s-12vcpu-48gb
                  - s-16vcpu-64gb
                  - s-20vcpu-96gb
                  - s-1vcpu-1gb
                  - c-1vcpu-2gb
                  - s-24vcpu-128gb
                features:
                  - private_networking
                  - backups
                  - ipv6
                  - metadata
                  - server_id
                  - install_agent
                  - storage
                  - image_transfer
                available: true
              region_slug: nyc3
    all_clusters:
      description: >
        The response will be a JSON object with a key called
        `kubernetes_clusters`.

        This will be set to an array of objects, each of which will contain the

        standard Kubernetes cluster attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  kubernetes_clusters:
                    type: array
                    items:
                      $ref: '#/components/schemas/cluster'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          examples:
            All Kubernetes Clusters:
              $ref: '#/components/examples/kubernetes_clusters_all'
    cluster_create:
      description: >
        The response will be a JSON object with a key called
        `kubernetes_cluster`. The

        value of this will be an object containing the standard attributes of a

        Kubernetes cluster.


        The IP address and cluster API server endpoint will not be available
        until the

        cluster has finished provisioning. The initial value of the cluster's

        `status.state` attribute will be `provisioning`. When the cluster is
        ready,

        this will transition to `running`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              kubernetes_cluster:
                $ref: '#/components/schemas/cluster'
          examples:
            Kubernetes Cluster Response:
              $ref: '#/components/examples/kubernetes_clusters_create_basic_response'
            Kubernetes Cluster with Multiple Node Pools Response:
              $ref: '#/components/examples/kubernetes_clusters_multi_pool_response'
    existing_cluster:
      description: >
        The response will be a JSON object with a key called
        `kubernetes_cluster`. The

        value of this will be an object containing the standard attributes of a

        Kubernetes cluster.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              kubernetes_cluster:
                $ref: '#/components/schemas/cluster'
          examples:
            Single Kubernetes Cluster:
              $ref: '#/components/examples/kubernetes_single'
    updated_cluster:
      description: >
        The response will be a JSON object with a key called
        `kubernetes_cluster`. The

        value of this will be an object containing the standard attributes of a

        Kubernetes cluster.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              kubernetes_cluster:
                $ref: '#/components/schemas/cluster'
          examples:
            Updated Kubernetes Cluster:
              $ref: '#/components/examples/kubernetes_updated'
    associated_kubernetes_resources_list:
      description: >-
        The response will be a JSON object containing `load_balancers`,
        `volumes`, and `volume_snapshots` keys. Each will be set to an array of
        objects containing the standard attributes for associated resources.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/associated_kubernetes_resources'
    kubeconfig:
      description: A kubeconfig file for the cluster in YAML format.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/yaml:
          example: |
            apiVersion: v1
            clusters:
            - cluster:
                certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURUxCUUF3TXpFVk1CTUdBMVVFQ2ftTVJHbG4KYVhSaGJFOWpaV0Z1TVJvd0dUSREERXhGck9ITmhZWE1nUTJ4MWMzUmxjaUJEUVRBZUZ3MHhPREV4TVRVeApOakF3TWpCYUZ3MHpPREV4TVRVeE5qQXdNakJhTURNeEZUQVRCZ05WQkFvVERFUnBaMmwwWVd4UFkyVmhiakVhCk1CZ0dBMVVFQXhNUmF6aHpZV0Z6SUVOc2RYTjBaWElnUTBFd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUIKRHdBd2dnRUtBb0lCQVFDK2Z0L05Nd3pNaUxFZlFvTFU2bDgrY0hMbWttZFVKdjl4SmlhZUpIU0dZOGhPZFVEZQpGd1Zoc0pDTnVFWkpJUFh5Y0orcGpkU3pYc1lFSE03WVNKWk9xNkdaYThPMnZHUlJjN2ZQaUFJaFBRK0ZpUmYzCmRhMHNIUkZlM2hCTmU5ZE5SeTliQ2VCSTRSUlQrSEwzRFR3L2I5KytmRkdZQkRoVTEvTTZUWWRhUHR3WU0rdWgKb1pKcWJZVGJZZTFhb3R1ekdnYUpXaXRhdFdHdnNJYU8xYWthdkh0WEIOOHFxa2lPemdrSDdvd3RVY3JYM05iawozdmlVeFU4TW40MmlJaGFyeHNvTnlwdGhHOWZLMi9OdVdKTXJJS2R0Mzhwc0tkdDBFbng0MWg5K0dsMjUzMzhWCk1mdjBDVDF6SG1JanYwblIrakNkcFd0eFVLRyt0YjYzZFhNbkFnTUJBQUdqUlRCRE1BNEdBMVVkRHdFQi93UUUKQXdJQmhqQVNCZ05WSFJNQkFmOEVDREFHQVFIL0FnRUFNQjBHQTFVZERnUVdCQlNQMmJrOXJiUGJpQnZOd1Z1NQpUL0dwTFdvOTdEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFEVjFMSGZyc1JiYVdONHE5SnBFVDMxMlluRDZ6Cm5rM3BpU1ZSYVEvM09qWG8wdHJ6Z2N4KzlVTUQxeDRHODI1RnYxc0ROWUExZEhFc2dHUmNyRkVmdGZJQWUrUVYKTitOR3NMRnQrOGZrWHdnUlpoNEU4ZUJsSVlrdEprOWptMzFMT25vaDJYZno0aGs3VmZwYkdvVVlsbmVoak1JZApiL3ZMUk05Y2EwVTJlYTB5OTNveE5pdU9PcXdrZGFjU1orczJtb3JNdGZxc3VRSzRKZDA3SENIbUFIeWpXT2k4ClVOQVUyTnZnSnBKY2RiZ3VzN2I5S3ppR1ZERklFUk04cEo4U1Nob1ZvVFFJd3d5Y2xVTU9EUUJreFFHOHNVRk8KRDE3ZjRod1dNbW5qVHY2MEJBM0dxaTZRcjdsWVFSL3drSEtQcnZjMjhoNXB0NndPWEY1b1M4OUZkUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
                server: https://bd5f5959-5e1e-4205-a714-a914373942af.k8s.ondigitalocean.com
              name: do-nyc1-prod-cluster-01
            contexts:
            - context:
                cluster: do-nyc1-prod-cluster-01
                user: do-nyc1-prod-cluster-01-admin
              name: do-nyc1-prod-cluster-01
            current-context: do-nyc1-prod-cluster-01
            kind: Config
            preferences: {}
            users:
            - name: do-nyc1-prod-cluster-01-admin
              user:
                token: 403d085aaa80102277d8da97ffd2db2b6a4f129d0e2146098fdfb0cec624babc
    credentials:
      description: A JSON object containing credentials for a cluster.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/credentials'
    available_upgrades:
      description: >
        The response will be a JSON object with a key called

        `available_upgrade_versions`. The value of this will be an array of
        objects,

        representing the upgrade versions currently available for this cluster.


        If the cluster is up-to-date (i.e. there are no upgrades currently
        available)

        `available_upgrade_versions` will be `null`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              available_upgrade_versions:
                type: array
                nullable: true
                items:
                  $ref: '#/components/schemas/kubernetes_version'
    all_node_pools:
      description: >
        The response will be a JSON object with a key called `node_pools`. This
        will

        be set to an array of objects, each of which will contain the standard
        node

        pool attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              node_pools:
                type: array
                items:
                  $ref: '#/components/schemas/kubernetes_node_pool'
          example:
            node_pools:
              - id: cdda885e-7663-40c8-bc74-3a036c66545d
                name: frontend-pool
                size: s-1vcpu-2gb
                count: 3
                tags:
                  - production
                  - web-team
                  - k8s
                  - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                  - k8s:worker
                labels: null
                auto_scale: false
                min_nodes: 0
                max_nodes: 0
                nodes:
                  - id: 478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f
                    name: adoring-newton-3niq
                    status:
                      state: running
                    droplet_id: '205545370'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: ad12e744-c2a9-473d-8aa9-be5680500eb1
                    name: adoring-newton-3nim
                    status:
                      state: running
                    droplet_id: '205545371'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: e46e8d07-f58f-4ff1-9737-97246364400e
                    name: adoring-newton-3ni7
                    status:
                      state: running
                    droplet_id: '205545372'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
              - id: f49f4379-7e7f-4af5-aeb6-0354bd840778
                name: backend-pool
                size: g-4vcpu-16gb
                count: 2
                tags:
                  - production
                  - web-team
                  - k8s
                  - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                  - k8s:worker
                labels:
                  service: backend
                  priority: high
                auto_scale: true
                min_nodes: 2
                max_nodes: 5
                nodes:
                  - id: 3385619f-8ec3-42ba-bb23-8d21b8ba7518
                    name: affectionate-nightingale-3nif
                    status:
                      state: running
                    droplet_id: '205545373'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: 4b8f60ff-ba06-4523-a6a4-b8148244c7e6
                    name: affectionate-nightingale-3niy
                    status:
                      state: running
                    droplet_id: '205545374'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
    node_pool_create:
      description: >
        The response will be a JSON object with a key called `node_pool`. The
        value of

        this will be an object containing the standard attributes of a node
        pool.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              node_pool:
                $ref: '#/components/schemas/kubernetes_node_pool'
            example:
              node_pool:
                id: cdda885e-7663-40c8-bc74-3a036c66545d
                name: new-pool
                size: s-1vcpu-2gb
                count: 3
                tags:
                  - production
                  - web-team
                  - front-end
                  - k8s
                  - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                  - k8s:worker
                labels: null
                taints: []
                auto_scale: true
                min_nodes: 3
                max_nodes: 6
                nodes:
                  - id: 478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f
                    name: ' '
                    status:
                      state: provisioning
                    droplet_id: ' '
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: ad12e744-c2a9-473d-8aa9-be5680500eb1
                    name: ' '
                    status:
                      state: provisioning
                    droplet_id: ' '
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: e46e8d07-f58f-4ff1-9737-97246364400e
                    name: ' '
                    status:
                      state: provisioning
                    droplet_id: ' '
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
    existing_node_pool:
      description: >
        The response will be a JSON object with a key called `node_pool`. The
        value

        of this will be an object containing the standard attributes of a node
        pool.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              node_pool:
                $ref: '#/components/schemas/kubernetes_node_pool'
            example:
              node_pool:
                id: cdda885e-7663-40c8-bc74-3a036c66545d
                name: frontend-pool
                size: s-1vcpu-2gb
                count: 3
                tags:
                  - production
                  - web-team
                  - k8s
                  - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                  - k8s:worker
                labels:
                  service: backend
                  priority: high
                taints:
                  - key: priority
                    value: high
                    effect: NoSchedule
                auto_scale: false
                min_nodes: 0
                max_nodes: 0
                nodes:
                  - id: 478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f
                    name: adoring-newton-3niq
                    status:
                      state: running
                    droplet_id: '205545370'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: ad12e744-c2a9-473d-8aa9-be5680500eb1
                    name: adoring-newton-3nim
                    status:
                      state: running
                    droplet_id: '205545371'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: e46e8d07-f58f-4ff1-9737-97246364400e
                    name: adoring-newton-3ni7
                    status:
                      state: running
                    droplet_id: '205545372'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
    node_pool_update:
      description: >
        The response will be a JSON object with a key called `node_pool`. The
        value of

        this will be an object containing the standard attributes of a node
        pool.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              node_pool:
                $ref: '#/components/schemas/kubernetes_node_pool'
            example:
              node_pool:
                id: cdda885e-7663-40c8-bc74-3a036c66545d
                name: renamed-pool
                size: s-1vcpu-2gb
                count: 3
                tags:
                  - production
                  - web-team
                  - front-end
                  - new-tag
                  - k8s
                  - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                  - k8s:worker
                labels: null
                taints: []
                auto_scale: true
                min_nodes: 3
                max_nodes: 6
                nodes:
                  - id: 478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f
                    name: adoring-newton-3niq
                    status:
                      state: running
                    droplet_id: '205545370'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: ad12e744-c2a9-473d-8aa9-be5680500eb1
                    name: adoring-newton-3nim
                    status:
                      state: running
                    droplet_id: '205545371'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: e46e8d07-f58f-4ff1-9737-97246364400e
                    name: adoring-newton-3ni7
                    status:
                      state: running
                    droplet_id: '205545372'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
    cluster_user:
      description: >
        The response will be a JSON object with a key called
        `kubernetes_cluster_user`

        containing the username and in-cluster groups that it belongs to.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/user'
    all_options:
      description: >
        The response will be a JSON object with a key called `options` which
        contains

        `regions`, `versions`, and `sizes` objects listing the available options
        and

        the matching slugs for use when creating a new cluster.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/kubernetes_options'
          examples:
            All Kubernetes Options:
              $ref: '#/components/examples/kubernetes_options'
    clusterlint_results:
      description: >
        The response is a JSON object which contains the diagnostics on
        Kubernetes

        objects in the cluster. Each diagnostic will contain some metadata
        information

        about the object and feedback for users to act upon.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/clusterlint_results'
    clusterlint_run:
      description: >-
        The response is a JSON object with a key called `run_id` that you can
        later use to fetch the run results.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            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.
    all_load_balancers:
      description: >-
        A JSON object with a key of `load_balancers`. This will be set to an
        array of objects, each of which will contain the standard load balancer
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  load_balancers:
                    type: array
                    items:
                      $ref: '#/components/schemas/load_balancer'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          examples:
            All Load Balancers:
              $ref: '#/components/examples/load_balancers_all'
    load_balancer_create:
      description: Accepted
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              load_balancer:
                $ref: '#/components/schemas/load_balancer'
          examples:
            Basic Create Response:
              $ref: '#/components/examples/load_balancer_basic_response'
            SSL Termination Create Response:
              $ref: '#/components/examples/load_balancer_ssl_termination_response'
            Create Response Using Droplet Tag:
              $ref: '#/components/examples/load_balancer_using_tag_response'
            Sticky Sessions and Custom Health Check:
              $ref: >-
                #/components/examples/load_balancer_sticky_sessions_and_health_check_response
    existing_load_balancer:
      description: >
        The response will be a JSON object with a key called `load_balancer`.
        The

        value of this will be an object that contains the standard attributes

        associated with a load balancer
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              load_balancer:
                $ref: '#/components/schemas/load_balancer'
          examples:
            load_balancer_basic_response:
              $ref: '#/components/examples/load_balancer_basic_response'
    updated_load_balancer:
      description: >
        The response will be a JSON object with a key called `load_balancer`.
        The

        value of this will be an object containing the standard attributes of a

        load balancer.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              load_balancer:
                $ref: '#/components/schemas/load_balancer'
          examples:
            load_balancer_update_response:
              $ref: '#/components/examples/load_balancer_update_response'
    list_alert_policy_response:
      description: A list of alert policies.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/list_alert_policy'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              policies:
                - alerts:
                    email:
                      - bob@example.com
                    slack:
                      - channel: Production Alerts
                        url: >-
                          https://hooks.slack.com/services/T1234567/AAAAAAAA/ZZZZZZ"
                  compare: GreaterThan
                  description: CPU Alert
                  enabled: true
                  entities:
                    - 192018292
                  tags:
                    - production_droplets
                  type: v1/insights/droplet/cpu
                  uuid: 78b3da62-27e5-49ba-ac70-5db0b5935c64
                  value: 80
                  window: 5m
              links:
                first: >-
                  https//api.digitalocean.com/v2/monitoring/alerts?page=1&per_page=10
                prev: >-
                  https//api.digitalocean.com/v2/monitoring/alerts?page=2&per_page=10
                next: >-
                  https//api.digitalocean.com/v2/monitoring/alerts?page=4&per_page=10
                last: >-
                  https//api.digitalocean.com/v2/monitoring/alerts?page=5&per_page=10
              meta:
                total: 50
    alert_policy_response:
      description: An alert policy.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              policy:
                $ref: '#/components/schemas/alert_policy'
    droplet_bandwidth_metric_response:
      description: >-
        The response will be a JSON object with a key called `data` and
        `status`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/metrics'
          examples:
            Inbound Private Bandwidth:
              $ref: '#/components/examples/inbound_private_droplet_bandwidth'
            Inbound Public Bandwidth:
              $ref: '#/components/examples/inbound_public_droplet_bandwidth'
            Outbound Private Bandwidth:
              $ref: '#/components/examples/outbound_private_droplet_bandwidth'
            Outbound Public Bandwidth:
              $ref: '#/components/examples/outbound_public_droplet_bandwidth'
    droplet_cpu_metric_response:
      description: >-
        The response will be a JSON object with a key called `data` and
        `status`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/metrics'
          examples:
            CPU:
              $ref: '#/components/examples/droplet_cpu'
    droplet_filesystem_metric_response:
      description: >-
        The response will be a JSON object with a key called `data` and
        `status`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/metrics'
          examples:
            Filesystem:
              $ref: '#/components/examples/droplet_filesystem'
    metric_response:
      description: >-
        The response will be a JSON object with a key called `data` and
        `status`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/metrics'
    app_metric_response:
      description: >-
        The response will be a JSON object with a key called `data` and
        `status`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/metrics'
          examples:
            Memory:
              $ref: '#/components/examples/app_memory_percentage'
    projects_list:
      description: >-
        The response will be a JSON object with a key called `projects`. The
        value of this will be an object with the standard project attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  projects:
                    type: array
                    items:
                      $ref: '#/components/schemas/project'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              projects:
                - id: 4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679
                  owner_uuid: 99525febec065ca37b2ffe4f852fd2b2581895e7
                  owner_id: 258992
                  name: my-web-api
                  description: My website API
                  purpose: Service or API
                  environment: Production
                  is_default: false
                  created_at: '2018-09-27T20:10:35Z'
                  updated_at: '2018-09-27T20:10:35Z'
                - id: addb4547-6bab-419a-8542-76263a033cf6
                  owner_uuid: 99525febec065ca37b2ffe4f852fd2b2581895e7
                  owner_id: 258992
                  name: Default
                  description: Default project
                  purpose: Just trying out DigitalOcean
                  environment: Development
                  is_default: true
                  created_at: '2017-10-19T21:44:20Z'
                  updated_at: '2019-11-05T18:50:03Z'
              links:
                pages:
                  first: https://api.digitalocean.com/v2/projects?page=1
                  last: https://api.digitalocean.com/v2/projects?page=1
              meta:
                total: 2
    existing_project:
      description: >-
        The response will be a JSON object with a key called `project`. The
        value of this will be an object with the standard project attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              project:
                $ref: '#/components/schemas/project'
    default_project:
      description: >-
        The response will be a JSON object with a key called `project`. The
        value of this will be an object with the standard project attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              project:
                $ref: '#/components/schemas/project'
            example:
              project:
                id: addb4547-6bab-419a-8542-76263a033cf6
                owner_uuid: 99525febec065ca37b2ffe4f852fd2b2581895e7
                owner_id: 258992
                name: Default
                description: Default project
                purpose: Just trying out DigitalOcean
                environment: Development
                is_default: true
                created_at: '2017-10-19T21:44:20Z'
                updated_at: '2019-11-05T18:50:03Z'
    precondition_failed:
      description: Only an empty project can be deleted.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: precondition_failed
            message: >-
              cannot delete a project with resources. move or remove the
              resources first
    resources_list:
      description: >-
        The response will be a JSON object with a key called `resources`. The
        value of this will be an object with the standard resource attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  resources:
                    type: array
                    items:
                      $ref: '#/components/schemas/resource'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              resources:
                - urn: do:droplet:13457723
                  assigned_at: '2018-09-28T19:26:37Z'
                  links:
                    self: https://api.digitalocean.com/v2/droplets/13457723
                  status: ok
                - urn: do:domain:example.com
                  assigned_at: '2019-03-31T16:24:14Z'
                  links:
                    self: https://api.digitalocean.com/v2/domains/example.com
                  status: ok
              links:
                pages:
                  first: >-
                    https://api.digitalocean.com/v2/projects/4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679/resources?page=1
                  last: >-
                    https://api.digitalocean.com/v2/projects/4e1bfbc3-dc3e-41f2-a18f-1b4d7ba71679/resources?page=1
              meta:
                total: 2
    assigned_resources_list:
      description: >-
        The response will be a JSON object with a key called `resources`. The
        value of this will be an object with the standard resource attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              resources:
                type: array
                items:
                  $ref: '#/components/schemas/resource'
            example:
              resources:
                - urn: do:droplet:13457723
                  assigned_at: '2018-09-28T19:26:37Z'
                  links:
                    self: https://api.digitalocean.com/v2/droplets/13457723
                  status: ok
                - urn: do:domain:example.com
                  assigned_at: '2019-03-31T16:24:14Z'
                  links:
                    self: https://api.digitalocean.com/v2/domains/example.com
                  status: ok
    all_regions:
      description: >-
        A JSON object with a key set to `regions`. The value is an array of
        `region` objects, each of which contain the standard `region`
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  regions:
                    type: array
                    items:
                      $ref: '#/components/schemas/region'
                required:
                  - regions
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              regions:
                - name: New York 3
                  slug: nyc3
                  features:
                    - private_networking
                    - backups
                    - ipv6
                    - metadata
                    - install_agent
                    - storage
                    - image_transfer
                  available: true
                  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
              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
              meta:
                total: 13
    registry_info:
      description: >-
        The response will be a JSON object with the key `registry` containing
        information about your registry.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              registry:
                $ref: '#/components/schemas/registry'
    subscription_response:
      description: >-
        The response will be a JSON object with a key called `subscription`
        containing information about your subscription.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              subscription:
                $ref: '#/components/schemas/subscription'
    docker_credentials:
      description: A Docker `config.json` file for the container registry.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/docker_credentials'
    all_repositories:
      description: >-
        The response body will be a JSON object with a key of `repositories`.
        This will be set to an array containing objects each representing a
        repository.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  repositories:
                    type: array
                    items:
                      $ref: '#/components/schemas/repository'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              repositories:
                - registry_name: example
                  name: repo-1
                  latest_tag:
                    registry_name: example
                    repository: repo-1
                    tag: latest
                    manifest_digest: >-
                      sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221
                    compressed_size_bytes: 2803255
                    size_bytes: 5861888
                    updated_at: '2020-04-09T23:54:25Z'
                  tag_count: 1
              meta:
                total: 1
    all_repositories_v2:
      description: >-
        The response body will be a JSON object with a key of `repositories`.
        This will be set to an array containing objects each representing a
        repository.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  repositories:
                    type: array
                    items:
                      $ref: '#/components/schemas/repository_v2'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              repositories:
                - registry_name: example
                  name: repo-1
                  tag_count: 57
                  manifest_count: 82
                  latest_manifest:
                    digest: >-
                      sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221
                    registry_name: example
                    repository: repo-1
                    compressed_size_bytes: 1972332
                    size_bytes: 2816445
                    updated_at: '2021-04-09T23:54:25Z'
                    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
              meta:
                total: 5
              links:
                pages:
                  next: >-
                    https://api.digitalocean.com/v2/registry/example/repositoriesV2?page=2&page_token=JPZmZzZXQiOjB9&per_page=1
                  last: >-
                    https://api.digitalocean.com/v2/registry/example/repositoriesV2?page=5&per_page=1
    repository_tags:
      description: >-
        The response body will be a JSON object with a key of `tags`. This will
        be set to an array containing objects each representing a tag.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  tags:
                    type: array
                    items:
                      $ref: '#/components/schemas/repository_tag'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              tags:
                - registry_name: example
                  repository: repo-1
                  tag: latest
                  manifest_digest: >-
                    sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221
                  compressed_size_bytes: 2803255
                  size_bytes: 5861888
                  updated_at: '2020-04-09T23:54:25Z'
              meta:
                total: 1
    repository_manifests:
      description: >-
        The response body will be a JSON object with a key of `manifests`. This
        will be set to an array containing objects each representing a manifest.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  manifests:
                    type: array
                    items:
                      $ref: '#/components/schemas/repository_manifest'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              manifests:
                - digest: >-
                    sha256:cb8a924afdf0229ef7515d9e5b3024e23b3eb03ddbba287f4a19c6ac90b8d221
                  registry_name: example
                  repository: repo-1
                  compressed_size_bytes: 1972332
                  size_bytes: 2816445
                  updated_at: '2021-04-09T23:54:25Z'
                  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
              meta:
                total: 3
              links:
                pages:
                  first: >-
                    https://api.digitalocean.com/v2/registry/example/repositories/repo-1/digests?page=1&per_page=1
                  prev: >-
                    https://api.digitalocean.com/v2/registry/example/repositories/repo-1/digests?page=1&per_page=1
                  next: >-
                    https://api.digitalocean.com/v2/registry/example/repositories/repo-1/digests?page=3&per_page=1
                  last: >-
                    https://api.digitalocean.com/v2/registry/example/repositories/repo-1/digests?page=3&per_page=1
    garbage_collection:
      description: >-
        The response will be a JSON object with a key of `garbage_collection`.
        This will be a json object with attributes representing the
        currently-active garbage collection.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              garbage_collection:
                $ref: '#/components/schemas/garbage_collection'
    garbage_collections:
      description: >-
        The response will be a JSON object with a key of `garbage_collections`.
        This will be set to an array containing objects representing each past
        garbage collection. Each will contain the standard Garbage Collection
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              garbage_collections:
                type: array
                items:
                  $ref: '#/components/schemas/garbage_collection'
          example:
            garbage_collections:
              - uuid: eff0feee-49c7-4e8f-ba5c-a320c109c8a8
                registry_name: example
                status: requested
                created_at: '2020-10-30T21:03:24.000Z'
                updated_at: '2020-10-30T21:03:44.000Z'
                blobs_deleted: 42
                freed_bytes: 667
            meta:
              total: 1
    registry_options_response:
      description: >-
        The response will be a JSON object with a key called `options` which
        contains a key called `subscription_tiers` listing the available tiers.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            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'
          example:
            options:
              available_regions:
                - nyc3
                - sfo3
                - ams3
                - sgp1
                - fra1
              subscription_tiers:
                - name: Starter
                  slug: starter
                  included_repositories: 1
                  included_storage_bytes: 524288000
                  allow_storage_overage: false
                  included_bandwidth_bytes: 524288000
                  monthly_price_in_cents: 0
                  eligible: false
                  eligibility_reasons:
                    - OverRepositoryLimit
                - name: Basic
                  slug: basic
                  included_repositories: 5
                  included_storage_bytes: 5368709120
                  allow_storage_overage: true
                  included_bandwidth_bytes: 5368709120
                  monthly_price_in_cents: 500
                  eligible: true
                - name: Professional
                  slug: professional
                  included_repositories: 0
                  included_storage_bytes: 107374182400
                  allow_storage_overage: true
                  included_bandwidth_bytes: 107374182400
                  monthly_price_in_cents: 2000
                  eligible: true
    droplet_neighbors_ids:
      description: A JSON object with an `neighbor_ids` key.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/neighbor_ids'
    reserved_ip_list:
      description: >-
        The response will be a JSON object with a key called `reserved_ips`.
        This will be set to an array of reserved IP objects, each of which will
        contain the standard reserved IP attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  reserved_ips:
                    type: array
                    items:
                      $ref: '#/components/schemas/reserved_ip'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              reserved_ips:
                - ip: 45.55.96.47
                  droplet: null
                  region:
                    name: New York 3
                    slug: nyc3
                    features:
                      - private_networking
                      - backups
                      - ipv6
                      - metadata
                      - install_agent
                      - storage
                      - image_transfer
                    available: true
                    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
                  locked: false
                  project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
              links: {}
              meta:
                total: 1
    reserved_ip_created:
      description: >-
        The response will be a JSON object with a key called `reserved_ip`. The
        value of this will be an object that contains the standard attributes
        associated with a reserved IP.

        When assigning a reserved IP to a Droplet at same time as it created,
        the response's `links` object will contain links to both the Droplet and
        the assignment action. The latter can be used to check the status of the
        action.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              reserved_ip:
                $ref: '#/components/schemas/reserved_ip'
              links:
                type: object
                properties:
                  droplets:
                    type: array
                    items:
                      $ref: '#/components/schemas/action_link'
                  actions:
                    type: array
                    items:
                      $ref: '#/components/schemas/action_link'
          examples:
            reserved_ip_assigning:
              $ref: '#/components/examples/reserved_ip_assigning'
            reserved_ip_reserving:
              $ref: '#/components/examples/reserved_ip_reserving'
    reserved_ip:
      description: >-
        The response will be a JSON object with a key called `reserved_ip`. The
        value of this will be an object that contains the standard attributes
        associated with a reserved IP.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              reserved_ip:
                $ref: '#/components/schemas/reserved_ip'
          examples:
            reserved_ip_assigned:
              $ref: '#/components/examples/reserved_ip_assigned'
            reserved_ip_reserved:
              $ref: '#/components/examples/reserved_ip_reserved'
    reserved_ip_actions:
      description: >-
        The results will be returned as a JSON object with an `actions` key.
        This will be set to an array filled with action objects containing the
        standard reserved IP action attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  actions:
                    type: array
                    items:
                      $ref: '#/components/schemas/action'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              actions:
                - id: 72531856
                  status: completed
                  type: reserve_ip
                  started_at: '2015-11-21T21:51:09Z'
                  completed_at: '2015-11-21T21:51:09Z'
                  resource_id: 758604197
                  resource_type: reserved_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
                  region_slug: nyc3
              links: {}
              meta:
                total: 1
    reserved_ip_action:
      description: >-
        The response will be an object with a key called `action`. The value of
        this will be an object that contains the standard reserved IP action
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            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.
            example:
              action:
                id: 72531856
                status: completed
                type: assign_ip
                started_at: '2015-11-12T17:51:03Z'
                completed_at: '2015-11-12T17:51:14Z'
                resource_id: 758604968
                resource_type: reserved_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
                region_slug: nyc3
                project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
    all_sizes:
      description: >-
        A JSON object with a key called `sizes`. The value of this will be an
        array of `size` objects each of which contain the standard size
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  sizes:
                    type: array
                    items:
                      $ref: '#/components/schemas/size'
                required:
                  - sizes
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              sizes:
                - slug: s-1vcpu-1gb
                  memory: 1024
                  vcpus: 1
                  disk: 25
                  transfer: 1
                  price_monthly: 5
                  price_hourly: 0.00743999984115362
                  regions:
                    - ams2
                    - ams3
                    - blr1
                    - fra1
                    - lon1
                    - nyc1
                    - nyc2
                    - nyc3
                    - sfo1
                    - sfo2
                    - sfo3
                    - sgp1
                    - tor1
                  available: true
                  description: Basic
              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
              meta:
                total: 64
    snapshots:
      description: A JSON object with a key of `snapshots`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  snapshots:
                    type: array
                    items:
                      $ref: '#/components/schemas/snapshots'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          examples:
            All Snapshots:
              $ref: '#/components/examples/snapshots_all'
            Droplets Snapshots:
              $ref: '#/components/examples/snapshots_droplets_only'
            Volume Snapshots:
              $ref: '#/components/examples/snapshots_volumes_only'
    snapshots_existing:
      description: |
        A JSON object with a key called `snapshot`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              snapshot:
                $ref: '#/components/schemas/snapshots'
    not_a_snapshot:
      description: Bad Request
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          example:
            id: bad_request
            message: the resource is not a snapshot
            request_id: bbd8d7d4-2beb-4be1-a374-338e6165e32d
    tags_all:
      description: To list all of your tags, you can send a `GET` request to `/v2/tags`.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  tags:
                    type: array
                    items:
                      $ref: '#/components/schemas/tags'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              tags:
                - name: extra-awesome
                  resources:
                    count: 5
                    last_tagged_uri: https://api.digitalocean.com/v2/images/7555620
                    droplets:
                      count: 1
                      last_tagged_uri: https://api.digitalocean.com/v2/droplets/3164444
                    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
                    volume_snapshots:
                      count: 1
                      last_tagged_uri: >-
                        https://api.digitalocean.com/v2/snapshots/1f6f46e8-6b60-11e9-be4e-0a58ac144519
                    databases:
                      count: 1
                      last_tagged_uri: >-
                        https://api.digitalocean.com/v2/databases/b92438f6-ba03-416c-b642-e9236db91976
              links: {}
              meta:
                total: 1
    tags_new:
      description: >-
        The response will be a JSON object with a key called tag.  The value of
        this will be a tag object containing the standard tag attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              tag:
                $ref: '#/components/schemas/tags'
            example:
              tag:
                name: extra-awesome
                resources:
                  count: 0
                  droplets:
                    count: 0
                  images:
                    count: 0
                  volumes:
                    count: 0
                  volume_snapshots:
                    count: 0
                  databases:
                    count: 0
    tags_bad_request:
      description: Bad Request
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
        x-request-id:
          $ref: '#/components/headers/x-request-id'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error_with_root_causes'
          examples:
            InvalidCharacters:
              value:
                error: >-
                  Error validating resource tag: \"tag-name \\\"здорово\\\"
                  contains invalid characters\"
                messages: null
                root_causes:
                  - >-
                    rpc error: code = InvalidArgument desc = Error validating
                    resource tag: \"tag-name \\\"здорово\\\" contains invalid
                    characters\"
    tags_existing:
      description: >-
        The response will be a JSON object with a key called `tag`.  The value
        of this will be a tag object containing the standard tag attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              tag:
                $ref: '#/components/schemas/tags'
            example:
              tag:
                tag:
                  name: extra-awesome
                  resources:
                    count: 5
                    last_tagged_uri: https://api.digitalocean.com/v2/images/7555620
                    droplets:
                      count: 1
                      last_tagged_uri: https://api.digitalocean.com/v2/droplets/3164444
                    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
                    volume_snapshots:
                      count: 1
                      last_tagged_uri: >-
                        https://api.digitalocean.com/v2/snapshots/1f6f46e8-6b60-11e9-be4e-0a58ac144519
                    databases:
                      count: 1
                      last_tagged_uri: >-
                        https://api.digitalocean.com/v2/databases/b92438f6-ba03-416c-b642-e9236db91976
    volumes:
      description: >-
        The response will be a JSON object with a key called `volumes`. This
        will be set to an array of volume objects, each of which will contain
        the standard volume attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  volumes:
                    type: array
                    items:
                      $ref: '#/components/schemas/volume_full'
                    description: Array of volumes.
                required:
                  - volumes
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
          examples:
            All Volumes:
              $ref: '#/components/examples/volumes_all'
            Filtered by Name:
              $ref: '#/components/examples/volumes_filtered_by_name'
            Filtered by Region:
              $ref: '#/components/examples/volumes_filtered_by_region'
    volume:
      description: >-
        The response will be a JSON object with a key called `volume`. The value
        will be an object containing the standard attributes associated with a
        volume.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              volume:
                $ref: '#/components/schemas/volume_full'
            example:
              volume:
                id: 506f78a4-e098-11e5-ad9f-000f53306ae1
                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
                droplet_ids: []
                name: example
                description: Block store for examples
                size_gigabytes: 10
                filesystem_type: ext4
                filesystem_label: example
                created_at: '2020-03-02T17:00:49Z'
    volumeAction:
      description: >-
        The response will be an object with a key called `action`. The value of
        this will be an object that contains the standard volume action
        attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              action:
                $ref: '#/components/schemas/volumeAction'
          examples:
            volume_action_attach_response:
              $ref: '#/components/examples/volume_action_attach_response'
            VolumeActionDetachResponse:
              $ref: '#/components/examples/volume_action_detach_response'
    volumeSnapshot:
      description: >-
        You will get back a JSON object that has a `snapshot` key. This will
        contain the standard snapshot attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            properties:
              snapshot:
                $ref: '#/components/schemas/snapshots'
            example:
              snapshot:
                id: 8fa70202-873f-11e6-8b68-000f533176b1
                name: big-data-snapshot1475261774
                regions:
                  - nyc1
                created_at: '2020-09-30T18:56:14Z'
                resource_id: 82a48a18-873f-11e6-96bf-000f53315a41
                resource_type: volume
                min_disk_size: 10
                size_gigabytes: 10
                tags:
                  - aninterestingtag
    volumeActions:
      description: >-
        The response will be an object with a key called `action`. The value of
        this will be an object that contains the standard volume action
        attributes.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  actions:
                    type: array
                    items:
                      $ref: '#/components/schemas/volumeAction'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              actions:
                - id: 72531856
                  status: completed
                  type: attach_volume
                  started_at: '2020-11-21T21:51:09Z'
                  completed_at: '2020-11-21T21:51:09Z'
                  resource_type: 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
                  region_slug: nyc1
              links: {}
              meta:
                total: 1
    volumeSnapshots:
      description: >-
        You will get back a JSON object that has a `snapshots` key. This will be
        set to an array of snapshot objects, each of which contain the standard
        snapshot attributes
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  snapshots:
                    type: array
                    items:
                      $ref: '#/components/schemas/snapshots'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              snapshots:
                - id: 8eb4d51a-873f-11e6-96bf-000f53315a41
                  name: big-data-snapshot1475261752
                  regions:
                    - nyc1
                  created_at: '2020-09-30T18:56:12Z'
                  resource_id: 82a48a18-873f-11e6-96bf-000f53315a41
                  resource_type: volume
                  min_disk_size: 10
                  size_gigabytes: 0
                  tags: null
              links: {}
              meta:
                total: 1
    all_vpcs:
      description: >-
        The response will be a JSON object with a key called `vpcs`. This will
        be set to an array of objects, each of which will contain the standard
        attributes associated with a VPC
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  vpcs:
                    type: array
                    items:
                      $ref: '#/components/schemas/vpc'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              vpcs:
                - name: env.prod-vpc
                  description: VPC for production environment
                  region: nyc1
                  ip_range: 10.10.10.0/24
                  id: 5a4981aa-9653-4bd1-bef5-d6bff52042e4
                  urn: do:vpc:5a4981aa-9653-4bd1-bef5-d6bff52042e4
                  default: false
                  created_at: '2020-03-13T19:20:47.442049222Z'
                - id: e0fe0f4d-596a-465e-a902-571ce57b79fa
                  urn: do:vpc:e0fe0f4d-596a-465e-a902-571ce57b79fa
                  name: default-nyc1
                  description: ''
                  region: nyc1
                  ip_range: 10.102.0.0/20
                  created_at: '2020-03-13T19:29:20Z'
                  default: true
                - id: d455e75d-4858-4eec-8c95-da2f0a5f93a7
                  urn: do:vpc:d455e75d-4858-4eec-8c95-da2f0a5f93a7
                  name: default-nyc3
                  description: ''
                  region: nyc3
                  ip_range: 10.100.0.0/20
                  created_at: '2019-11-19T22:19:35Z'
                  default: true
              links: {}
              meta:
                total: 3
    existing_vpc:
      description: >-
        The response will be a JSON object with a key called `vpc`. The value of
        this will be an object that contains the standard attributes associated
        with a VPC.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              vpc:
                $ref: '#/components/schemas/vpc'
    vpc_members:
      description: >-
        The response will be a JSON object with a key called members. This will
        be set to an array of objects, each of which will contain the standard
        attributes associated with a VPC member.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  members:
                    type: array
                    items:
                      $ref: '#/components/schemas/vpc_member'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
            example:
              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'
              links: {}
              meta:
                total: 4
    all_checks:
      description: >-
        The response will be a JSON object with a key called `checks`. This will
        be set to an array of objects, each of which will contain the standard
        attributes associated with an uptime check
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  checks:
                    type: array
                    items:
                      $ref: '#/components/schemas/check'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
    existing_check:
      description: >-
        The response will be a JSON object with a key called `check`. The value
        of this will be an object that contains the standard attributes
        associated with an uptime check.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              check:
                $ref: '#/components/schemas/check'
    existing_check_state:
      description: >-
        The response will be a JSON object with a key called `state`. The value
        of this will be an object that contains the standard attributes
        associated with an uptime check's state.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              state:
                $ref: '#/components/schemas/state'
    all_alerts:
      description: >-
        The response will be a JSON object with a key called `alerts`. This will
        be set to an array of objects, each of which will contain the standard
        attributes associated with an uptime alert.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            allOf:
              - type: object
                properties:
                  alerts:
                    type: array
                    items:
                      $ref: '#/components/schemas/alert'
              - $ref: '#/components/schemas/pagination'
              - $ref: '#/components/schemas/meta'
    existing_alert:
      description: >-
        The response will be a JSON object with a key called `alert`. The value
        of this will be an object that contains the standard attributes
        associated with an uptime alert.
      headers:
        ratelimit-limit:
          $ref: '#/components/headers/ratelimit-limit'
        ratelimit-remaining:
          $ref: '#/components/headers/ratelimit-remaining'
        ratelimit-reset:
          $ref: '#/components/headers/ratelimit-reset'
      content:
        application/json:
          schema:
            type: object
            properties:
              alert:
                $ref: '#/components/schemas/alert'
  links:
    sshKeys_get_by_id:
      operationId: sshKeys_get_by_id
      parameters:
        ssh_key_identifier: $response.body#/ssh_key/id
      description: >-
        The `id` value returned in the response can be used as the
        `ssh_key_identifier` parameter in `GET
        /v2/account/keys/{ssh_key_identifier}`.
    sshKeys_get_by_fingerprint:
      operationId: sshKeys_get_by_fingerprint
      parameters:
        ssh_key_identifier: $response.body#/ssh_key/fingerprint
      description: >-
        The `fingerprint` value returned in the response can be used as the
        `ssh_key_identifier` parameter in `GET
        /v2/account/keys/{ssh_key_identifier}`.
    sshKeys_delete_by_id:
      operationId: sshKeys_delete_by_id
      parameters:
        ssh_key_identifier: $response.body#/ssh_key/id
      description: >-
        The `id` value returned in the response can be used as the 
        `ssh_key_identifier` parameter in `DELETE
        /v2/account/keys/{ssh_key_identifier}`.
    sshKeys_delete_by_fingerprint:
      operationId: ssh_keys_delete_by_fingerprint
      parameters:
        ssh_key_identifier: $response.body#/ssh_key/fingerprint
      description: >-
        The `fingerprint` value returned in the response can be used as the 
        `ssh_key_identifier` parameter in `DELETE
        /v2/account/keys/{ssh_key_identifier}`.
  examples:
    apps:
      value:
        apps:
          - id: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
            owner_uuid: ff36cbc6fd350fe12577f5123133bb5ba01a2419
            spec:
              name: sample-php
              services:
                - name: sample-php
                  git:
                    repo_clone_url: https://github.com/digitalocean/sample-php.git
                    branch: main
                  run_command: heroku-php-apache2
                  environment_slug: php
                  instance_size_slug: apps-s-1vcpu-0.5gb
                  instance_count: 1
                  http_port: 8080
                  routes:
                    - path: /
              domains:
                - domain: sample-php.example.com
                  type: PRIMARY
                  zone: example.com
                  minimum_tls_version: '1.3'
            default_ingress: https://sample-php-iaj87.ondigitalocean.app
            created_at: '2020-11-19T20:27:18Z'
            updated_at: '2020-12-01T00:42:16Z'
            active_deployment:
              id: 3aa4d20e-5527-4c00-b496-601fbd22520a
              spec:
                name: sample-php
                services:
                  - name: sample-php
                    git:
                      repo_clone_url: https://github.com/digitalocean/sample-php.git
                      branch: main
                    run_command: heroku-php-apache2
                    environment_slug: php
                    instance_size_slug: apps-s-1vcpu-0.5gb
                    instance_count: 1
                    http_port: 8080
                    routes:
                      - path: /
                region: fra
                domains:
                  - domain: sample-php.example.com
                    type: PRIMARY
                    zone: example.com
                    minimum_tls_version: '1.3'
              services:
                - name: sample-php
                  source_commit_hash: 54d4a727f457231062439895000d45437c7bb405
              phase_last_updated_at: '2020-12-01T00:42:12Z'
              created_at: '2020-12-01T00:40:05Z'
              updated_at: '2020-12-01T00:42:12Z'
            cause: app spec updated
            pending_deployment:
              id: 3aa4d20e-5527-4c00-b496-601fbd22520a
              spec:
                name: sample-php
                services:
                  - name: sample-php
                    git:
                      repo_clone_url: https://github.com/digitalocean/sample-php.git
                      branch: main
                    run_command: heroku-php-apache2
                    environment_slug: php
                    instance_size_slug: apps-s-1vcpu-0.5gb
                    instance_count: 1
                    http_port: 8080
                    routes:
                      - path: /
                region: fra
                domains:
                  - domain: sample-php.example.com
                    type: PRIMARY
                    zone: example.com
                    minimum_tls_version: '1.3'
              services:
                - name: sample-php
                  source_commit_hash: 54d4a727f457231062439895000d45437c7bb405
              phase_last_updated_at: '2020-12-01T00:42:12Z'
              created_at: '2020-12-01T00:40:05Z'
              updated_at: '2020-12-01T00:42:12Z'
            progress:
              success_steps: 6
              total_steps: 6
              steps:
                - name: build
                  status: SUCCESS
                  steps:
                    - name: initialize
                      status: SUCCESS
                      started_at: '2020-12-01T00:40:11.979305214Z'
                      ended_at: '2020-12-01T00:40:12.470972033Z'
                    - name: components
                      status: SUCCESS
                      steps:
                        - name: sample-php
                          status: SUCCESS
                          started_at: '0001-01-01T00:00:00Z'
                          ended_at: '0001-01-01T00:00:00Z'
                          component_name: sample-php
                          message_base: Building service
                      started_at: '2020-12-01T00:40:12.470996857Z'
                      ended_at: '2020-12-01T00:41:26.180360487Z'
                  started_at: '2020-12-01T00:40:11.979257919Z'
                  ended_at: '2020-12-01T00:41:26.653989756Z'
              phase: ACTIVE
              tier_slug: basic
            last_deployment_created_at: '2020-12-01T00:40:05Z'
            live_url: https://sample-php.example.com
            region:
              slug: fra
              label: Frankfurt
              flag: germany
              continent: Europe
              data_centers:
                - fra1
            tier_slug: basic
            live_url_base: https://sample-php.example.com
            live_domain: sample-php.example.com
            domains:
              - id: 0831f444-a1a7-11ed-828c-ef59494480b5
                phase: ACTIVE
                spec:
                  domain: sample-php.example.com
                  type: PRIMARY
                  zone: example.com
                  minimum_tls_version: '1.3'
                rotate_validation_records: false
                certificate_expires_at: '2024-01-29T23:59:59Z'
                progress:
                  steps:
                    - ended_at: '0001-01-01T00:00:00Z'
                      name: default-ingress-ready
                      started_at: '2023-01-30T22:15:45.021896292Z'
                      status: SUCCESS
                    - ended_at: '0001-01-01T00:00:00Z'
                      name: ensure-zone
                      started_at: '2023-01-30T22:15:45.022017004Z'
                      status: SUCCESS
                    - ended_at: '2023-01-30T15:42:28.50752065Z'
                      name: ensure-ns-records
                      started_at: '2023-01-30T22:15:45.025567874Z'
                      status: SUCCESS
                    - ended_at: '0001-01-01T00:00:00Z'
                      name: verify-nameservers
                      started_at: '2023-01-30T22:15:45.033591906Z'
                      status: SUCCESS
                    - ended_at: '0001-01-01T00:00:00Z'
                      name: ensure-record
                      started_at: '2023-01-30T22:15:45.156750604Z'
                      status: SUCCESS
                    - ended_at: '2023-01-30T15:43:30.258626422Z'
                      name: ensure-alias-record
                      started_at: '2023-01-30T22:15:45.165933869Z'
                      status: SUCCESS
                    - ended_at: '2023-01-30T15:43:30.258808279Z'
                      name: ensure-wildcard-record
                      started_at: '2023-01-30T22:15:45.166093422Z'
                      status: SUCCESS
                    - ended_at: '0001-01-01T00:00:00Z'
                      name: verify-cname
                      started_at: '2023-01-30T22:15:45.166205559Z'
                      status: SUCCESS
                    - ended_at: '2023-01-30T15:43:30.475903785Z'
                      name: ensure-ssl-txt-record-saved
                      started_at: '2023-01-30T22:15:45.295237186Z'
                      status: SUCCESS
                    - ended_at: '2023-01-30T15:43:30.476017236Z'
                      name: ensure-ssl-txt-record
                      started_at: '2023-01-30T22:15:45.295315291Z'
                      status: SUCCESS
                    - ended_at: '2023-01-30T15:43:30.476094058Z'
                      name: ensure-renewal-email
                      started_at: '2023-01-30T22:15:45.295374087Z'
                      status: SUCCESS
                    - ended_at: '0001-01-01T00:00:00Z'
                      name: ensure-CA-authorization
                      started_at: '2023-01-30T22:15:45.295428101Z'
                      status: SUCCESS
                    - ended_at: '0001-01-01T00:00:00Z'
                      name: ensure-certificate
                      started_at: '2023-01-30T22:15:45.978756406Z'
                      status: SUCCESS
                    - ended_at: '2023-01-30T15:43:52.570612857Z'
                      name: create-deployment
                      started_at: '0001-01-01T00:00:00Z'
                      status: SUCCESS
                    - ended_at: '2023-01-30T15:43:31.333582377Z'
                      name: configuration-alert
                      started_at: '2023-01-30T22:15:46.278987808Z'
                      status: SUCCESS
            dedicated_ips:
              - ip: 192.168.1.1
                id: c24d8f48-3bc4-49f5-8ca0-58e8164427ac
                status: ASSIGNED
              - ip: 192.168.1.2
                id: 4768fb15-2837-4dda-9be5-3951df4bc3d0
                status: ASSIGNED
        links:
          pages: {}
        meta:
          total: 1
    app:
      value:
        app:
          id: c2a93513-8d9b-4223-9d61-5e7272c81cf5
          owner_uuid: a4e16f25-cdd1-4483-b246-d77f283c9209
          spec:
            name: sample-golang
            services:
              - name: web
                github:
                  repo: ChiefMateStarbuck/sample-golang
                  branch: main
                run_command: bin/sample-golang
                environment_slug: go
                instance_size_slug: apps-s-1vcpu-0.5gb
                instance_count: 1
                http_port: 8080
                routes:
                  - path: /
            region: ams
            domains:
              - domain: sample-golang.example.com
                zone: example.com
                minimum_tls_version: '1.3'
          default_ingress: https://sample-golang-zyhgn.ondigitalocean.app
          created_at: '2021-02-10T16:45:14Z'
          updated_at: '2021-02-10T17:06:56Z'
          active_deployment:
            id: 991dfa59-6a23-459f-86d6-67dfa2c6f1e3
            spec:
              name: sample-golang
              services:
                - name: web
                  github:
                    repo: ChiefMateStarbuck/sample-golang
                    branch: main
                  run_command: bin/sample-golang
                  environment_slug: go
                  instance_size_slug: apps-s-1vcpu-0.5gb
                  instance_count: 1
                  http_port: 8080
                  routes:
                    - path: /
              region: ams
              domains:
                - domain: sample-golang.example.com
                  zone: example.com
                  minimum_tls_version: '1.3'
            services:
              - name: web
                source_commit_hash: db6936cb46047c576962962eed81ad52c21f35d7
            phase_last_updated_at: '2021-02-10T17:06:53Z'
            created_at: '2021-02-10T17:05:30Z'
            updated_at: '2021-02-10T17:06:53Z'
            cause: manual
            progress:
              success_steps: 6
              total_steps: 6
              steps:
                - name: build
                  status: SUCCESS
                  steps:
                    - name: initialize
                      status: SUCCESS
                      started_at: '2021-02-10T17:05:35.572347485Z'
                      ended_at: '2021-02-10T17:05:36.093995229Z'
                    - name: components
                      status: SUCCESS
                      steps:
                        - name: web
                          status: SUCCESS
                          component_name: web
                          message_base: Building service
                      started_at: '2021-02-10T17:05:36.094015928Z'
                      ended_at: '2021-02-10T17:06:19.461737040Z'
                  started_at: '2021-02-10T17:05:35.572287990Z'
                  ended_at: '2021-02-10T17:06:19.807834070Z'
                - name: deploy
                  status: SUCCESS
                  steps:
                    - name: initialize
                      status: SUCCESS
                      started_at: '2021-02-10T17:06:25.143957508Z'
                      ended_at: '2021-02-10T17:06:26.120343872Z'
                    - name: components
                      status: SUCCESS
                      steps:
                        - name: web
                          status: SUCCESS
                          steps:
                            - name: deploy
                              status: SUCCESS
                              component_name: web
                              message_base: Deploying service
                            - name: wait
                              status: SUCCESS
                              component_name: web
                              message_base: Waiting for service
                          component_name: web
                      started_at: '2021-02-10T17:06:26.120385561Z'
                      ended_at: '2021-02-10T17:06:50.029695913Z'
                    - name: finalize
                      status: SUCCESS
                      started_at: '2021-02-10T17:06:50.348459495Z'
                      ended_at: '2021-02-10T17:06:53.404065961Z'
                  started_at: '2021-02-10T17:06:25.143932418Z'
                  ended_at: '2021-02-10T17:06:53.404104185Z'
            phase: ACTIVE
            tier_slug: basic
          last_deployment_created_at: '2021-02-10T17:05:30Z'
          live_url: https://sample-golang-zyhgn.ondigitalocean.app
          pending_deployment:
            id: 3aa4d20e-5527-4c00-b496-601fbd22520a
            spec:
              name: sample-php
              services:
                - name: sample-php
                  git:
                    repo_clone_url: https://github.com/digitalocean/sample-php.git
                    branch: main
                  run_command: heroku-php-apache2
                  environment_slug: php
                  instance_size_slug: apps-s-1vcpu-0.5gb
                  instance_count: 1
                  http_port: 8080
                  routes:
                    - path: /
              region: fra
              domains:
                - domain: sample-php.example.com
                  type: PRIMARY
                  zone: example.com
                  minimum_tls_version: '1.3'
          region:
            slug: ams
            label: Amsterdam
            flag: netherlands
            continent: Europe
            data_centers:
              - ams3
          tier_slug: basic
          live_url_base: https://sample-golang-zyhgn.ondigitalocean.app
          live_domain: sample-golang-zyhgn.ondigitalocean.app
          project_id: 88b72d1a-b78a-4d9f-9090-b53c4399073f
          domains:
            - id: e206c64e-a1a3-11ed-9e6e-9b7b6dc9a52b
              phase: CONFIGURING
              spec:
                domain: sample-golang.example.com
                type: PRIMARY
                zone: example.com
                minimum_tls_version: '1.3'
              rotate_validation_records: false
              certificate_expires_at: '2024-01-29T23:59:59Z'
              progress:
                steps:
                  - ended_at: '0001-01-01T00:00:00Z'
                    name: default-ingress-ready
                    started_at: '2023-01-30T22:15:45.021896292Z'
                    status: SUCCESS
                  - ended_at: '0001-01-01T00:00:00Z'
                    name: ensure-zone
                    started_at: '2023-01-30T22:15:45.022017004Z'
                    status: SUCCESS
                  - ended_at: '2023-01-30T15:42:28.50752065Z'
                    name: ensure-ns-records
                    started_at: '2023-01-30T22:15:45.025567874Z'
                    status: SUCCESS
                  - ended_at: '0001-01-01T00:00:00Z'
                    name: verify-nameservers
                    started_at: '2023-01-30T22:15:45.033591906Z'
                    status: SUCCESS
                  - ended_at: '0001-01-01T00:00:00Z'
                    name: ensure-record
                    started_at: '2023-01-30T22:15:45.156750604Z'
                    status: SUCCESS
                  - ended_at: '2023-01-30T15:43:30.258626422Z'
                    name: ensure-alias-record
                    started_at: '2023-01-30T22:15:45.165933869Z'
                    status: SUCCESS
                  - ended_at: '2023-01-30T15:43:30.258808279Z'
                    name: ensure-wildcard-record
                    started_at: '2023-01-30T22:15:45.166093422Z'
                    status: SUCCESS
                  - ended_at: '0001-01-01T00:00:00Z'
                    name: verify-cname
                    started_at: '2023-01-30T22:15:45.166205559Z'
                    status: SUCCESS
                  - ended_at: '2023-01-30T15:43:30.475903785Z'
                    name: ensure-ssl-txt-record-saved
                    started_at: '2023-01-30T22:15:45.295237186Z'
                    status: SUCCESS
                  - ended_at: '2023-01-30T15:43:30.476017236Z'
                    name: ensure-ssl-txt-record
                    started_at: '2023-01-30T22:15:45.295315291Z'
                    status: SUCCESS
                  - ended_at: '2023-01-30T15:43:30.476094058Z'
                    name: ensure-renewal-email
                    started_at: '2023-01-30T22:15:45.295374087Z'
                    status: SUCCESS
                  - ended_at: '0001-01-01T00:00:00Z'
                    name: ensure-CA-authorization
                    started_at: '2023-01-30T22:15:45.295428101Z'
                    status: SUCCESS
                  - ended_at: '0001-01-01T00:00:00Z'
                    name: ensure-certificate
                    started_at: '2023-01-30T22:15:45.978756406Z'
                    status: RUNNING
                  - ended_at: '0001-01-01T00:00:00'
                    name: create-deployment
                    started_at: '0001-01-01T00:00:00Z'
                    status: PENDING
                  - ended_at: '0001-01-01T00:00:00'
                    name: configuration-alert
                    started_at: '0001-01-01T00:00:00'
                    status: PENDING
          dedicated_ips:
            - ip: 192.168.1.1
              id: c24d8f48-3bc4-49f5-8ca0-58e8164427ac
              status: ASSIGNED
            - ip: 192.168.1.2
              id: 4768fb15-2837-4dda-9be5-3951df4bc3d0
              status: ASSIGNED
    logs:
      value:
        live_url: https://logs-example/build.log
        url: https://logs/build.log
        historic_logs:
          - https://logs-example/archive/build.log
    deployments:
      value:
        deployments:
          - id: b6bdf840-2854-4f87-a36c-5f231c617c84
            spec:
              name: sample-golang
              services:
                - name: web
                  github:
                    repo: digitalocean/sample-golang
                    branch: branch
                  run_command: bin/sample-golang
                  environment_slug: go
                  instance_size_slug: apps-s-1vcpu-0.5gb
                  instance_count: 2
                  routes:
                    - path: /
              region: ams
            services:
              - name: web
                source_commit_hash: 9a4df0b8e161e323bc3cdf1dc71878080fe144fa
            phase_last_updated_at: '0001-01-01T00:00:00Z'
            created_at: '2020-07-28T18:00:00Z'
            updated_at: '2020-07-28T18:00:00Z'
            cause: commit 9a4df0b pushed to github/digitalocean/sample-golang
            progress:
              pending_steps: 6
              total_steps: 6
              steps:
                - name: build
                  status: PENDING
                  steps:
                    - name: initialize
                      status: PENDING
                    - name: components
                      status: PENDING
                      steps:
                        - name: web
                          status: PENDING
                          component_name: web
                          message_base: Building service
                - name: deploy
                  status: PENDING
                  steps:
                    - name: initialize
                      status: PENDING
                    - name: components
                      status: PENDING
                      steps:
                        - name: web
                          status: PENDING
                          steps:
                            - name: deploy
                              status: PENDING
                              component_name: web
                              message_base: Deploying service
                            - name: wait
                              status: PENDING
                              component_name: web
                              message_base: Waiting for service
                          component_name: web
                    - name: finalize
                      status: PENDING
            phase: PENDING_BUILD
            tier_slug: basic
        links:
          pages: {}
        meta:
          total: 1
    deployment:
      value:
        deployment:
          id: b6bdf840-2854-4f87-a36c-5f231c617c84
          spec:
            name: sample-golang
            services:
              - name: web
                github:
                  repo: digitalocean/sample-golang
                  branch: branch
                run_command: bin/sample-golang
                environment_slug: go
                instance_size_slug: apps-s-1vcpu-0.5gb
                instance_count: 2
                routes:
                  - path: /
            region: ams
          services:
            - name: web
              source_commit_hash: 9a4df0b8e161e323bc3cdf1dc71878080fe144fa
          phase_last_updated_at: '0001-01-01T00:00:00Z'
          created_at: '2020-07-28T18:00:00Z'
          updated_at: '2020-07-28T18:00:00Z'
          cause: commit 9a4df0b pushed to github/digitalocean/sample-golang
          progress:
            pending_steps: 6
            total_steps: 6
            steps:
              - name: build
                status: PENDING
                steps:
                  - name: initialize
                    status: PENDING
                  - name: components
                    status: PENDING
                    steps:
                      - name: web
                        status: PENDING
                        component_name: web
                        message_base: Building service
              - name: deploy
                status: PENDING
                steps:
                  - name: initialize
                    status: PENDING
                  - name: components
                    status: PENDING
                    steps:
                      - name: web
                        status: PENDING
                        steps:
                          - name: deploy
                            status: PENDING
                            component_name: web
                            message_base: Deploying service
                          - name: wait
                            status: PENDING
                            component_name: web
                            message_base: Waiting for service
                        component_name: web
                  - name: finalize
                    status: PENDING
          phase: PENDING_BUILD
          tier_slug: basic
    instance_sizes:
      value:
        instance_sizes:
          - name: Shared 1VCPU 0.5GB
            slug: apps-s-1vcpu-0.5gb
            cpu_type: SHARED
            cpus: '1'
            memory_bytes: '536870912'
            usd_per_month: '5.00'
            usd_per_second: '0.000002066799'
            tier_slug: basic
            single_instance_only: true
            bandwidth_allowance_gib: '50'
          - name: Shared 1VCPU 1GB Fixed
            slug: apps-s-1vcpu-1gb-fixed
            cpu_type: SHARED
            cpus: '1'
            memory_bytes: '1073741824'
            usd_per_month: '10.00'
            usd_per_second: '0.000004133598'
            tier_slug: basic
            single_instance_only: true
            bandwidth_allowance_gib: '100'
          - name: Shared 1VCPU 1GB
            slug: apps-s-1vcpu-1gb
            cpu_type: SHARED
            cpus: '1'
            memory_bytes: '1073741824'
            usd_per_month: '12.00'
            usd_per_second: '0.000004960317'
            tier_slug: professional
            bandwidth_allowance_gib: '150'
          - name: Shared 1VCPU 2GB
            slug: apps-s-1vcpu-2gb
            cpu_type: SHARED
            cpus: '1'
            memory_bytes: '2147483648'
            usd_per_month: '25.00'
            usd_per_second: '0.000010333995'
            tier_slug: professional
            bandwidth_allowance_gib: '200'
          - name: Shared 2VCPU 4GB
            slug: apps-s-2vcpu-4gb
            cpu_type: SHARED
            cpus: '2'
            memory_bytes: '4294967296'
            usd_per_month: '50.00'
            usd_per_second: '0.000020667989'
            tier_slug: professional
            bandwidth_allowance_gib: '250'
          - name: Dedicated 1VCPU 0.5GB
            slug: apps-d-1vcpu-0.5gb
            cpu_type: DEDICATED
            cpus: '1'
            memory_bytes: '536870912'
            usd_per_month: '29.00'
            usd_per_second: '0.000011987434'
            tier_slug: professional
            scalable: true
            bandwidth_allowance_gib: '100'
          - name: Dedicated 1VCPU 1GB
            slug: apps-d-1vcpu-1gb
            cpu_type: DEDICATED
            cpus: '1'
            memory_bytes: '1073741824'
            usd_per_month: '34.00'
            usd_per_second: '0.000014054233'
            tier_slug: professional
            scalable: true
            bandwidth_allowance_gib: '200'
          - name: Dedicated 1VCPU 2GB
            slug: apps-d-1vcpu-2gb
            cpu_type: DEDICATED
            cpus: '1'
            memory_bytes: '2147483648'
            usd_per_month: '39.00'
            usd_per_second: '0.000016121032'
            tier_slug: professional
            scalable: true
            bandwidth_allowance_gib: '300'
          - name: Dedicated 1VCPU 4GB
            slug: apps-d-1vcpu-4gb
            cpu_type: DEDICATED
            cpus: '1'
            memory_bytes: '4294967296'
            usd_per_month: '49.00'
            usd_per_second: '0.000020254630'
            tier_slug: professional
            scalable: true
            bandwidth_allowance_gib: '400'
          - name: Dedicated 2VCPU 4GB
            slug: apps-d-2vcpu-4gb
            cpu_type: DEDICATED
            cpus: '2'
            memory_bytes: '4294967296'
            usd_per_month: '78.00'
            usd_per_second: '0.000032242063'
            tier_slug: professional
            scalable: true
            bandwidth_allowance_gib: '500'
          - name: Dedicated 2VCPU 8GB
            slug: apps-d-2vcpu-8gb
            cpu_type: DEDICATED
            cpus: '2'
            memory_bytes: '8589934592'
            usd_per_month: '98.00'
            usd_per_second: '0.000040509259'
            tier_slug: professional
            scalable: true
            bandwidth_allowance_gib: '600'
          - name: Dedicated 4VCPU 8GB
            slug: apps-d-4vcpu-8gb
            cpu_type: DEDICATED
            cpus: '4'
            memory_bytes: '8589934592'
            usd_per_month: '156.00'
            usd_per_second: '0.000064484127'
            tier_slug: professional
            scalable: true
            bandwidth_allowance_gib: '700'
          - name: Dedicated 4VCPU 16GB
            slug: apps-d-4vcpu-16gb
            cpu_type: DEDICATED
            cpus: '4'
            memory_bytes: '17179869184'
            usd_per_month: '196.00'
            usd_per_second: '0.000081018519'
            tier_slug: professional
            scalable: true
            bandwidth_allowance_gib: '800'
          - name: Dedicated 8VCPU 32GB
            slug: apps-d-8vcpu-32gb
            cpu_type: DEDICATED
            cpus: '8'
            memory_bytes: '34359738368'
            usd_per_month: '392.00'
            usd_per_second: '0.000162037037'
            tier_slug: professional
            scalable: true
            bandwidth_allowance_gib: '900'
    instance_size:
      value:
        instance_size:
          name: Shared 1VCPU 0.5GB
          slug: apps-s-1vcpu-0.5gb
          cpu_type: SHARED
          cpus: '1'
          memory_bytes: '536870912'
          usd_per_month: '5.00'
          usd_per_second: '0.000002066799'
          tier_slug: basic
          single_instance_only: true
          bandwidth_allowance_gib: '50'
    regions:
      value:
        regions:
          - slug: ams
            label: Amsterdam
            flag: netherlands
            continent: Europe
            data_centers:
              - ams3
          - slug: nyc
            label: New York
            flag: usa
            continent: North America
            data_centers:
              - nyc1
              - nyc3
            default: true
          - slug: fra
            label: Frankfurt
            flag: germany
            continent: Europe
            data_centers:
              - fra1
          - slug: sfo
            label: San Francisco
            flag: usa
            continent: North America
            data_centers:
              - sfo3
          - slug: sgp
            label: Singapore
            flag: singapore
            continent: Asia
            data_centers:
              - sgp1
          - slug: blr
            label: Bangalore
            flag: india
            continent: Asia
            data_centers:
              - blr1
          - slug: tor
            label: Toronto
            flag: canada
            continent: North America
            data_centers:
              - tor1
          - slug: lon
            label: London
            flag: uk
            continent: Europe
            data_centers:
              - lon1
    propose:
      value:
        app_name_available: true
        existing_static_apps: '2'
        max_free_static_apps: '3'
        spec:
          name: sample-golang
          services:
            - name: web
              github:
                repo: digitalocean/sample-golang
                branch: branch
              run_command: bin/sample-golang
              environment_slug: go
              instance_size_slug: apps-s-1vcpu-0.5gb
              instance_count: 1
              http_port: 8080
              routes:
                - path: /
          region: ams
        app_cost: 5
    alerts:
      value:
        alerts:
          - id: e552e1f9-c1b0-4e6d-8777-ad6f27767306
            spec:
              rule: DEPLOYMENT_FAILED
            emails:
              - sammy@digitalocean.com
            phase: ACTIVE
            progress:
              steps:
                - name: alert-configure-insight-alert
                  status: SUCCESS
                  started_at: '2020-07-28T18:00:00Z'
                  ended_at: '2020-07-28T18:00:00Z'
          - id: b58cc9d4-0702-4ffd-ab45-4c2a8d979527
            spec:
              rule: CPU_UTILIZATION
              operator: GREATER_THAN
              value: 85
              window: FIVE_MINUTES
            emails:
              - sammy@digitalocean.com
            phase: ACTIVE
            progress:
              steps:
                - name: alert-configure-insight-alert
                  status: SUCCESS
                  started_at: '2020-07-28T18:00:00Z'
                  ended_at: '2020-07-28T18:00:00Z'
    alert:
      value:
        alert:
          id: e552e1f9-c1b0-4e6d-8777-ad6f27767306
          spec:
            rule: DEPLOYMENT_FAILED
          emails:
            - sammy@digitalocean.com
          phase: ACTIVE
          progress:
            steps:
              - name: alert-configure-insight-alert
                status: SUCCESS
                started_at: '2020-07-28T18:00:00Z'
                ended_at: '2020-07-28T18:00:00Z'
    app_bandwidth_usage:
      value:
        app_bandwidth_usage:
          - app_id: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
            bandwidth_bytes: '513668'
        date: '2023-01-17T00:00:00Z'
    app_bandwidth_usage_multiple:
      value:
        app_bandwidth_usage:
          - app_id: 4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf
            bandwidth_bytes: '513668'
          - app_id: c2a93513-8d9b-4223-9d61-5e7272c81cf5
            bandwidth_bytes: '254847'
        date: '2023-01-17T00:00:00Z'
    certificates_all:
      value:
        certificates:
          - id: 892071a0-bb95-49bc-8021-3afd67a210bf
            name: web-cert-01
            not_after: '2017-02-22T00:23:00Z'
            sha1_fingerprint: dfcc9f57d86bf58e321c2c6c31c7a971be244ac7
            created_at: '2017-02-08T16:02:37Z'
            dns_names:
              - ''
            state: verified
            type: custom
          - id: ba9b9c18-6c59-46c2-99df-70da170a42ba
            name: web-cert-02
            not_after: '2018-06-07T17:44:12Z'
            sha1_fingerprint: 479c82b5c63cb6d3e6fac4624d58a33b267e166c
            created_at: '2018-03-09T18:44:11Z'
            dns_names:
              - www.example.com
              - example.com
            state: verified
            type: lets_encrypt
        links: {}
        meta:
          total: 2
    certificates_custom:
      value:
        certificate:
          id: 892071a0-bb95-49bc-8021-3afd67a210bf
          name: web-cert-01
          not_after: '2017-02-22T00:23:00Z'
          sha1_fingerprint: dfcc9f57d86bf58e321c2c6c31c7a971be244ac7
          created_at: '2017-02-08T16:02:37Z'
          dns_names:
            - ''
          state: verified
          type: custom
    certificates_lets_encrypt_pending:
      value:
        certificate:
          id: ba9b9c18-6c59-46c2-99df-70da170a42ba
          name: web-cert-02
          not_after: '2018-06-07T17:44:12Z'
          sha1_fingerprint: 479c82b5c63cb6d3e6fac4624d58a33b267e166c
          created_at: '2018-03-09T18:44:11Z'
          dns_names:
            - www.example.com
            - example.com
          state: pending
          type: lets_encrypt
    certificates_lets_encrypt:
      value:
        certificate:
          id: ba9b9c18-6c59-46c2-99df-70da170a42ba
          name: web-cert-02
          not_after: '2018-06-07T17:44:12Z'
          sha1_fingerprint: 479c82b5c63cb6d3e6fac4624d58a33b267e166c
          created_at: '2018-03-09T18:44:11Z'
          dns_names:
            - www.example.com
            - example.com
          state: verified
          type: lets_encrypt
    domain_records_all:
      value:
        domain_records:
          - id: 28448429
            type: NS
            name: '@'
            data: ns1.digitalocean.com
            priority: null
            port: null
            ttl: 1800
            weight: null
            flags: null
            tag: null
          - id: 28448430
            type: NS
            name: '@'
            data: ns2.digitalocean.com
            priority: null
            port: null
            ttl: 1800
            weight: null
            flags: null
            tag: null
          - id: 28448431
            type: NS
            name: '@'
            data: ns3.digitalocean.com
            priority: null
            port: null
            ttl: 1800
            weight: null
            flags: null
            tag: null
          - id: 28448432
            type: A
            name: '@'
            data: 1.2.3.4
            priority: null
            port: null
            ttl: 1800
            weight: null
            flags: null
            tag: null
        links: {}
        meta:
          total: 4
    droplets_all:
      value:
        droplets:
          - id: 3164444
            name: example.com
            memory: 1024
            vcpus: 1
            disk: 25
            locked: false
            status: active
            kernel: null
            created_at: '2020-07-21T18:37:44Z'
            features:
              - backups
              - private_networking
              - ipv6
            backup_ids:
              - 53893572
            next_backup_window:
              start: '2020-07-30T00:00:00Z'
              end: '2020-07-30T23:00:00Z'
            snapshot_ids:
              - 67512819
            image:
              id: 63663980
              name: 20.04 (LTS) x64
              distribution: Ubuntu
              slug: ubuntu-20-04-x64
              public: true
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              created_at: '2020-05-15T05:47:50Z'
              type: snapshot
              min_disk_size: 20
              size_gigabytes: 2.36
              description: ''
              tags: []
              status: available
              error_message: ''
            volume_ids: []
            size:
              slug: s-1vcpu-1gb
              memory: 1024
              vcpus: 1
              disk: 25
              transfer: 1
              price_monthly: 5
              price_hourly: 0.00743999984115362
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              available: true
              description: Basic
            size_slug: s-1vcpu-1gb
            networks:
              v4:
                - ip_address: 10.128.192.124
                  netmask: 255.255.0.0
                  gateway: nil
                  type: private
                - ip_address: 192.241.165.154
                  netmask: 255.255.255.0
                  gateway: 192.241.165.1
                  type: public
              v6:
                - ip_address: 2604:a880:0:1010::18a:a001
                  netmask: 64
                  gateway: 2604:a880:0:1010::1
                  type: public
            region:
              name: New York 3
              slug: nyc3
              features:
                - private_networking
                - backups
                - ipv6
                - metadata
                - install_agent
                - storage
                - image_transfer
              available: true
              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
            tags:
              - web
              - env:prod
            vpc_uuid: 760e09ef-dc84-11e8-981e-3cfdfeaae000
          - id: 3164459
            name: assets.example.com
            memory: 1024
            vcpus: 1
            disk: 25
            locked: false
            status: active
            kernel: null
            created_at: '2020-07-21T18:42:27Z'
            features:
              - private_networking
            backup_ids: []
            next_backup_window:
              start: '2020-07-30T00:00:00Z'
              end: '2020-07-30T23:00:00Z'
            snapshot_ids: []
            image:
              id: 63663980
              name: 20.04 (LTS) x64
              distribution: Ubuntu
              slug: ubuntu-20-04-x64
              public: true
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              created_at: '2020-05-15T05:47:50Z'
              type: snapshot
              min_disk_size: 20
              size_gigabytes: 2.36
              description: ''
              tags: []
              status: available
              error_message: ''
            volume_ids:
              - 506f78a4-e098-11e5-ad9f-000f53306ae1
            size:
              slug: s-1vcpu-1gb
              memory: 1024
              vcpus: 1
              disk: 25
              transfer: 1
              price_monthly: 5
              price_hourly: 0.00743999984115362
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              available: true
              description: Basic
            size_slug: s-1vcpu-1gb
            networks:
              v4:
                - ip_address: 10.128.192.138
                  netmask: 255.255.0.0
                  gateway: nil
                  type: private
                - ip_address: 162.243.0.4
                  netmask: 255.255.255.0
                  gateway: 162.243.0.1
                  type: public
              v6: []
            region:
              name: New York 3
              slug: nyc3
              features:
                - private_networking
                - backups
                - ipv6
                - metadata
                - install_agent
                - storage
                - image_transfer
              available: true
              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
            tags:
              - storage
              - env:prod
            vpc_uuid: 760e09ef-dc84-11e8-981e-3cfdfeaae000
          - id: 3164412
            name: stage.example.com
            memory: 1024
            vcpus: 1
            disk: 25
            locked: false
            status: active
            kernel: null
            created_at: '2020-07-21T18:32:55Z'
            features:
              - private_networking
            backup_ids: []
            next_backup_window:
              start: '2020-07-30T00:00:00Z'
              end: '2020-07-30T23:00:00Z'
            snapshot_ids: []
            image:
              id: 63663980
              name: 20.04 (LTS) x64
              distribution: Ubuntu
              slug: ubuntu-20-04-x64
              public: true
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              created_at: '2020-05-15T05:47:50Z'
              type: snapshot
              min_disk_size: 20
              size_gigabytes: 2.36
              description: ''
              tags: []
              status: available
              error_message: ''
            volume_ids:
              - 7724db7c-e098-11e5-b522-000f53304e51
            size:
              slug: s-1vcpu-1gb
              memory: 1024
              vcpus: 1
              disk: 25
              transfer: 1
              price_monthly: 5
              price_hourly: 0.00743999984115362
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              available: true
              description: Basic
            size_slug: s-1vcpu-1gb
            networks:
              v4:
                - ip_address: 10.128.192.125
                  netmask: 255.255.0.0
                  gateway: nil
                  type: private
                - ip_address: 192.241.247.248
                  netmask: 255.255.255.0
                  gateway: 192.241.247.1
                  type: public
              v6: []
            region:
              name: New York 3
              slug: nyc3
              features:
                - private_networking
                - backups
                - ipv6
                - metadata
                - install_agent
                - storage
                - image_transfer
              available: true
              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
            tags:
              - env:stage
            vpc_uuid: 5a4981aa-9653-4bd1-bef5-d6bff52042e4
        links:
          pages: {}
        meta:
          total: 3
    droplets_tagged:
      value:
        droplets:
          - id: 3164444
            name: example.com
            memory: 1024
            vcpus: 1
            disk: 25
            locked: false
            status: active
            kernel: null
            created_at: '2020-07-21T18:37:44Z'
            features:
              - backups
              - private_networking
              - ipv6
            backup_ids:
              - 53893572
            next_backup_window:
              start: '2020-07-30T00:00:00Z'
              end: '2020-07-30T23:00:00Z'
            snapshot_ids:
              - 67512819
            image:
              id: 63663980
              name: 20.04 (LTS) x64
              distribution: Ubuntu
              slug: ubuntu-20-04-x64
              public: true
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              created_at: '2020-05-15T05:47:50Z'
              type: snapshot
              min_disk_size: 20
              size_gigabytes: 2.36
              description: ''
              tags: []
              status: available
              error_message: ''
            volume_ids: []
            size:
              slug: s-1vcpu-1gb
              memory: 1024
              vcpus: 1
              disk: 25
              transfer: 1
              price_monthly: 5
              price_hourly: 0.00743999984115362
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              available: true
              description: Basic
            size_slug: s-1vcpu-1gb
            networks:
              v4:
                - ip_address: 10.128.192.124
                  netmask: 255.255.0.0
                  gateway: nil
                  type: private
                - ip_address: 192.241.165.154
                  netmask: 255.255.255.0
                  gateway: 192.241.165.1
                  type: public
              v6:
                - ip_address: 2604:a880:0:1010::18a:a001
                  netmask: 64
                  gateway: 2604:a880:0:1010::1
                  type: public
            region:
              name: New York 3
              slug: nyc3
              features:
                - private_networking
                - backups
                - ipv6
                - metadata
                - install_agent
                - storage
                - image_transfer
              available: true
              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
            tags:
              - web
              - env:prod
            vpc_uuid: 760e09ef-dc84-11e8-981e-3cfdfeaae000
          - id: 3164459
            name: assets.example.com
            memory: 1024
            vcpus: 1
            disk: 25
            locked: false
            status: active
            kernel: null
            created_at: '2020-07-21T18:42:27Z'
            features:
              - private_networking
            backup_ids: []
            next_backup_window:
              start: '2020-07-30T00:00:00Z'
              end: '2020-07-30T23:00:00Z'
            snapshot_ids: []
            image:
              id: 63663980
              name: 20.04 (LTS) x64
              distribution: Ubuntu
              slug: ubuntu-20-04-x64
              public: true
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              created_at: '2020-05-15T05:47:50Z'
              type: snapshot
              min_disk_size: 20
              size_gigabytes: 2.36
              description: ''
              tags: []
              status: available
              error_message: ''
            volume_ids:
              - 506f78a4-e098-11e5-ad9f-000f53306ae1
            size:
              slug: s-1vcpu-1gb
              memory: 1024
              vcpus: 1
              disk: 25
              transfer: 1
              price_monthly: 5
              price_hourly: 0.00743999984115362
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              available: true
              description: Basic
            size_slug: s-1vcpu-1gb
            networks:
              v4:
                - ip_address: 10.128.192.138
                  netmask: 255.255.0.0
                  gateway: nil
                  type: private
                - ip_address: 162.243.0.4
                  netmask: 255.255.255.0
                  gateway: 162.243.0.1
                  type: public
              v6: []
            region:
              name: New York 3
              slug: nyc3
              features:
                - private_networking
                - backups
                - ipv6
                - metadata
                - install_agent
                - storage
                - image_transfer
              available: true
              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
            tags:
              - storage
              - env:prod
            vpc_uuid: 760e09ef-dc84-11e8-981e-3cfdfeaae000
        links:
          pages: {}
        meta:
          total: 2
    droplet_create_request:
      value:
        name: example.com
        region: nyc3
        size: s-1vcpu-1gb
        image: ubuntu-20-04-x64
        ssh_keys:
          - 289794
          - 3b:16:e4:bf:8b:00:8b:b8:59:8c:a9:d3:f0:19:fa:45
        backups: true
        ipv6: true
        monitoring: true
        tags:
          - env:prod
          - web
        user_data: |
          #cloud-config
          runcmd:
            - touch /test.txt
        vpc_uuid: 760e09ef-dc84-11e8-981e-3cfdfeaae000
    droplet_multi_create_request:
      value:
        names:
          - sub-01.example.com
          - sub-02.example.com
        region: nyc3
        size: s-1vcpu-1gb
        image: ubuntu-20-04-x64
        ssh_keys:
          - 289794
          - 3b:16:e4:bf:8b:00:8b:b8:59:8c:a9:d3:f0:19:fa:45
        backups: true
        ipv6: true
        monitoring: true
        tags:
          - env:prod
          - web
        user_data: |
          #cloud-config
          runcmd:
            - touch /test.txt
        vpc_uuid: 760e09ef-dc84-11e8-981e-3cfdfeaae000
    droplet_create_response:
      value:
        droplet:
          id: 3164444
          name: example.com
          memory: 1024
          vcpus: 1
          disk: 25
          locked: false
          status: new
          kernel: null
          created_at: '2020-07-21T18:37:44Z'
          features:
            - backups
            - private_networking
            - ipv6
            - monitoring
          backup_ids: []
          next_backup_window: null
          snapshot_ids: []
          image:
            id: 63663980
            name: 20.04 (LTS) x64
            distribution: Ubuntu
            slug: ubuntu-20-04-x64
            public: true
            regions:
              - ams2
              - ams3
              - blr1
              - fra1
              - lon1
              - nyc1
              - nyc2
              - nyc3
              - sfo1
              - sfo2
              - sfo3
              - sgp1
              - tor1
            created_at: '2020-05-15T05:47:50Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.36
            description: ''
            tags: []
            status: available
            error_message: ''
          volume_ids: []
          size:
            slug: s-1vcpu-1gb
            memory: 1024
            vcpus: 1
            disk: 25
            transfer: 1
            price_monthly: 5
            price_hourly: 0.00743999984115362
            regions:
              - ams2
              - ams3
              - blr1
              - fra1
              - lon1
              - nyc1
              - nyc2
              - nyc3
              - sfo1
              - sfo2
              - sfo3
              - sgp1
              - tor1
            available: true
            description: Basic
          size_slug: s-1vcpu-1gb
          networks:
            v4: []
            v6: []
          region:
            name: New York 3
            slug: nyc3
            features:
              - private_networking
              - backups
              - ipv6
              - metadata
              - install_agent
              - storage
              - image_transfer
            available: true
            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
          tags:
            - web
            - env:prod
        links:
          actions:
            - id: 7515
              rel: create
              href: https://api.digitalocean.com/v2/actions/7515
    droplet_multi_create_response:
      value:
        droplets:
          - id: 3164444
            name: sub-01.example.com
            memory: 1024
            vcpus: 1
            disk: 25
            locked: false
            status: new
            kernel: null
            created_at: '2020-07-21T18:37:44Z'
            features:
              - backups
              - private_networking
              - ipv6
              - monitoring
            backup_ids: []
            next_backup_window: null
            snapshot_ids: []
            image:
              id: 63663980
              name: 20.04 (LTS) x64
              distribution: Ubuntu
              slug: ubuntu-20-04-x64
              public: true
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              created_at: '2020-05-15T05:47:50Z'
              type: snapshot
              min_disk_size: 20
              size_gigabytes: 2.36
              description: ''
              tags: []
              status: available
              error_message: ''
            volume_ids: []
            size:
              slug: s-1vcpu-1gb
              memory: 1024
              vcpus: 1
              disk: 25
              transfer: 1
              price_monthly: 5
              price_hourly: 0.00743999984115362
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              available: true
              description: Basic
            size_slug: s-1vcpu-1gb
            networks:
              v4: []
              v6: []
            region:
              name: New York 3
              slug: nyc3
              features:
                - private_networking
                - backups
                - ipv6
                - metadata
                - install_agent
                - storage
                - image_transfer
              available: true
              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
            tags:
              - web
              - env:prod
          - id: 3164445
            name: sub-02.example.com
            memory: 1024
            vcpus: 1
            disk: 25
            locked: false
            status: new
            kernel: null
            created_at: '2020-07-21T18:37:44Z'
            features:
              - backups
              - private_networking
              - ipv6
              - monitoring
            backup_ids: []
            next_backup_window: null
            snapshot_ids: []
            image:
              id: 63663980
              name: 20.04 (LTS) x64
              distribution: Ubuntu
              slug: ubuntu-20-04-x64
              public: true
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              created_at: '2020-05-15T05:47:50Z'
              type: snapshot
              min_disk_size: 20
              size_gigabytes: 2.36
              description: ''
              tags: []
              status: available
              error_message: ''
            volume_ids: []
            size:
              slug: s-1vcpu-1gb
              memory: 1024
              vcpus: 1
              disk: 25
              transfer: 1
              price_monthly: 5
              price_hourly: 0.00743999984115362
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              available: true
              description: Basic
            size_slug: s-1vcpu-1gb
            networks:
              v4: []
              v6: []
            region:
              name: New York 3
              slug: nyc3
              features:
                - private_networking
                - backups
                - ipv6
                - metadata
                - install_agent
                - storage
                - image_transfer
              available: true
              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
            tags:
              - web
              - env:prod
        links:
          actions:
            - id: 7515
              rel: create
              href: https://api.digitalocean.com/v2/actions/7515
            - id: 7516
              rel: create
              href: https://api.digitalocean.com/v2/actions/7516
    droplet_single:
      value:
        droplet:
          id: 3164444
          name: example.com
          memory: 1024
          vcpus: 1
          disk: 25
          locked: false
          status: active
          kernel: null
          created_at: '2020-07-21T18:37:44Z'
          features:
            - backups
            - private_networking
            - ipv6
          backup_ids:
            - 53893572
          next_backup_window:
            start: '2020-07-30T00:00:00Z'
            end: '2020-07-30T23:00:00Z'
          snapshot_ids:
            - 67512819
          image:
            id: 63663980
            name: 20.04 (LTS) x64
            distribution: Ubuntu
            slug: ubuntu-20-04-x64
            public: true
            regions:
              - ams2
              - ams3
              - blr1
              - fra1
              - lon1
              - nyc1
              - nyc2
              - nyc3
              - sfo1
              - sfo2
              - sfo3
              - sgp1
              - tor1
            created_at: '2020-05-15T05:47:50Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.36
            description: ''
            tags: []
            status: available
            error_message: ''
          volume_ids: []
          size:
            slug: s-1vcpu-1gb
            memory: 1024
            vcpus: 1
            disk: 25
            transfer: 1
            price_monthly: 5
            price_hourly: 0.00743999984115362
            regions:
              - ams2
              - ams3
              - blr1
              - fra1
              - lon1
              - nyc1
              - nyc2
              - nyc3
              - sfo1
              - sfo2
              - sfo3
              - sgp1
              - tor1
            available: true
            description: Basic
          size_slug: s-1vcpu-1gb
          networks:
            v4:
              - ip_address: 10.128.192.124
                netmask: 255.255.0.0
                gateway: nil
                type: private
              - ip_address: 192.241.165.154
                netmask: 255.255.255.0
                gateway: 192.241.165.1
                type: public
            v6:
              - ip_address: 2604:a880:0:1010::18a:a001
                netmask: 64
                gateway: 2604:a880:0:1010::1
                type: public
          region:
            name: New York 3
            slug: nyc3
            features:
              - private_networking
              - backups
              - ipv6
              - metadata
              - install_agent
              - storage
              - image_transfer
            available: true
            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
          tags:
            - web
            - env:prod
          vpc_uuid: 760e09ef-dc84-11e8-981e-3cfdfeaae000
    floating_ip_assigning:
      summary: Assigning to Droplet
      value:
        floating_ip:
          ip: 45.55.96.47
          droplet: null
          region:
            name: New York 3
            slug: nyc3
            features:
              - private_networking
              - backups
              - ipv6
              - metadata
              - install_agent
              - storage
              - image_transfer
            available: true
            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
          locked: true
          project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
        links:
          droplets:
            - id: 213939433
              rel: droplet
              href: https://api.digitalocean.com/v2/droplets/213939433
          actions:
            - id: 1088924622
              rel: assign_ip
              href: https://api.digitalocean.com/v2/actions/1088924622
    floating_ip_reserving:
      summary: Reserving to Region
      value:
        floating_ip:
          ip: 45.55.96.47
          droplet: null
          region:
            name: New York 3
            slug: nyc3
            features:
              - private_networking
              - backups
              - ipv6
              - metadata
              - install_agent
              - storage
              - image_transfer
            available: true
            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
          locked: false
          project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
        links: {}
    floating_ip_assigned:
      summary: Assigned to Droplet
      value:
        floating_ip:
          ip: 45.55.96.47
          droplet:
            id: 3164444
            name: example.com
            memory: 1024
            vcpus: 1
            disk: 25
            locked: false
            status: active
            kernel: null
            created_at: '2020-07-21T18:37:44Z'
            features:
              - backups
              - private_networking
              - ipv6
            backup_ids:
              - 53893572
            next_backup_window:
              start: '2020-07-30T00:00:00Z'
              end: '2020-07-30T23:00:00Z'
            snapshot_ids:
              - 67512819
            image:
              id: 63663980
              name: 20.04 (LTS) x64
              type: base
              distribution: Ubuntu
              slug: ubuntu-20-04-x64
              public: true
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              created_at: '2020-05-15T05:47:50Z'
              min_disk_size: 20
              size_gigabytes: 2.36
              description: ''
              tags: []
              status: available
              error_message: ''
            volume_ids: []
            size:
              slug: s-1vcpu-1gb
              memory: 1024
              vcpus: 1
              disk: 25
              transfer: 1
              price_monthly: 5
              price_hourly: 0.00743999984115362
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              available: true
              description: Basic
            size_slug: s-1vcpu-1gb
            networks:
              v4:
                - ip_address: 10.128.192.124
                  netmask: 255.255.0.0
                  gateway: nil
                  type: private
                - ip_address: 192.241.165.154
                  netmask: 255.255.255.0
                  gateway: 192.241.165.1
                  type: public
              v6:
                - ip_address: 2604:a880:0:1010::18a:a001
                  netmask: 64
                  gateway: 2604:a880:0:1010::1
                  type: public
            region:
              name: New York 3
              slug: nyc3
              features:
                - backups
                - ipv6
                - metadata
                - install_agent
                - storage
                - image_transfer
              available: true
              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
            tags:
              - web
              - env:prod
            vpc_uuid: 760e09ef-dc84-11e8-981e-3cfdfeaae000
          region:
            name: New York 3
            slug: nyc3
            features:
              - backups
              - ipv6
              - metadata
              - install_agent
              - storage
              - image_transfer
            available: true
            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
          locked: false
          project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
    floating_ip_reserved:
      summary: Reserved to Region
      value:
        floating_ip:
          ip: 45.55.96.47
          droplet: null
          region:
            name: New York 3
            slug: nyc3
            features:
              - private_networking
              - backups
              - ipv6
              - metadata
              - install_agent
              - storage
              - image_transfer
            available: true
            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
          locked: false
          project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
    images_all:
      value:
        images:
          - id: 7555620
            name: Nifty New Snapshot
            distribution: Ubuntu
            slug: null
            public: false
            regions:
              - nyc2
              - nyc3
            created_at: '2014-11-04T22:23:02Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.34
            description: ''
            tags: []
            status: available
            error_message: ''
          - id: 7555621
            name: Another Snapshot
            distribution: Ubuntu
            slug: null
            public: false
            regions:
              - nyc2
            created_at: '2014-11-04T22:23:02Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.34
            description: ''
            tags: []
            status: available
            error_message: ''
          - id: 63663980
            name: 20.04 (LTS) x64
            distribution: Ubuntu
            slug: ubuntu-20-04-x64
            public: true
            regions:
              - nyc2
              - nyc3
            created_at: '2020-05-15T05:47:50Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.36
            description: ''
            tags: []
            status: available
            error_message: ''
          - id: 7555621
            name: A custom image
            distribution: Arch Linux
            slug: null
            public: false
            regions:
              - nyc3
            created_at: '2014-11-04T22:23:02Z'
            type: custom
            min_disk_size: 20
            size_gigabytes: 2.34
            description: ''
            tags: []
            status: available
            error_message: ''
          - id: 7555621
            name: An APP image
            distribution: Fedora
            slug: null
            public: false
            regions:
              - nyc2
              - nyc3
            created_at: '2014-11-04T22:23:02Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.34
            description: ''
            tags: []
            status: available
            error_message: ''
          - id: 7555621
            name: A simple tagged image
            distribution: CentOS
            slug: null
            public: false
            regions:
              - nyc2
              - nyc3
            created_at: '2014-11-04T22:23:02Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.34
            description: ''
            tags:
              - simple-image
            status: available
            error_message: ''
        links:
          pages: {}
        meta:
          total: 6
    images_snapshots:
      value:
        images:
          - id: 7555620
            name: Nifty New Snapshot
            distribution: Ubuntu
            slug: null
            public: false
            regions:
              - nyc2
              - nyc3
            created_at: '2014-11-04T22:23:02Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.34
            description: ''
            tags: []
            status: available
            error_message: ''
          - id: 7555621
            name: Another Snapshot
            distribution: Ubuntu
            slug: null
            public: false
            regions:
              - nyc2
            created_at: '2014-11-04T22:23:02Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.34
            description: ''
            tags: []
            status: available
            error_message: ''
        links:
          pages: {}
        meta:
          total: 2
    images_distribution:
      description: >
        **Important:**  

        The `type` query parameter is not directly related to the `type`
        attribute.

        The main thing to remember here is that DigitalOcean-produced
        distribution images will have `snapshot` as the type attribute. 
      value:
        images:
          - id: 63663980
            name: 20.04 (LTS) x64
            distribution: Ubuntu
            slug: ubuntu-20-04-x64
            public: true
            regions:
              - nyc2
              - nyc3
            created_at: '2020-05-15T05:47:50Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.36
            description: ''
            tags: []
            status: available
            error_message: ''
        links:
          pages: {}
        meta:
          total: 1
    images_custom:
      value:
        images:
          - id: 7555621
            name: A custom image
            distribution: Arch Linux
            slug: null
            public: false
            regions:
              - nyc3
            created_at: '2014-11-04T22:23:02Z'
            type: custom
            min_disk_size: 20
            size_gigabytes: 2.34
            description: ''
            tags: []
            status: available
            error_message: ''
        links:
          pages: {}
        meta:
          total: 1
    images_application:
      description: >
        **Important:**  

        The `type` query parameter is not directly related to the `type`
        attribute.
      value:
        images:
          - id: 7555621
            name: An APP image
            distribution: Fedora
            slug: null
            public: false
            regions:
              - nyc2
              - nyc3
            created_at: '2014-11-04T22:23:02Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.34
            description: ''
            tags: []
            status: available
            error_message: ''
        links:
          pages: {}
        meta:
          total: 1
    images_tagged:
      value:
        images:
          - id: 7555621
            name: A simple tagged image
            distribution: CentOS
            slug: null
            public: false
            regions:
              - nyc2
              - nyc3
            created_at: '2014-11-04T22:23:02Z'
            type: snapshot
            min_disk_size: 20
            size_gigabytes: 2.34
            description: ''
            tags:
              - simple-image
            status: available
            error_message: ''
        links:
          pages: {}
        meta:
          total: 1
    kubernetes_clusters_all:
      value:
        kubernetes_clusters:
          - id: bd5f5959-5e1e-4205-a714-a914373942af
            name: prod-cluster-01
            region: nyc1
            version: 1.18.6-do.0
            cluster_subnet: 10.244.0.0/16
            service_subnet: 10.245.0.0/16
            vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
            ipv4: 68.183.121.157
            endpoint: >-
              https://bd5f5959-5e1e-4205-a714-a914373942af.k8s.ondigitalocean.com
            tags:
              - production
              - web-team
              - k8s
              - k8s:bd5f5959-5e1e-4205-a714-a914373942af
            node_pools:
              - id: cdda885e-7663-40c8-bc74-3a036c66545d
                name: frontend-pool
                size: s-1vcpu-2gb
                count: 3
                tags:
                  - production
                  - web-team
                  - k8s
                  - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                  - k8s:worker
                labels: null
                taints: []
                auto_scale: false
                min_nodes: 0
                max_nodes: 0
                nodes:
                  - id: 478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f
                    name: adoring-newton-3niq
                    status:
                      state: provisioning
                    droplet_id: '205545370'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: ad12e744-c2a9-473d-8aa9-be5680500eb1
                    name: adoring-newton-3nim
                    status:
                      state: provisioning
                    droplet_id: '205545371'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: e46e8d07-f58f-4ff1-9737-97246364400e
                    name: adoring-newton-3ni7
                    status:
                      state: provisioning
                    droplet_id: '205545372'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
              - id: f49f4379-7e7f-4af5-aeb6-0354bd840778
                name: backend-pool
                size: g-4vcpu-16gb
                count: 2
                tags:
                  - production
                  - web-team
                  - k8s
                  - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                  - k8s:worker
                labels:
                  service: backend
                  priority: high
                taints: []
                auto_scale: true
                min_nodes: 2
                max_nodes: 5
                nodes:
                  - id: 3385619f-8ec3-42ba-bb23-8d21b8ba7518
                    name: affectionate-nightingale-3nif
                    status:
                      state: provisioning
                    droplet_id: '205545373'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
                  - id: 4b8f60ff-ba06-4523-a6a4-b8148244c7e6
                    name: affectionate-nightingale-3niy
                    status:
                      state: provisioning
                    droplet_id: '205545374'
                    created_at: '2018-11-15T16:00:11Z'
                    updated_at: '2018-11-15T16:00:11Z'
            maintenance_policy:
              start_time: '00:00'
              duration: 4h0m0s
              day: any
            auto_upgrade: false
            status:
              state: provisioning
              message: provisioning
            created_at: '2018-11-15T16:00:11Z'
            updated_at: '2018-11-15T16:00:11Z'
            surge_upgrade: false
            registry_enabled: false
            ha: false
            control_plane_firewall:
              enabled: true
              allowed_addresses:
                - 1.2.3.4/32
                - 1.1.0.0/16
        meta:
          total: 1
    kubernetes_clusters_basic_request:
      value:
        name: prod-cluster-01
        region: nyc1
        version: 1.18.6-do.0
        node_pools:
          - size: s-1vcpu-2gb
            count: 3
            name: worker-pool
    kubernetes_clusters_multi_pool_request:
      description: >
        This example request creates a Kubernetes cluster with two node pools.
        It

        also demonstrates setting tags, labels, auto scaling, and a maintenance

        policy.
      value:
        name: prod-cluster-01
        region: nyc1
        version: 1.18.6-do.0
        tags:
          - production
          - web-team
        node_pools:
          - size: s-1vcpu-2gb
            count: 3
            name: frontend-pool
            tags:
              - frontend
          - size: g-4vcpu-16gb
            count: 2
            name: backend-pool
            labels:
              service: backend
              priority: high
            auto_scale: true
            min_nodes: 2
            max_nodes: 5
        maintenance_policy:
          start_time: '12:00'
          day: any
    kubernetes_clusters_create_basic_response:
      value:
        kubernetes_cluster:
          id: bd5f5959-5e1e-4205-a714-a914373942af
          name: prod-cluster-01
          region: nyc1
          version: 1.18.6-do.0
          cluster_subnet: 10.244.0.0/16
          service_subnet: 10.245.0.0/16
          vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
          ipv4: ''
          endpoint: ''
          tags:
            - k8s
            - k8s:bd5f5959-5e1e-4205-a714-a914373942af
          node_pools:
            - id: cdda885e-7663-40c8-bc74-3a036c66545d
              name: worker-pool
              size: s-1vcpu-2gb
              count: 3
              tags:
                - k8s
                - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                - k8s:worker
              labels: null
              taints: []
              auto_scale: false
              min_nodes: 0
              max_nodes: 0
              nodes:
                - id: 478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f
                  name: ''
                  status:
                    state: provisioning
                  droplet_id: ''
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
                - id: ad12e744-c2a9-473d-8aa9-be5680500eb1
                  name: ''
                  status:
                    state: provisioning
                  droplet_id: ''
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
                - id: e46e8d07-f58f-4ff1-9737-97246364400e
                  name: ''
                  status:
                    state: provisioning
                  droplet_id: ''
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
          maintenance_policy:
            start_time: '00:00'
            duration: 4h0m0s
            day: any
          auto_upgrade: false
          status:
            state: provisioning
            message: provisioning
          created_at: '2018-11-15T16:00:11Z'
          updated_at: '2018-11-15T16:00:11Z'
          surge_upgrade: false
          registry_enabled: false
          ha: false
          control_plane_firewall:
            enabled: true
            allowed_addresses:
              - 1.2.3.4/32
              - 1.1.0.0/16
    kubernetes_clusters_multi_pool_response:
      value:
        kubernetes_clusters:
          id: bd5f5959-5e1e-4205-a714-a914373942af
          name: prod-cluster-01
          region: nyc1
          version: 1.18.6-do.0
          cluster_subnet: 10.244.0.0/16
          service_subnet: 10.245.0.0/16
          vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
          ipv4: ''
          endpoint: ''
          tags:
            - production
            - web-team
            - k8s
            - k8s:bd5f5959-5e1e-4205-a714-a914373942af
          node_pools:
            - id: cdda885e-7663-40c8-bc74-3a036c66545d
              name: frontend-pool
              size: s-1vcpu-2gb
              count: 3
              tags:
                - production
                - web-team
                - frontend
                - k8s
                - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                - k8s:worker
              labels: null
              taints: []
              auto_scale: false
              min_nodes: 0
              max_nodes: 0
              nodes:
                - id: 478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f
                  name: ''
                  status:
                    state: provisioning
                  droplet_id: ''
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
                - id: ad12e744-c2a9-473d-8aa9-be5680500eb1
                  name: ''
                  status:
                    state: provisioning
                  droplet_id: ''
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
                - id: e46e8d07-f58f-4ff1-9737-97246364400e
                  name: ''
                  status:
                    state: provisioning
                  droplet_id: ''
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
            - id: f49f4379-7e7f-4af5-aeb6-0354bd840778
              name: backend-pool
              size: g-4vcpu-16gb
              count: 2
              tags:
                - production
                - web-team
                - k8s
                - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                - k8s:worker
              labels:
                service: backend
                priority: high
              taints: []
              auto_scale: true
              min_nodes: 2
              max_nodes: 5
              nodes:
                - id: 3385619f-8ec3-42ba-bb23-8d21b8ba7518
                  name: ''
                  status:
                    state: provisioning
                  droplet_id: ''
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
                - id: 4b8f60ff-ba06-4523-a6a4-b8148244c7e6
                  name: ''
                  status:
                    state: provisioning
                  droplet_id: ''
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
          maintenance_policy:
            start_time: '12:00'
            duration: 4h0m0s
            day: any
          auto_upgrade: false
          status:
            state: provisioning
            message: provisioning
          created_at: '2018-11-15T16:00:11Z'
          updated_at: '2018-11-15T16:00:11Z'
          surge_upgrade: false
          registry_enabled: false
          ha: false
          control_plane_firewall:
            enabled: true
            allowed_addresses:
              - 1.2.3.4/32
              - 1.1.0.0/16
    kubernetes_single:
      value:
        kubernetes_cluster:
          id: bd5f5959-5e1e-4205-a714-a914373942af
          name: prod-cluster-01
          region: nyc1
          version: 1.18.6-do.0
          cluster_subnet: 10.244.0.0/16
          service_subnet: 10.245.0.0/16
          vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
          ipv4: 68.183.121.157
          endpoint: https://bd5f5959-5e1e-4205-a714-a914373942af.k8s.ondigitalocean.com
          tags:
            - production
            - web-team
            - k8s
            - k8s:bd5f5959-5e1e-4205-a714-a914373942af
          node_pools:
            - id: cdda885e-7663-40c8-bc74-3a036c66545d
              name: frontend-pool
              size: s-1vcpu-2gb
              count: 3
              tags:
                - production
                - web-team
                - k8s
                - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                - k8s:worker
              labels: null
              taints: []
              auto_scale: false
              min_nodes: 0
              max_nodes: 0
              nodes:
                - id: 478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f
                  name: adoring-newton-3niq
                  status:
                    state: running
                  droplet_id: '205545370'
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
                - id: ad12e744-c2a9-473d-8aa9-be5680500eb1
                  name: adoring-newton-3nim
                  status:
                    state: running
                  droplet_id: '205545371'
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
                - id: e46e8d07-f58f-4ff1-9737-97246364400e
                  name: adoring-newton-3ni7
                  status:
                    state: running
                  droplet_id: '205545372'
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
            - id: f49f4379-7e7f-4af5-aeb6-0354bd840778
              name: backend-pool
              size: g-4vcpu-16gb
              count: 2
              tags:
                - production
                - web-team
                - k8s
                - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                - k8s:worker
              labels:
                service: backend
                priority: high
              taints: []
              auto_scale: true
              min_nodes: 2
              max_nodes: 5
              nodes:
                - id: 3385619f-8ec3-42ba-bb23-8d21b8ba7518
                  name: affectionate-nightingale-3nif
                  status:
                    state: running
                  droplet_id: '205545373'
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
                - id: 4b8f60ff-ba06-4523-a6a4-b8148244c7e6
                  name: affectionate-nightingale-3niy
                  status:
                    state: running
                  droplet_id: '205545374'
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
          maintenance_policy:
            start_time: '00:00'
            duration: 4h0m0s
            day: any
          auto_upgrade: false
          status:
            state: running
          created_at: '2018-11-15T16:00:11Z'
          updated_at: '2018-11-15T16:00:11Z'
          surge_upgrade: false
          registry_enabled: false
          ha: false
          control_plane_firewall:
            enabled: true
            allowed_addresses:
              - 1.2.3.4/32
              - 1.1.0.0/16
    kubernetes_updated:
      value:
        kubernetes_cluster:
          id: bd5f5959-5e1e-4205-a714-a914373942af
          name: prod-cluster-01
          region: nyc1
          version: 1.18.6-do.0
          cluster_subnet: 10.244.0.0/16
          service_subnet: 10.245.0.0/16
          vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
          ipv4: 68.183.121.157
          endpoint: https://bd5f5959-5e1e-4205-a714-a914373942af.k8s.ondigitalocean.com
          tags:
            - production
            - web-team
            - k8s
            - k8s:bd5f5959-5e1e-4205-a714-a914373942af
          node_pools:
            - id: cdda885e-7663-40c8-bc74-3a036c66545d
              name: frontend-pool
              size: s-1vcpu-2gb
              count: 3
              tags:
                - production
                - web-team
                - k8s
                - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                - k8s:worker
              labels: null
              taints: []
              auto_scale: false
              min_nodes: 0
              max_nodes: 0
              nodes:
                - id: 478247f8-b1bb-4f7a-8db9-2a5f8d4b8f8f
                  name: adoring-newton-3niq
                  status:
                    state: running
                  droplet_id: '205545370'
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
                - id: ad12e744-c2a9-473d-8aa9-be5680500eb1
                  name: adoring-newton-3nim
                  status:
                    state: running
                  droplet_id: '205545371'
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
                - id: e46e8d07-f58f-4ff1-9737-97246364400e
                  name: adoring-newton-3ni7
                  status:
                    state: running
                  droplet_id: '205545372'
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
            - id: f49f4379-7e7f-4af5-aeb6-0354bd840778
              name: backend-pool
              size: g-4vcpu-16gb
              count: 2
              tags:
                - production
                - web-team
                - k8s
                - k8s:bd5f5959-5e1e-4205-a714-a914373942af
                - k8s:worker
              labels:
                service: backend
                priority: high
              taints: []
              auto_scale: true
              min_nodes: 2
              max_nodes: 5
              nodes:
                - id: 3385619f-8ec3-42ba-bb23-8d21b8ba7518
                  name: affectionate-nightingale-3nif
                  status:
                    state: running
                  droplet_id: '205545373'
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
                - id: 4b8f60ff-ba06-4523-a6a4-b8148244c7e6
                  name: affectionate-nightingale-3niy
                  status:
                    state: running
                  droplet_id: '205545374'
                  created_at: '2018-11-15T16:00:11Z'
                  updated_at: '2018-11-15T16:00:11Z'
          maintenance_policy:
            start_time: '00:00'
            duration: 4h0m0s
            day: any
          auto_upgrade: true
          status:
            state: running
          created_at: '2018-11-15T16:00:11Z'
          updated_at: '2018-11-15T16:00:11Z'
          surge_upgrade: true
          registry_enabled: false
          ha: false
          control_plane_firewall:
            enabled: true
            allowed_addresses:
              - 1.2.3.4/32
              - 1.1.0.0/16
    kubernetes_options:
      value:
        options:
          regions:
            - name: New York 1
              slug: nyc1
            - name: Singapore 1
              slug: sgp1
            - name: London 1
              slug: lon1
            - name: New York 3
              slug: nyc3
            - name: Amsterdam 3
              slug: ams3
            - name: Frankfurt 1
              slug: fra1
            - name: Toronto 1
              slug: tor1
            - name: San Francisco 2
              slug: sfo2
            - name: Bangalore 1
              slug: blr1
            - name: San Francisco 3
              slug: sfo3
          versions:
            - slug: 1.18.8-do.0
              kubernetes_version: 1.18.8
              supported_features:
                - cluster-autoscaler
                - docr-integration
                - token-authentication
            - slug: 1.17.11-do.0
              kubernetes_version: 1.17.11
              supported_features:
                - cluster-autoscaler
                - docr-integration
                - token-authentication
            - slug: 1.16.14-do.0
              kubernetes_version: 1.16.14
              supported_features:
                - cluster-autoscaler
                - docr-integration
                - token-authentication
          sizes:
            - name: s-1vcpu-2gb
              slug: s-1vcpu-2gb
            - name: s-2vcpu-2gb
              slug: s-2vcpu-2gb
            - name: s-1vcpu-3gb
              slug: s-1vcpu-3gb
            - name: s-2vcpu-4gb
              slug: s-2vcpu-4gb
            - name: s-4vcpu-8gb
              slug: s-4vcpu-8gb
            - name: c-2-4GiB
              slug: c-2
            - name: g-2vcpu-8gb
              slug: g-2vcpu-8gb
            - name: gd-2vcpu-8gb
              slug: gd-2vcpu-8gb
            - name: s-8vcpu-16gb
              slug: s-8vcpu-16gb
            - name: s-6vcpu-16gb
              slug: s-6vcpu-16gb
            - name: c-4-8GiB
              slug: c-4
            - name: m-2vcpu-16gb
              slug: m-2vcpu-16gb
            - name: m3-2vcpu-16gb
              slug: m3-2vcpu-16gb
            - name: g-4vcpu-16gb
              slug: g-4vcpu-16gb
            - name: gd-4vcpu-16gb
              slug: gd-4vcpu-16gb
            - name: m6-2vcpu-16gb
              slug: m6-2vcpu-16gb
            - name: s-8vcpu-32gb
              slug: s-8vcpu-32gb
            - name: c-8-16GiB
              slug: c-8
            - name: m-4vcpu-32gb
              slug: m-4vcpu-32gb
            - name: m3-4vcpu-32gb
              slug: m3-4vcpu-32gb
            - name: g-8vcpu-32gb
              slug: g-8vcpu-32gb
            - name: s-12vcpu-48gb
              slug: s-12vcpu-48gb
            - name: gd-8vcpu-32gb
              slug: gd-8vcpu-32gb
            - name: m6-4vcpu-32gb
              slug: m6-4vcpu-32gb
            - name: s-16vcpu-64gb
              slug: s-16vcpu-64gb
            - name: c-16
              slug: c-16
            - name: m-8vcpu-64gb
              slug: m-8vcpu-64gb
            - name: m3-8vcpu-64gb
              slug: m3-8vcpu-64gb
            - name: g-16vcpu-64gb
              slug: g-16vcpu-64gb
            - name: s-20vcpu-96gb
              slug: s-20vcpu-96gb
            - name: gd-16vcpu-64gb
              slug: gd-16vcpu-64gb
            - name: m6-8vcpu-64gb
              slug: m6-8vcpu-64gb
            - name: s-24vcpu-128gb
              slug: s-24vcpu-128gb
            - name: c-32-64GiB
              slug: c-32
            - name: m-16vcpu-128gb
              slug: m-16vcpu-128gb
            - name: m3-16vcpu-128gb
              slug: m3-16vcpu-128gb
            - name: g-32vcpu-128gb
              slug: g-32vcpu-128gb
            - name: s-32vcpu-192gb
              slug: s-32vcpu-192gb
            - name: gd-32vcpu-128gb
              slug: gd-32vcpu-128gb
            - name: m-24vcpu-192gb
              slug: m-24vcpu-192gb
            - name: m6-16vcpu-128gb
              slug: m6-16vcpu-128gb
            - name: g-40vcpu-160gb
              slug: g-40vcpu-160gb
            - name: gd-40vcpu-160gb
              slug: gd-40vcpu-160gb
            - name: m3-24vcpu-192gb
              slug: m3-24vcpu-192gb
            - name: m-32vcpu-256gb
              slug: m-32vcpu-256gb
            - name: m6-24vcpu-192gb
              slug: m6-24vcpu-192gb
            - name: m3-32vcpu-256gb
              slug: m3-32vcpu-256gb
            - name: m6-32vcpu-256gb
              slug: m6-32vcpu-256gb
    load_balancers_all:
      value:
        load_balancers:
          - id: 4de7ac8b-495b-4884-9a69-1050c6793cd6
            name: example-lb-01
            ip: 104.131.186.241
            size: lb-small
            algorithm: round_robin
            status: new
            created_at: '2017-02-01T22:22:58Z'
            forwarding_rules:
              - entry_protocol: http
                entry_port: 80
                target_protocol: http
                target_port: 80
                certificate_id: ''
                tls_passthrough: false
              - entry_protocol: https
                entry_port: 443
                target_protocol: https
                target_port: 443
                certificate_id: ''
                tls_passthrough: true
            health_check:
              protocol: http
              port: 80
              path: /
              check_interval_seconds: 10
              response_timeout_seconds: 5
              healthy_threshold: 5
              unhealthy_threshold: 3
            sticky_sessions:
              type: none
            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
            tag: ''
            droplet_ids:
              - 3164444
              - 3164445
            redirect_http_to_https: false
            enable_proxy_protocol: false
            enable_backend_keepalive: false
            vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
            disable_lets_encrypt_dns_records: false
            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
          - id: 56775c3f-04ab-4fb3-a7ed-40ef9bc8eece
            name: prod-web-lb-01
            ip: 45.55.125.24
            size: lb-small
            algorithm: round_robin
            status: active
            created_at: '2020-09-08T18:58:04Z'
            forwarding_rules:
              - entry_protocol: https
                entry_port: 443
                target_protocol: http
                target_port: 8080
                certificate_id: 892071a0-bb95-49bc-8021-3afd67a210bf
                tls_passthrough: false
            health_check:
              protocol: https
              port: 443
              path: /
              check_interval_seconds: 10
              response_timeout_seconds: 5
              healthy_threshold: 5
              unhealthy_threshold: 3
            sticky_sessions:
              type: cookies
              cookie_name: DO-LB
              cookie_ttl_seconds: 300
            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
            tag: prod:web
            droplet_ids:
              - 55806512
              - 55806515
              - 55806524
            redirect_http_to_https: true
            enable_proxy_protocol: false
            enable_backend_keepalive: false
            vpc_uuid: 587d698c-de84-11e8-80bc-3cfdfea9fcd1
            disable_lets_encrypt_dns_records: false
            project_id: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
            http_idle_timeout_seconds: 60
            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
        links: {}
        meta:
          total: 2
    load_balancer_basic_create_request:
      description: Passing requests directly through to 80 and 443.
      value:
        name: example-lb-01
        region: nyc3
        forwarding_rules:
          - entry_protocol: http
            entry_port: 80
            target_protocol: http
            target_port: 80
          - entry_protocol: https
            entry_port: 443
            target_protocol: https
            target_port: 443
            tls_passthrough: true
        droplet_ids:
          - 3164444
          - 3164445
        project_id: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
        http_idle_timeout_seconds: 60
        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
    load_balancer_ssl_termination_create_request:
      description: >-
        Terminating SSL at the load balancer using a managed SSL certificate
        specifying Droplets using `droplet_ids`.
      value:
        name: example-lb-01
        region: nyc3
        forwarding_rules:
          - entry_protocol: https
            entry_port: 443
            target_protocol: http
            target_port: 8080
            certificate_id: 892071a0-bb95-49bc-8021-3afd67a210bf
        droplet_ids:
          - 3164444
          - 3164445
    load_balancer_using_tag_create_request:
      description: >-
        Terminating SSL at the load balancer using a managed SSL certificate
        specifying Droplets using `tag`.
      value:
        name: example-lb-01
        region: nyc3
        forwarding_rules:
          - entry_protocol: https
            entry_port: 443
            target_protocol: http
            target_port: 8080
            certificate_id: 892071a0-bb95-49bc-8021-3afd67a210bf
        tag: prod:web
    load_balancer_sticky_sessions_and_health_check_create_request:
      description: >-
        Terminating SSL at the load balancer using a managed SSL certificate
        specifying Droplets using `tag`.
      value:
        name: example-lb-01
        region: nyc3
        forwarding_rules:
          - entry_protocol: https
            entry_port: 443
            target_protocol: http
            target_port: 8080
            certificate_id: 892071a0-bb95-49bc-8021-3afd67a210bf
        health_check:
          protocol: http
          port: 8080
          path: /health
          check_interval_seconds: 10
          response_timeout_seconds: 5
          healthy_threshold: 5
          unhealthy_threshold: 3
        sticky_sessions:
          type: cookies
          cookie_name: LB_COOKIE
          cookie_ttl_seconds: 300
        tag: prod:web
    load_balancer_basic_response:
      value:
        load_balancer:
          id: 4de7ac8b-495b-4884-9a69-1050c6793cd6
          name: example-lb-01
          ip: 104.131.186.241
          size: lb-small
          algorithm: round_robin
          status: new
          created_at: '2017-02-01T22:22:58Z'
          forwarding_rules:
            - entry_protocol: http
              entry_port: 80
              target_protocol: http
              target_port: 80
              certificate_id: ''
              tls_passthrough: false
            - entry_protocol: https
              entry_port: 443
              target_protocol: https
              target_port: 443
              certificate_id: ''
              tls_passthrough: true
          health_check:
            protocol: http
            port: 80
            path: /
            check_interval_seconds: 10
            response_timeout_seconds: 5
            healthy_threshold: 5
            unhealthy_threshold: 3
          sticky_sessions:
            type: none
          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
          tag: ''
          droplet_ids:
            - 3164444
            - 3164445
          redirect_http_to_https: false
          enable_proxy_protocol: false
          enable_backend_keepalive: false
          vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
          disable_lets_encrypt_dns_records: false
          project_id: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
          http_idle_timeout_seconds: 60
          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
    load_balancer_ssl_termination_response:
      value:
        load_balancer:
          id: 4de7ac8b-495b-4884-9a69-1050c6793cd6
          name: example-lb-01
          ip: 104.131.186.241
          size: lb-small
          algorithm: round_robin
          status: new
          created_at: '2017-02-01T22:22:58Z'
          forwarding_rules:
            - entry_protocol: https
              entry_port: 443
              target_protocol: http
              target_port: 8080
              certificate_id: 892071a0-bb95-49bc-8021-3afd67a210bf
          health_check:
            protocol: http
            port: 80
            path: /
            check_interval_seconds: 10
            response_timeout_seconds: 5
            healthy_threshold: 5
            unhealthy_threshold: 3
          sticky_sessions:
            type: none
          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
          tag: ''
          droplet_ids:
            - 3164444
            - 3164445
          redirect_http_to_https: false
          enable_proxy_protocol: false
          enable_backend_keepalive: false
          vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
          disable_lets_encrypt_dns_records: false
    load_balancer_using_tag_response:
      value:
        load_balancer:
          id: 4de7ac8b-495b-4884-9a69-1050c6793cd6
          name: example-lb-01
          ip: 104.131.186.241
          size: lb-small
          algorithm: round_robin
          status: new
          created_at: '2017-02-01T22:22:58Z'
          forwarding_rules:
            - entry_protocol: https
              entry_port: 443
              target_protocol: http
              target_port: 8080
              certificate_id: 892071a0-bb95-49bc-8021-3afd67a210bf
          health_check:
            protocol: http
            port: 80
            path: /
            check_interval_seconds: 10
            response_timeout_seconds: 5
            healthy_threshold: 5
            unhealthy_threshold: 3
          sticky_sessions:
            type: none
          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
          tag: prod:web
          droplet_ids:
            - 3164444
            - 3164445
          redirect_http_to_https: false
          enable_proxy_protocol: false
          enable_backend_keepalive: false
          vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
          disable_lets_encrypt_dns_records: false
          project_id: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
    load_balancer_sticky_sessions_and_health_check_response:
      value:
        load_balancer:
          id: 4de7ac8b-495b-4884-9a69-1050c6793cd6
          name: example-lb-01
          ip: 104.131.186.241
          size: lb-small
          algorithm: round_robin
          status: new
          created_at: '2017-02-01T22:22:58Z'
          forwarding_rules:
            - entry_protocol: https
              entry_port: 443
              target_protocol: http
              target_port: 8080
              certificate_id: 892071a0-bb95-49bc-8021-3afd67a210bf
          health_check:
            protocol: http
            port: 8080
            path: /health
            check_interval_seconds: 10
            response_timeout_seconds: 5
            healthy_threshold: 5
            unhealthy_threshold: 3
          sticky_sessions:
            type: cookies
            cookie_name: LB_COOKIE
            cookie_ttl_seconds: 300
          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
          tag: prod:web
          droplet_ids:
            - 3164444
            - 3164445
          redirect_http_to_https: false
          enable_proxy_protocol: false
          enable_backend_keepalive: false
          vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
          disable_lets_encrypt_dns_records: false
          project_id: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
    load_balancer_update_request:
      value:
        name: updated-example-lb-01
        region: nyc3
        droplet_ids:
          - 3164444
          - 3164445
        algorithm: round_robin
        forwarding_rules:
          - entry_protocol: http
            entry_port: 80
            target_protocol: http
            target_port: 80
            certificate_id: ''
            tls_passthrough: false
          - entry_protocol: https
            entry_port: 443
            target_protocol: https
            target_port: 443
            certificate_id: ''
            tls_passthrough: true
        health_check:
          protocol: http
          port: 80
          path: /
          check_interval_seconds: 10
          response_timeout_seconds: 5
          healthy_threshold: 5
          unhealthy_threshold: 3
        sticky_sessions:
          type: none
        redirect_http_to_https: false
        enable_proxy_protocol: true
        enable_backend_keepalive: true
        vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
        project_id: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
        http_idle_timeout_seconds: 60
        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
    load_balancer_update_response:
      value:
        load_balancer:
          id: 4de7ac8b-495b-4884-9a69-1050c6793cd6
          name: updated-example-lb-01
          ip: 104.131.186.241
          size: lb-small
          algorithm: round_robin
          status: new
          created_at: '2017-02-01T22:22:58Z'
          forwarding_rules:
            - entry_protocol: http
              entry_port: 80
              target_protocol: http
              target_port: 80
              certificate_id: ''
              tls_passthrough: false
            - entry_protocol: https
              entry_port: 443
              target_protocol: https
              target_port: 443
              certificate_id: ''
              tls_passthrough: true
          health_check:
            protocol: http
            port: 80
            path: /
            check_interval_seconds: 10
            response_timeout_seconds: 5
            healthy_threshold: 5
            unhealthy_threshold: 3
          sticky_sessions:
            type: none
          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
          tag: ''
          droplet_ids:
            - 3164444
            - 3164445
          redirect_http_to_https: false
          enable_proxy_protocol: true
          enable_backend_keepalive: true
          vpc_uuid: c33931f2-a26a-4e61-b85c-4e95a2ec431b
          disable_lets_encrypt_dns_records: false
          project_id: 9cc10173-e9ea-4176-9dbc-a4cee4c4ff30
          http_idle_timeout_seconds: 60
          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
    inbound_private_droplet_bandwidth:
      value:
        status: success
        data:
          resultType: matrix
          result:
            - metric:
                direction: inbound
                host_id: '222651441'
                interface: private
              values:
                - - 1634052360
                  - '0.016600450090265357'
                - - 1634052480
                  - '0.015085955677299055'
                - - 1634052600
                  - '0.014941163855322308'
                - - 1634052720
                  - '0.016214285714285712'
    inbound_public_droplet_bandwidth:
      value:
        status: success
        data:
          resultType: matrix
          result:
            - metric:
                direction: inbound
                host_id: '222651441'
                interface: public
              values:
                - - 1634052360
                  - '0.016600450090265357'
                - - 1634052480
                  - '0.015085955677299055'
                - - 1634052600
                  - '0.014941163855322308'
                - - 1634052720
                  - '0.016214285714285712'
    outbound_private_droplet_bandwidth:
      value:
        status: success
        data:
          resultType: matrix
          result:
            - metric:
                direction: outbound
                host_id: '222651441'
                interface: private
              values:
                - - 1634052360
                  - '0.016600450090265357'
                - - 1634052480
                  - '0.015085955677299055'
                - - 1634052600
                  - '0.014941163855322308'
                - - 1634052720
                  - '0.016214285714285712'
    outbound_public_droplet_bandwidth:
      value:
        status: success
        data:
          resultType: matrix
          result:
            - metric:
                direction: outbound
                host_id: '222651441'
                interface: public
              values:
                - - 1634052360
                  - '0.016600450090265357'
                - - 1634052480
                  - '0.015085955677299055'
                - - 1634052600
                  - '0.014941163855322308'
                - - 1634052720
                  - '0.016214285714285712'
    droplet_cpu:
      value:
        status: success
        data:
          resultType: matrix
          result:
            - metric:
                host_id: '222651441'
                mode: idle
              values:
                - - 1635386880
                  - '122901.18'
                - - 1635387000
                  - '123020.92'
                - - 1635387120
                  - '123140.8'
            - metric:
                host_id: '222651441'
                mode: iowait
              values:
                - - 1635386880
                  - '14.99'
                - - 1635387000
                  - '15.01'
                - - 1635387120
                  - '15.01'
            - metric:
                host_id: '222651441'
                mode: irq
              values:
                - - 1635386880
                  - '0'
                - - 1635387000
                  - '0'
                - - 1635387120
                  - '0'
            - metric:
                host_id: '222651441'
                mode: nice
              values:
                - - 1635386880
                  - '66.35'
                - - 1635387000
                  - '66.35'
                - - 1635387120
                  - '66.35'
            - metric:
                host_id: '222651441'
                mode: softirq
              values:
                - - 1635386880
                  - '2.13'
                - - 1635387000
                  - '2.13'
                - - 1635387120
                  - '2.13'
            - metric:
                host_id: '222651441'
                mode: steal
              values:
                - - 1635386880
                  - '7.89'
                - - 1635387000
                  - '7.9'
                - - 1635387120
                  - '7.91'
            - metric:
                host_id: '222651441'
                mode: system
              values:
                - - 1635386880
                  - '140.09'
                - - 1635387000
                  - '140.2'
                - - 1635387120
                  - '140.23'
            - metric:
                host_id: '222651441'
                mode: user
              values:
                - - 1635386880
                  - '278.57'
                - - 1635387000
                  - '278.65'
                - - 1635387120
                  - '278.69'
    droplet_filesystem:
      value:
        status: success
        data:
          resultType: matrix
          result:
            - metric:
                device: /dev/vda1
                fstype: ext4
                host_id: '222651441'
                mountpoint: /
              values:
                - - 1635386880
                  - '25832407040'
                - - 1635387000
                  - '25832407040'
                - - 1635387120
                  - '25832407040'
    app_memory_percentage:
      value:
        status: success
        data:
          resultType: matrix
          result:
            - metric:
                app_component: sample-application
                app_component_instance: sample-application-0
                app_uuid: db3c021-15ad-4088-bfe8-99dc972b9cf6
              values:
                - - 1634052360
                  - '5.016600450090265357'
                - - 1634052480
                  - '12.015085955677299055'
                - - 1634052600
                  - '8.014941163855322308'
                - - 1634052720
                  - '32.016214285714285712'
    reserved_ip_assigning:
      summary: Assigning to Droplet
      value:
        reserved_ip:
          ip: 45.55.96.47
          droplet: null
          region:
            name: New York 3
            slug: nyc3
            features:
              - private_networking
              - backups
              - ipv6
              - metadata
              - install_agent
              - storage
              - image_transfer
            available: true
            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
          locked: true
          project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
        links:
          droplets:
            - id: 213939433
              rel: droplet
              href: https://api.digitalocean.com/v2/droplets/213939433
          actions:
            - id: 1088924622
              rel: assign_ip
              href: https://api.digitalocean.com/v2/actions/1088924622
    reserved_ip_reserving:
      summary: Reserving to Region
      value:
        reserved_ip:
          ip: 45.55.96.47
          droplet: null
          region:
            name: New York 3
            slug: nyc3
            features:
              - private_networking
              - backups
              - ipv6
              - metadata
              - install_agent
              - storage
              - image_transfer
            available: true
            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
          locked: false
          project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
        links: {}
    reserved_ip_assigned:
      summary: Assigned to Droplet
      value:
        reserved_ip:
          ip: 45.55.96.47
          droplet:
            id: 3164444
            name: example.com
            memory: 1024
            vcpus: 1
            disk: 25
            locked: false
            status: active
            kernel: null
            created_at: '2020-07-21T18:37:44Z'
            features:
              - backups
              - private_networking
              - ipv6
            backup_ids:
              - 53893572
            next_backup_window:
              start: '2020-07-30T00:00:00Z'
              end: '2020-07-30T23:00:00Z'
            snapshot_ids:
              - 67512819
            image:
              id: 63663980
              name: 20.04 (LTS) x64
              type: base
              distribution: Ubuntu
              slug: ubuntu-20-04-x64
              public: true
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              created_at: '2020-05-15T05:47:50Z'
              min_disk_size: 20
              size_gigabytes: 2.36
              description: ''
              tags: []
              status: available
              error_message: ''
            volume_ids: []
            size:
              slug: s-1vcpu-1gb
              memory: 1024
              vcpus: 1
              disk: 25
              transfer: 1
              price_monthly: 5
              price_hourly: 0.00743999984115362
              regions:
                - ams2
                - ams3
                - blr1
                - fra1
                - lon1
                - nyc1
                - nyc2
                - nyc3
                - sfo1
                - sfo2
                - sfo3
                - sgp1
                - tor1
              available: true
              description: Basic
            size_slug: s-1vcpu-1gb
            networks:
              v4:
                - ip_address: 10.128.192.124
                  netmask: 255.255.0.0
                  gateway: nil
                  type: private
                - ip_address: 192.241.165.154
                  netmask: 255.255.255.0
                  gateway: 192.241.165.1
                  type: public
              v6:
                - ip_address: 2604:a880:0:1010::18a:a001
                  netmask: 64
                  gateway: 2604:a880:0:1010::1
                  type: public
            region:
              name: New York 3
              slug: nyc3
              features:
                - backups
                - ipv6
                - metadata
                - install_agent
                - storage
                - image_transfer
              available: true
              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
            tags:
              - web
              - env:prod
            vpc_uuid: 760e09ef-dc84-11e8-981e-3cfdfeaae000
          region:
            name: New York 3
            slug: nyc3
            features:
              - backups
              - ipv6
              - metadata
              - install_agent
              - storage
              - image_transfer
            available: true
            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
          locked: false
          project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
    reserved_ip_reserved:
      summary: Reserved to Region
      value:
        reserved_ip:
          ip: 45.55.96.47
          droplet: null
          region:
            name: New York 3
            slug: nyc3
            features:
              - private_networking
              - backups
              - ipv6
              - metadata
              - install_agent
              - storage
              - image_transfer
            available: true
            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
          locked: false
          project_id: 746c6152-2fa2-11ed-92d3-27aaa54e4988
    snapshots_all:
      value:
        snapshots:
          - id: '6372321'
            name: web-01-1595954862243
            created_at: '2020-07-28T16:47:44Z'
            regions:
              - nyc3
              - sfo3
            resource_id: '200776916'
            resource_type: droplet
            min_disk_size: 25
            size_gigabytes: 2.34
            tags:
              - web
              - env:prod
          - id: fbe805e8-866b-11e6-96bf-000f53315a41
            name: pvc-01-1595954862243
            created_at: '2019-09-28T23:14:30Z'
            regions:
              - nyc1
            resource_id: 89bcc42f-85cf-11e6-a004-000f53315871
            resource_type: volume
            min_disk_size: 2
            size_gigabytes: 0.1008
            tags:
              - k8s
        links: {}
        meta:
          total: 2
    snapshots_droplets_only:
      value:
        snapshots:
          - id: '6372321'
            name: web-01-1595954862243
            created_at: '2020-07-28T16:47:44Z'
            regions:
              - nyc3
              - sfo3
            resource_id: '200776916'
            resource_type: droplet
            min_disk_size: 25
            size_gigabytes: 2.34
            tags:
              - web
              - env:prod
        links: {}
        meta:
          total: 1
    snapshots_volumes_only:
      value:
        snapshots:
          - id: fbe805e8-866b-11e6-96bf-000f53315a41
            name: pvc-01-1595954862243
            created_at: '2019-09-28T23:14:30Z'
            regions:
              - nyc1
            resource_id: 89bcc42f-85cf-11e6-a004-000f53315871
            resource_type: volume
            min_disk_size: 2
            size_gigabytes: 0.1008
            tags:
              - k8s
        links: {}
        meta:
          total: 1
    volumes_all:
      value:
        volumes:
          - id: 506f78a4-e098-11e5-ad9f-000f53306ae1
            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
            droplet_ids: []
            name: example
            description: Block store for examples
            size_gigabytes: 10
            created_at: '2016-03-02T17:00:49Z'
            filesystem_type: ext4
            filesystem_label: example
            tags:
              - aninterestingtag
          - id: 506f78a4-e098-11e5-ad9f-000f53305eb2
            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
            droplet_ids: []
            name: example
            description: Block store for examples
            size_gigabytes: 10
            created_at: '2016-03-02T17:01:49Z'
            filesystem_type: ext4
            filesystem_label: example
            tags:
              - aninterestingtag
        links: {}
        meta:
          total: 2
    volumes_filtered_by_name:
      value:
        volumes:
          - id: 506f78a4-e098-11e5-ad9f-000f53306ae1
            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
            droplet_ids: []
            name: example
            description: Block store for examples
            size_gigabytes: 10
            created_at: '2016-03-02T17:00:49Z'
            filesystem_type: ext4
            filesystem_label: example
            tags:
              - aninterestingtag
        links: {}
        meta:
          total: 1
    volumes_filtered_by_region:
      value:
        volumes:
          - id: 506f78a4-e098-11e5-ad9f-000f53306ae1
            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
            droplet_ids: []
            name: example
            description: Block store for examples
            size_gigabytes: 10
            created_at: '2016-03-02T17:00:49Z'
            filesystem_type: ext4
            filesystem_label: example
            tags:
              - aninterestingtag
        links: {}
        meta:
          total: 1
    volume_action_attach_response:
      value:
        action:
          id: 72531856
          status: completed
          type: attach_volume
          started_at: '2020-11-12T17:51:03Z'
          completed_at: '2020-11-12T17:51:14Z'
          resource_type: 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
          region_slug: nyc1
    volume_action_detach_response:
      value:
        action:
          id: 68212773
          status: in-progress
          type: detach_volume
          started_at: '2015-10-15T17:46:15Z'
          completed_at: null
          resource_id: null
          resource_type: backend
          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
          region_slug: nyc1
security:
  - bearer_auth: []
