Docker Hub Plugin API
The Plugin API from Docker Hub — 11 operation(s) for plugin.
The Plugin API from Docker Hub — 11 operation(s) for plugin.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/docker-hub:docker-hub-plugin-api"
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.
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: 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