Docker Hub Plugin API

The Plugin API from Docker Hub — 11 operation(s) for plugin.

GitHub OpenAPI

Operations 11

GET /plugins List plugins #
GET /plugins/privileges Get plugin privileges #
POST /plugins/pull Install a plugin #
GET /plugins/{name}/json Inspect a plugin #
DELETE /plugins/{name} Remove a plugin #
POST /plugins/{name}/enable Enable a plugin #
POST /plugins/{name}/disable Disable a plugin #
POST /plugins/{name}/upgrade Upgrade a plugin #
POST /plugins/create Create a plugin #
POST /plugins/{name}/push Push a plugin #
POST /plugins/{name}/set Configure a plugin #

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/docker-hub:docker-hub-plugin-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

docker-hub-plugin-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Docker Engine Plugin API
  version: '1.33'
  x-logo:
    url: https://docs.docker.com/images/logo-docker-main.png
  description: 'The Engine API is an HTTP API served by Docker Engine. It is the API the Docker client uses to communicate with the Engine, so everything the Docker client can do can be done with the API.


    Most of the client''s commands map directly to API endpoints (e.g. `docker ps` is `GET /containers/json`). The notable exception is running containers, which consists of several API calls.


    # Errors


    The API uses standard HTTP status codes to indicate the success or failure of the API call. The body of the response will be JSON in the following format:


    ```

    {

    "message": "page not found"

    }

    ```


    # Versioning


    The API is usually changed in each release of Docker, so API calls are versioned to ensure that clients don''t break.


    For Docker Engine 17.09, the API version is 1.32. To lock to this version, you prefix the URL with `/v1.32`. For example, calling `/info` is the same as calling `/v1.32/info`.


    Engine releases in the near future should support this version of the API, so your client will continue to work even if it is talking to a newer Engine.


    In previous versions of Docker, it was possible to access the API without providing a version. This behaviour is now deprecated will be removed in a future version of Docker.


    The API uses an open schema model, which means server may add extra properties to responses. Likewise, the server will ignore any extra query parameters and request body properties. When you write clients, you need to ignore additional properties in responses to ensure they do not break when talking to newer Docker daemons.


    This documentation is for version 1.33 of the API. Use this table to find documentation for previous versions of the API:


    Docker version | API version | Changes

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

    17.09.x | 1.31 | API changes

    17.07.x | 1.31 | API changes

    17.06.x | 1.30 | API changes

    17.05.x | 1.29 | API changes

    17.04.x | 1.28 | API changes

    17.03.1 | 1.27 | API changes

    1.13.1 & 17.03.0 | 1.26 | API changes

    1.13.0 | 1.25 | API changes

    1.12.x | 1.24 | API changes

    1.11.x | 1.23 | API changes

    1.10.x | 1.22 | API changes

    1.9.x | 1.21 | API changes

    1.8.x | 1.20 | API changes

    1.7.x | 1.19 | API changes

    1.6.x | 1.18 | API changes


    # Authentication


    Authentication for registries is handled client side. The client has to send authentication details to various endpoints that need to communicate with registries, such as `POST /images/(name)/push`. These are sent as `X-Registry-Auth` header as a Base64 encoded (JSON) string with the following structure:


    ```

    {

    "username": "string",

    "password": "string",

    "email": "string",

    "serveraddress": "string"

    }

    ```


    The `serveraddress` is a domain/IP without a protocol. Throughout this structure, double quotes are required.


    If you have already got an identity token from the `/auth` endpoint, you can just pass this instead of credentials:


    ```

    {

    "identitytoken": "9cbaf023786cd7..."

    }

    ```'
servers:
- url: /v1.33
tags:
- name: Plugin
  x-displayName: Plugins
