Digital Ocean 1-Click Applications API

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://marketplace.digitalocean.com/).

Operations 2

GET /v2/1-clicks List 1-Click Applications #
POST /v2/1-clicks/kubernetes Install Kubernetes 1-Click Applications #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/digital-ocean-1-click-applications-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

digital-ocean-1-click-applications-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: DigitalOcean 1-Click Applications 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.'
  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
security:
- bearer_auth: []
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.'
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 \\\n  -H \"Content-Type: application/json\"  \\\n  -H \"Authorization: Bearer $DIGITALOCEAN_TOKEN\" \\\n  \"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 \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $DIGITALOCEAN_TOKEN\" \\\n  -d '{\"addon_slugs\": [\"kube-state-metrics\", \"loki\"], \"cluster_uuid\": \"50a994b6-c303-438f-9495-7e896cfe6b08\"}'' \\\n  \"https://api.digitalocean.com/v2/1-clicks/kubernetes\""
      - lang: Python
        source: "import os\nfrom pydo import Client\n\nclient = Client(token=os.environ.get(\"DIGITALOCEAN_TOKEN\"))\n\ninstall_req = {\n    \"addon_slugs\": [\"kube-state-metrics\", \"loki\"],\n    \"cluster_uuid\": \"50a994b6-c303-438f-9495-7e896cfe6b08\",\n}\ninstall_resp = client.one_clicks.install_kubernetes(install_req)"
      security:
      - bearer_auth:
        - 1click:create
components:
  responses:
    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.
    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
    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
    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.
    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.
    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
  schemas:
    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
    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
  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-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.
    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.
  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
  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"

        ```

        '