Docker Secret API
Secrets are sensitive data that can be used by services. Swarm mode must be enabled for these endpoints to work.
Secrets are sensitive data that can be used by services. Swarm mode must be enabled for these endpoints to work.
swagger: '2.0'
info:
title: Docker Engine Config Secret API
version: '1.54'
x-logo:
url: https://docs.docker.com/assets/images/logo-docker-main.png
description: "The Engine API is an HTTP API served by Docker Engine. It is the API the\nDocker client uses to communicate with the Engine, so everything the Docker\nclient can do can be done with the API.\n\nMost of the client's commands map directly to API endpoints (e.g. `docker ps`\nis `GET /containers/json`). The notable exception is running containers,\nwhich consists of several API calls.\n\n# Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure\nof the API call. The body of the response will be JSON in the following\nformat:\n\n```\n{\n \"message\": \"page not found\"\n}\n```\n\n# Versioning\n\nThe API is usually changed in each release, so API calls are versioned to\nensure that clients don't break. To lock to a specific version of the API,\nyou prefix the URL with its version, for example, call `/v1.30/info` to use\nthe v1.30 version of the `/info` endpoint. If the API version specified in\nthe URL is not supported by the daemon, a HTTP `400 Bad Request` error message\nis returned.\n\nIf you omit the version-prefix, the current version of the API (v1.50) is used.\nFor example, calling `/info` is the same as calling `/v1.52/info`. Using the\nAPI without a version-prefix is deprecated and will be removed in a future release.\n\nEngine releases in the near future should support this version of the API,\nso your client will continue to work even if it is talking to a newer Engine.\n\nThe API uses an open schema model, which means the server may add extra properties\nto responses. Likewise, the server will ignore any extra query parameters and\nrequest body properties. When you write clients, you need to ignore additional\nproperties in responses to ensure they do not break when talking to newer\ndaemons.\n\n\n# Authentication\n\nAuthentication for registries is handled client side. The client has to send\nauthentication details to various endpoints that need to communicate with\nregistries, such as `POST /images/(name)/push`. These are sent as\n`X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5)\n(JSON) string with the following structure:\n\n```\n{\n \"username\": \"string\",\n \"password\": \"string\",\n \"serveraddress\": \"string\"\n}\n```\n\nThe `serveraddress` is a domain/IP without a protocol. Throughout this\nstructure, double quotes are required.\n\nIf you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth),\nyou can just pass this instead of credentials:\n\n```\n{\n \"identitytoken\": \"9cbaf023786cd7...\"\n}\n```\n"
basePath: /v1.54
schemes:
- http
- https
consumes:
- application/json
- text/plain
produces:
- application/json
- text/plain
tags:
- name: Secret
x-displayName: Secrets
description: 'Secrets are sensitive data that can be used by services. Swarm mode must
be enabled for these endpoints to work.
'
paths:
/secrets:
get:
summary: List secrets
operationId: SecretList
produces:
- application/json
responses:
200:
description: no error
schema:
type: array
items:
$ref: '#/definitions/Secret'
example:
- ID: blt1owaxmitz71s9v5zh81zun
Version:
Index: 85
CreatedAt: '2017-07-20T13:55:28.678958722Z'
UpdatedAt: '2017-07-20T13:55:28.678958722Z'
Spec:
Name: mysql-passwd
Labels:
some.label: some.value
Driver:
Name: secret-bucket
Options:
OptionA: value for driver option A
OptionB: value for driver option B
- ID: ktnbjxoalbkvbvedmg1urrz8h
Version:
Index: 11
CreatedAt: '2016-11-05T01:20:17.327670065Z'
UpdatedAt: '2016-11-05T01:20:17.327670065Z'
Spec:
Name: app-dev.crt
Labels:
foo: bar
500:
description: server error
schema:
$ref: '#/definitions/ErrorResponse'
503:
description: node is not part of a swarm
schema:
$ref: '#/definitions/ErrorResponse'
parameters:
- name: filters
in: query
type: string
description: 'A JSON encoded value of the filters (a `map[string][]string`) to
process on the secrets list.
Available filters:
- `id=<secret id>`
- `label=<key> or label=<key>=value`
- `name=<secret name>`
- `names=<secret name>`
'
tags:
- Secret
/secrets/create:
post:
summary: Create a secret
operationId: SecretCreate
consumes:
- application/json
produces:
- application/json
responses:
201:
description: no error
schema:
$ref: '#/definitions/IDResponse'
409:
description: name conflicts with an existing object
schema:
$ref: '#/definitions/ErrorResponse'
500:
description: server error
schema:
$ref: '#/definitions/ErrorResponse'
503:
description: node is not part of a swarm
schema:
$ref: '#/definitions/ErrorResponse'
parameters:
- name: body
in: body
schema:
allOf:
- $ref: '#/definitions/SecretSpec'
- type: object
example:
Name: app-key.crt
Labels:
foo: bar
Data: VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==
Driver:
Name: secret-bucket
Options:
OptionA: value for driver option A
OptionB: value for driver option B
tags:
- Secret
/secrets/{id}:
get:
summary: Inspect a secret
operationId: SecretInspect
produces:
- application/json
responses:
200:
description: no error
schema:
$ref: '#/definitions/Secret'
examples:
application/json:
ID: ktnbjxoalbkvbvedmg1urrz8h
Version:
Index: 11
CreatedAt: '2016-11-05T01:20:17.327670065Z'
UpdatedAt: '2016-11-05T01:20:17.327670065Z'
Spec:
Name: app-dev.crt
Labels:
foo: bar
Driver:
Name: secret-bucket
Options:
OptionA: value for driver option A
OptionB: value for driver option B
404:
description: secret not found
schema:
$ref: '#/definitions/ErrorResponse'
500:
description: server error
schema:
$ref: '#/definitions/ErrorResponse'
503:
description: node is not part of a swarm
schema:
$ref: '#/definitions/ErrorResponse'
parameters:
- name: id
in: path
required: true
type: string
description: ID of the secret
tags:
- Secret
delete:
summary: Delete a secret
operationId: SecretDelete
produces:
- application/json
responses:
204:
description: no error
404:
description: secret not found
schema:
$ref: '#/definitions/ErrorResponse'
500:
description: server error
schema:
$ref: '#/definitions/ErrorResponse'
503:
description: node is not part of a swarm
schema:
$ref: '#/definitions/ErrorResponse'
parameters:
- name: id
in: path
required: true
type: string
description: ID of the secret
tags:
- Secret
/secrets/{id}/update:
post:
summary: Update a Secret
operationId: SecretUpdate
responses:
200:
description: no error
400:
description: bad parameter
schema:
$ref: '#/definitions/ErrorResponse'
404:
description: no such secret
schema:
$ref: '#/definitions/ErrorResponse'
500:
description: server error
schema:
$ref: '#/definitions/ErrorResponse'
503:
description: node is not part of a swarm
schema:
$ref: '#/definitions/ErrorResponse'
parameters:
- name: id
in: path
description: The ID or name of the secret
type: string
required: true
- name: body
in: body
schema:
$ref: '#/definitions/SecretSpec'
description: 'The spec of the secret to update. Currently, only the Labels field
can be updated. All other fields must remain unchanged from the
[SecretInspect endpoint](#operation/SecretInspect) response values.
'
- name: version
in: query
description: 'The version number of the secret object being updated. This is
required to avoid conflicting writes.
'
type: integer
format: int64
required: true
tags:
- Secret
definitions:
ObjectVersion:
description: 'The version number of the object such as node, service, etc. This is needed
to avoid conflicting writes. The client must send the version number along
with the modified specification when updating these objects.
This approach ensures safe concurrency and determinism in that the change
on the object may not be applied if the version number has changed from the
last read. In other words, if two update requests specify the same base
version, only one of the requests can succeed. As a result, two separate
update requests that happen at the same time will not unintentionally
overwrite each other.
'
type: object
properties:
Index:
type: integer
format: uint64
example: 373531
Secret:
type: object
properties:
ID:
type: string
example: blt1owaxmitz71s9v5zh81zun
Version:
$ref: '#/definitions/ObjectVersion'
CreatedAt:
type: string
format: dateTime
example: '2017-07-20T13:55:28.678958722Z'
UpdatedAt:
type: string
format: dateTime
example: '2017-07-20T13:55:28.678958722Z'
Spec:
$ref: '#/definitions/SecretSpec'
IDResponse:
description: Response to an API call that returns just an Id
type: object
x-go-name: IDResponse
required:
- Id
properties:
Id:
description: The id of the newly created object.
type: string
x-nullable: false
SecretSpec:
type: object
properties:
Name:
description: User-defined name of the secret.
type: string
Labels:
description: User-defined key/value metadata.
type: object
additionalProperties:
type: string
example:
com.example.some-label: some-value
com.example.some-other-label: some-other-value
Data:
description: 'Data is the data to store as a secret, formatted as a standard base64-encoded
([RFC 4648](https://tools.ietf.org/html/rfc4648#section-4)) string.
It must be empty if the Driver field is set, in which case the data is
loaded from an external secret store. The maximum allowed size is 500KB,
as defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0/api/validation#MaxSecretSize).
This field is only used to _create_ a secret, and is not returned by
other endpoints.
'
type: string
example: ''
Driver:
description: 'Name of the secrets driver used to fetch the secret''s value from an
external secret store.
'
$ref: '#/definitions/Driver'
Templating:
description: 'Templating driver, if applicable
Templating controls whether and how to evaluate the config payload as
a template. If no driver is set, no templating is used.
'
$ref: '#/definitions/Driver'
ErrorResponse:
description: Represents an error.
type: object
required:
- message
properties:
message:
description: The error message.
type: string
x-nullable: false
example:
message: Something went wrong.
Driver:
description: Driver represents a driver (network, logging, secrets).
type: object
required:
- Name
properties:
Name:
description: Name of the driver.
type: string
x-nullable: false
example: some-driver
Options:
description: Key/value map of driver-specific options.
type: object
x-nullable: false
additionalProperties:
type: string
example:
OptionA: value for driver-specific option A
OptionB: value for driver-specific option B