paths:
  /plugins:
    get:
      summary: List plugins
      operationId: PluginList
      description: Returns information about installed plugins.
      responses:
        200:
          description: No error
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Plugin'
        500:
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      parameters:
      - name: filters
        in: query
        description: 'A JSON encoded value of the filters (a `map[string][]string`) to process on the plugin list. Available filters:


          - `capability=<capability name>`

          - `enable=<true>|<false>`

          '
        schema:
          type: string
      tags:
      - Plugin
  /plugins/privileges:
    get:
      summary: Get plugin privileges
      operationId: GetPluginPrivileges
      responses:
        200:
          description: no error
          content:
            application/json:
              schema:
                type: array
                items:
                  description: Describes a permission the user has to accept upon installing the plugin.
                  type: object
                  properties:
                    Name:
                      type: string
                    Description:
                      type: string
                    Value:
                      type: array
                      items:
                        type: string
                example:
                - Name: network
                  Description: ''
                  Value:
                  - host
                - Name: mount
                  Description: ''
                  Value:
                  - /data
                - Name: device
                  Description: ''
                  Value:
                  - /dev/cpu_dma_latency
            text/plain:
              schema:
                type: array
                items:
                  description: Describes a permission the user has to accept upon installing the plugin.
                  type: object
                  properties:
                    Name:
                      type: string
                    Description:
                      type: string
                    Value:
                      type: array
                      items:
                        type: string
                example:
                - Name: network
                  Description: ''
                  Value:
                  - host
                - Name: mount
                  Description: ''
                  Value:
                  - /data
                - Name: device
                  Description: ''
                  Value:
                  - /dev/cpu_dma_latency
        500:
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      parameters:
      - name: remote
        in: query
        description: The name of the plugin. The `:latest` tag is optional, and is the default if omitted.
        required: true
        schema:
          type: string
      tags:
      - Plugin
  /plugins/pull:
    post:
      summary: Install a plugin
      operationId: PluginPull
      description: Pulls and installs a plugin. After the plugin is installed, it can be enabled using the `POST /plugins/{name}/enable` endpoint.
      responses:
        204:
          description: no error
        500:
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      parameters:
      - name: remote
        in: query
        description: 'Remote reference for plugin to install.


          The `:latest` tag is optional, and is used as the default if omitted.

          '
        required: true
        schema:
          type: string
      - name: name
        in: query
        description: 'Local name for the pulled plugin.


          The `:latest` tag is optional, and is used as the default if omitted.

          '
        required: false
        schema:
          type: string
      - name: X-Registry-Auth
        in: header
        description: A base64-encoded auth configuration to use when pulling a plugin from a registry. [See the authentication section for details.](#section/Authentication)
        schema:
          type: string
      tags:
      - Plugin
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                description: Describes a permission accepted by the user upon installing the plugin.
                type: object
                properties:
                  Name:
                    type: string
                  Description:
                    type: string
                  Value:
                    type: array
                    items:
                      type: string
              example:
              - Name: network
                Description: ''
                Value:
                - host
              - Name: mount
                Description: ''
                Value:
                - /data
              - Name: device
                Description: ''
                Value:
                - /dev/cpu_dma_latency
          text/plain:
            schema:
              type: array
              items:
                description: Describes a permission accepted by the user upon installing the plugin.
                type: object
                properties:
                  Name:
                    type: string
                  Description:
                    type: string
                  Value:
                    type: array
                    items:
                      type: string
              example:
              - Name: network
                Description: ''
                Value:
                - host
              - Name: mount
                Description: ''
                Value:
                - /data
              - Name: device
                Description: ''
                Value:
                - /dev/cpu_dma_latency
  /plugins/{name}/json:
    get:
      summary: Inspect a plugin
      operationId: PluginInspect
      responses:
        200:
          description: no error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Plugin'
            text/plain:
              schema:
                $ref: '#/components/schemas/Plugin'
        404:
          description: plugin is not installed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      parameters:
      - name: name
        in: path
        description: The name of the plugin. The `:latest` tag is optional, and is the default if omitted.
        required: true
        schema:
          type: string
      tags:
      - Plugin
  /plugins/{name}:
    delete:
      summary: Remove a plugin
      operationId: PluginDelete
      responses:
        200:
          description: no error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Plugin'
            text/plain:
              schema:
                $ref: '#/components/schemas/Plugin'
        404:
          description: plugin is not installed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      parameters:
      - name: name
        in: path
        description: The name of the plugin. The `:latest` tag is optional, and is the default if omitted.
        required: true
        schema:
          type: string
      - name: force
        in: query
        description: Disable the plugin before removing. This may result in issues if the plugin is in use by a container.
        schema:
          type: boolean
          default: false
      tags:
      - Plugin
  /plugins/{name}/enable:
    post:
      summary: Enable a plugin
      operationId: PluginEnable
      responses:
        200:
          description: no error
        404:
          description: plugin is not installed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      parameters:
      - name: name
        in: path
        description: The name of the plugin. The `:latest` tag is optional, and is the default if omitted.
        required: true
        schema:
          type: string
      - name: timeout
        in: query
        description: Set the HTTP client timeout (in seconds)
        schema:
          type: integer
          default: 0
      tags:
      - Plugin
  /plugins/{name}/disable:
    post:
      summary: Disable a plugin
      operationId: PluginDisable
      responses:
        200:
          description: no error
        404:
          description: plugin is not installed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      parameters:
      - name: name
        in: path
        description: The name of the plugin. The `:latest` tag is optional, and is the default if omitted.
        required: true
        schema:
          type: string
      tags:
      - Plugin
  /plugins/{name}/upgrade:
    post:
      summary: Upgrade a plugin
      operationId: PluginUpgrade
      responses:
        204:
          description: no error
        404:
          description: plugin not installed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      parameters:
      - name: name
        in: path
        description: The name of the plugin. The `:latest` tag is optional, and is the default if omitted.
        required: true
        schema:
          type: string
      - name: remote
        in: query
        description: 'Remote reference to upgrade to.


          The `:latest` tag is optional, and is used as the default if omitted.

          '
        required: true
        schema:
          type: string
      - name: X-Registry-Auth
        in: header
        description: A base64-encoded auth configuration to use when pulling a plugin from a registry. [See the authentication section for details.](#section/Authentication)
        schema:
          type: string
      tags:
      - Plugin
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                description: Describes a permission accepted by the user upon installing the plugin.
                type: object
                properties:
                  Name:
                    type: string
                  Description:
                    type: string
                  Value:
                    type: array
                    items:
                      type: string
              example:
              - Name: network
                Description: ''
                Value:
                - host
              - Name: mount
                Description: ''
                Value:
                - /data
              - Name: device
                Description: ''
                Value:
                - /dev/cpu_dma_latency
          text/plain:
            schema:
              type: array
              items:
                description: Describes a permission accepted by the user upon installing the plugin.
                type: object
                properties:
                  Name:
                    type: string
                  Description:
                    type: string
                  Value:
                    type: array
                    items:
                      type: string
              example:
              - Name: network
                Description: ''
                Value:
                - host
              - Name: mount
                Description: ''
                Value:
                - /data
              - Name: device
                Description: ''
                Value:
                - /dev/cpu_dma_latency
  /plugins/create:
    post:
      summary: Create a plugin
      operationId: PluginCreate
      responses:
        204:
          description: no error
        500:
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      parameters:
      - name: name
        in: query
        description: The name of the plugin. The `:latest` tag is optional, and is the default if omitted.
        required: true
        schema:
          type: string
      tags:
      - Plugin
      requestBody:
        content:
          application/x-tar:
            schema:
              type: string
              format: binary
        description: Path to tar containing plugin rootfs and manifest
  /plugins/{name}/push:
    post:
      summary: Push a plugin
      operationId: PluginPush
      description: Push a plugin to the registry.
      parameters:
      - name: name
        in: path
        description: The name of the plugin. The `:latest` tag is optional, and is the default if omitted.
        required: true
        schema:
          type: string
      responses:
        200:
          description: no error
        404:
          description: plugin not installed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Plugin
  /plugins/{name}/set:
    post:
      summary: Configure a plugin
      operationId: PluginSet
      parameters:
      - name: name
        in: path
        description: The name of the plugin. The `:latest` tag is optional, and is the default if omitted.
        required: true
        schema:
          type: string
      responses:
        204:
          description: No error
        404:
          description: Plugin not installed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
            text/plain:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Plugin
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
              example:
              - DEBUG=1
components:
  schemas:
    PluginInterfaceType:
      type: object
      required:
      - Prefix
      - Capability
      - Version
      properties:
        Prefix:
          type: string
        Capability:
          type: string
        Version:
          type: string
    PluginEnv:
      type: object
      required:
      - Name
      - Description
      - Settable
      - Value
      properties:
        Name:
          type: string
        Description:
          type: string
        Settable:
          type: array
          items:
            type: string
        Value:
          type: string
    Plugin:
      description: A plugin for the Engine API
      type: object
      required:
      - Settings
      - Enabled
      - Config
      - Name
      properties:
        Id:
          type: string
          example: 5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078
        Name:
          type: string
          example: tiborvass/sample-volume-plugin
        Enabled:
          description: True if the plugin is running. False if the plugin is not running, only installed.
          type: boolean
          example: true
        Settings:
          description: Settings that can be modified by users.
          type: object
          required:
          - Args
          - Devices
          - Env
          - Mounts
          properties:
            Mounts:
              type: array
              items:
                $ref: '#/components/schemas/PluginMount'
            Env:
              type: array
              items:
                type: string
              example:
              - DEBUG=0
            Args:
              type: array
              items:
                type: string
            Devices:
              type: array
              items:
                $ref: '#/components/schemas/PluginDevice'
        PluginReference:
          description: plugin remote reference used to push/pull the plugin
          type: string
          example: localhost:5000/tiborvass/sample-volume-plugin:latest
        Config:
          description: The config of a plugin.
          type: object
          required:
          - Description
          - Documentation
          - Interface
          - Entrypoint
          - WorkDir
          - Network
          - Linux
          - PidHost
          - PropagatedMount
          - IpcHost
          - Mounts
          - Env
          - Args
          properties:
            DockerVersion:
              description: Docker Version used to create the plugin
              type: string
              example: 17.06.0-ce
            Description:
              type: string
              example: A sample volume plugin for Docker
            Documentation:
              type: string
              example: https://docs.docker.com/engine/extend/plugins/
            Interface:
              description: The interface between Docker and the plugin
              type: object
              required:
              - Types
              - Socket
              properties:
                Types:
                  type: array
                  items:
                    $ref: '#/components/schemas/PluginInterfaceType'
                  example:
                  - docker.volumedriver/1.0
                Socket:
                  type: string
                  example: plugins.sock
            Entrypoint:
              type: array
              items:
                type: string
              example:
              - /usr/bin/sample-volume-plugin
              - /data
            WorkDir:
              type: string
              example: /bin/
            User:
              type: object
              properties:
                UID:
                  type: integer
                  format: uint32
                  example: 1000
                GID:
                  type: integer
                  format: uint32
                  example: 1000
            Network:
              type: object
              required:
              - Type
              properties:
                Type:
                  type: string
                  example: host
            Linux:
              type: object
              required:
              - Capabilities
              - AllowAllDevices
              - Devices
              properties:
                Capabilities:
                  type: array
                  items:
                    type: string
                  example:
                  - CAP_SYS_ADMIN
                  - CAP_SYSLOG
                AllowAllDevices:
                  type: boolean
                  example: false
                Devices:
                  type: array
                  items:
                    $ref: '#/components/schemas/PluginDevice'
            PropagatedMount:
              type: string
              example: /mnt/volumes
            IpcHost:
              type: boolean
              example: false
            PidHost:
              type: boolean
              example: false
            Mounts:
              type: array
              items:
                $ref: '#/components/schemas/PluginMount'
            Env:
              type: array
              items:
                $ref: '#/components/schemas/PluginEnv'
              example:
              - Name: DEBUG
                Description: If set, prints debug messages
                Settable: null
                Value: '0'
            Args:
              type: object
              required:
              - Name
              - Description
              - Settable
              - Value
              properties:
                Name:
                  type: string
                  example: args
                Description:
                  type: string
                  example: command line arguments
                Settable:
                  type: array
                  items:
                    type: string
                Value:
                  type: array
                  items:
                    type: string
            rootfs:
              type: object
              properties:
                type:
                  type: string
                  example: layers
                diff_ids:
                  type: array
                  items:
                    type: string
                  example:
                  - sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887
                  - sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8
    ErrorResponse:
      description: Represents an error.
      type: object
      required:
      - message
      properties:
        message:
          description: The error message.
          type: string
      example:
        message: Something went wrong.
    PluginMount:
      type: object
      required:
      - Name
      - Description
      - Settable
      - Source
      - Destination
      - Type
      - Options
      properties:
        Name:
          type: string
          example: some-mount
        Description:
          type: string
          example: This is a mount that's used by the plugin.
        Settable:
          type: array
          items:
            type: string
        Source:
          type: string
          example: /var/lib/docker/plugins/
        Destination:
          type: string
          example: /mnt/state
        Type:
          type: string
          example: bind
        Options:
          type: array
          items:
            type: string
          example:
          - rbind
          - rw
    PluginDevice:
      type: object
      required:
      - Name
      - Description
      - Settable
      - Path
      properties:
        Name:
          type: string
        Description:
          type: string
        Settable:
          type: array
          items:
            type: string
        Path:
          type: string
          example: /dev/fuse