openapi: 3.0.0 info: title: Docker HUB API version: beta x-logo: url: https://docs.docker.com/assets/images/logo-docker-main.png href: /reference description: | Docker Hub is a service provided by Docker for finding and sharing container images with your team. It is the world's largest library and community for container images. In addition to the [Docker Hub UI](https://docs.docker.com/docker-hub/) and [Docker Hub CLI tool](https://github.com/docker/hub-tool#readme) (currently experimental), Docker provides an API that allows you to interact with Docker Hub. Browse through the Docker Hub API documentation to explore the supported endpoints. tags: - name: resources x-displayName: Resources description: | The following resources are available to interact with the documented API: - Docker Hub CLI tool (currently experimental) - Postman Collection - name: rate-limiting x-displayName: Rate Limiting description: | The Docker Hub API is limited on the amount of requests you can perform per minute against it. If you haven't hit the limit, each request to the API will return the following headers in the response. - `X-RateLimit-Limit` - The limit of requests per minute. - `X-RateLimit-Remaining` - The remaining amount of calls within the limit period. - `X-RateLimit-Reset` - The unix timestamp of when the remaining resets. If you have hit the limit, you will receive a response status of `429` and the `X-Retry-After` header in the response. The `X-Retry-After` header is a unix timestamp of when you can call the API again. *Note: These rate limits are separate from anti-abuse and Docker Hub download, or pull rate limiting. To learn more about Docker Hub pull rate limiting, see [Docker Hub download rate limit](https://docs.docker.com/docker-hub/download-rate-limit/).* - name: authentication x-displayName: Authentication description: | Most Docker Hub API endpoints require you to authenticate using your Docker credentials before using them. Additionally, similar to the Docker Hub UI features, API endpoint responses may vary depending on your plan (Free, Pro, or Team) and your account's permissions. To learn more about the features available in each plan and to upgrade your existing plan, see [Docker Pricing](https://www.docker.com/pricing). - name: access-tokens x-displayName: Personal Access Tokens description: | The Personal Access Token endpoints lets you manage personal access tokens. For more information, see [Access Tokens](https://docs.docker.com/docker-hub/access-tokens/). You can use a personal access token instead of a password in the [Docker CLI](https://docs.docker.com/engine/reference/commandline/cli/) or in the [Create an authentication token](#operation/PostUsersLogin) route to obtain a bearer token. ### Scopes For each scope grouping (in this case "repo"), you only need to define 1 scope as any lower scopes are assumed. For example: If you define `repo:write`, the API assumes the scope of both `repo:read` *and* `repo:public_read` as well. If you were to define both `repo:write` *and* `repo:read`, then `repo:read` is assumed by `repo:write` and ignored. ***Treat your personal access token like your password and keep it secret. You cannot retrieve your token after it is generated.*** - name: images x-displayName: Advanced Image Management description: | The Advanced Image Management API endpoints allow you to manage Docker images across all repositories. For more information, see [Advanced Image Management dashboard](https://docs.docker.com/docker-hub/image-management/). - name: audit-logs x-displayName: Audit Logs description: | The Audit Logs API endpoints allow you to query audit log events across a namespace. For more information, see [Audit Log](https://docs.docker.com/docker-hub/audit-log/) - name: org-settings x-displayName: Org Settings description: | The Org Settings API endpoints allow you to manage your organization's settings. - name: repositories x-displayName: Repositories description: | The repository endpoints allow you to manage your repository's configuration like description. - name: scim x-displayName: SCIM description: | SCIM is a provisioning system that lets you manage users within your identity provider (IdP). For more information, see [System for Cross-domain Identity management](https://docs.docker.com/docker-hub/scim/). x-tagGroups: - name: General tags: - resources - rate-limiting - name: API tags: - authentication - access-tokens - images - audit-logs - org-settings - repositories - scim paths: /v2/users/login: post: tags: - authentication summary: Create an authentication token operationId: PostUsersLogin description: | Creates and returns a bearer token in JWT format that you can use to authenticate with Docker Hub APIs. The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. Most Docker Hub APIs require this token either to consume or to get detailed information. For example, to list images in a private repository. requestBody: content: application/json: schema: $ref: "#/components/schemas/UsersLoginRequest" description: Login details. required: true responses: 200: description: Authentication successful content: application/json: schema: $ref: "#/components/schemas/PostUsersLoginSuccessResponse" 401: description: Authentication failed or second factor required content: application/json: schema: $ref: "#/components/schemas/PostUsersLoginErrorResponse" /v2/users/2fa-login: post: tags: - authentication summary: Second factor authentication. operationId: PostUsers2FALogin description: | When user has 2FA enabled, this is the second call to perform after `/v2/users/login` call. Creates and returns a bearer token in JWT format that you can use to authenticate with Docker Hub APIs. The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. Most Docker Hub APIs require this token either to consume or to get detailed information. For example, to list images in a private repository. requestBody: content: application/json: schema: $ref: "#/components/schemas/Users2FALoginRequest" description: Login details. required: true responses: 200: description: Authentication successful content: application/json: schema: $ref: "#/components/schemas/PostUsersLoginSuccessResponse" 401: description: Authentication failed or second factor required content: application/json: schema: $ref: "#/components/schemas/PostUsers2FALoginErrorResponse" /v2/access-tokens: post: summary: Create a personal access token description: Creates and returns a personal access token. tags: - access-tokens requestBody: content: application/json: schema: $ref: "#/components/schemas/createAccessTokenRequest" required: true responses: 201: description: Created content: application/json: schema: $ref: "#/components/schemas/createAccessTokensResponse" 400: $ref: "#/components/responses/BadRequest" 401: $ref: "#/components/responses/Unauthorized" get: summary: Get a list of personal access tokens description: Returns a paginated list of personal access tokens. tags: - access-tokens parameters: - in: query name: page schema: type: number default: 1 - in: query name: page_size schema: type: number default: 10 responses: 200: description: OK content: application/json: schema: $ref: "#/components/schemas/getAccessTokensResponse" 400: $ref: "#/components/responses/BadRequest" 401: $ref: "#/components/responses/Unauthorized" /v2/access-tokens/{uuid}: parameters: - in: path name: uuid required: true schema: type: string patch: summary: Update a personal access token description: | Updates a personal access token partially. You can either update the token's label or enable/disable it. tags: - access-tokens requestBody: content: application/json: schema: $ref: "#/components/schemas/patchAccessTokenRequest" required: true responses: 200: description: OK content: application/json: schema: $ref: "#/components/schemas/patchAccessTokenResponse" 400: $ref: "#/components/responses/BadRequest" 401: $ref: "#/components/responses/Unauthorized" get: summary: Get a personal access token description: Returns a personal access token by UUID. tags: - access-tokens responses: 200: description: OK content: application/json: schema: allOf: - $ref: "#/components/schemas/accessToken" - type: object properties: token: type: string example: "" 401: $ref: "#/components/responses/Unauthorized" 404: $ref: "#/components/responses/NotFound" delete: summary: Delete a personal access token description: | Deletes a personal access token permanently. This cannot be undone. tags: - access-tokens responses: 204: description: A successful response. 401: $ref: "#/components/responses/Unauthorized" 404: $ref: "#/components/responses/NotFound" /v2/namespaces/{namespace}/repositories/{repository}/images-summary: get: tags: - images summary: Get summary of repository's images description: | Gets the number of images in a repository and the number of images counted as active and inactive. operationId: GetNamespacesRepositoriesImagesSummary parameters: - name: namespace in: path required: true description: Namespace of the repository. schema: type: string - name: repository in: path required: true description: Name of the repository. schema: type: string - name: active_from in: query required: false description: | Sets the time from which an image must have been pushed or pulled to be counted as active. Defaults to 1 month before the current time. schema: type: string responses: 200: description: Success content: application/json: schema: $ref: "#/components/schemas/GetNamespaceRepositoryImagesSummaryResponse" 401: description: Unauthorized - user does not have read access to the namespace content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" /v2/namespaces/{namespace}/repositories/{repository}/images: get: tags: - images summary: Get details of repository's images description: Gets details on the images in a repository. operationId: GetNamespacesRepositoriesImages parameters: - name: namespace in: path required: true description: Namespace of the repository. schema: type: string - name: repository in: path required: true description: Name of the repository. schema: type: string - name: status in: query required: false description: Filters to only show images of this status. schema: type: string enum: - active - inactive - name: currently_tagged in: query required: false description: | Filters to only show images with: - `true`: at least 1 current tag. - `false`: no current tags. schema: type: boolean - name: ordering in: query required: false description: | Orders the results by this property. Prefixing with `-` sorts by descending order. schema: type: string enum: - last_activity - -last_activity - digest - -digest - name: active_from in: query required: false description: | Sets the time from which an image must have been pushed or pulled to be counted as active. Defaults to 1 month before the current time. schema: type: string - name: page in: query required: false description: Page number to get. Defaults to 1. schema: type: integer - name: page_size in: query required: false description: Number of images to get per page. Defaults to 10. Max of 100. schema: type: integer responses: 200: description: Success content: application/json: schema: $ref: "#/components/schemas/GetNamespaceRepositoryImagesResponse" 401: description: Unauthorized - user does not have read access to the namespace. content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" 403: description: Forbidden - this API is only available to users on Pro or Team plans. content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" /v2/namespaces/{namespace}/repositories/{repository}/images/{digest}/tags: get: tags: - images summary: Get image's tags description: Gets current and historical tags for an image. operationId: GetNamespacesRepositoriesImagesTags parameters: - name: namespace in: path required: true description: Namespace of the repository. schema: type: string - name: repository in: path required: true description: Name of the repository. schema: type: string - name: digest in: path required: true description: Digest of the image. schema: type: string - name: page in: query required: false description: Page number to get. Defaults to 1. schema: type: integer - name: page_size in: query required: false description: Number of images to get per page. Defaults to 10. Max of 100. schema: type: integer responses: 200: description: Success content: application/json: schema: $ref: "#/components/schemas/GetNamespaceRepositoryImagesTagsResponse" 401: description: Unauthorized - user does not have read access to the namespace content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" 403: description: Forbidden - this API is only available to users on Pro or Team plans content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" /v2/namespaces/{namespace}/delete-images: post: tags: - images summary: Delete images operationId: PostNamespacesDeleteImages description: | Deletes one or more images within a namespace. This is currently limited to a single repository. If you attempt to delete images that are marked as active or are currently tagged, the deletion does not happen and it displays the warnings. To continue with the deletion, you must ignore these warnings by putting them in the `ignore_warnings` property. Deleting a currently tagged image deletes the tag from the repository. You cannot ignore errors. It is not possible to directly delete children of multi-arch images. parameters: - name: namespace in: path required: true description: Namespace of the repository. schema: type: string requestBody: content: application/json: schema: $ref: "#/components/schemas/PostNamespacesDeleteImagesRequest" description: Delete request. required: true responses: 200: description: Deletion completed content: application/json: schema: $ref: "#/components/schemas/PostNamespacesDeleteImagesResponseSuccess" 400: description: Deletion not possible content: application/json: schema: $ref: "#/components/schemas/PostNamespacesDeleteImagesResponseError" 403: description: Forbidden - this API is only available to users on Pro or Team plans content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" /v2/auditlogs/{account}: get: summary: Returns list of audit log events. description: Get audit log events for a given namespace. operationId: AuditLogs_GetAuditLogs responses: 200: description: A successful response. content: application/json: schema: $ref: "#/components/schemas/GetAuditLogsResponse" examples: response: value: logs: - account: docker action: repo.tag.push name: docker/example actor: docker data: digest: sha256:c1ae9c435032a276f80220c7d9b40f76266bbe79243d34f9cda30b76fe114dfa tag: latest timestamp: 2021-02-19T01:34:35Z action_description: pushed the tag latest with the digest sha256:c1ae9c435032a to the repository docker/example 429: description: "" content: application/json: schema: {} examples: response: value: detail: Rate limit exceeded error: false 500: description: "" content: application/json: schema: {} default: description: An unexpected error response. content: application/json: schema: $ref: "#/components/schemas/rpcStatus" parameters: - name: account description: Namespace to query audit logs for. in: path required: true schema: type: string - name: action description: action name one of ["repo.tag.push", ...]. Optional parameter to filter specific audit log actions. in: query required: false schema: type: string - name: name description: name. Optional parameter to filter audit log events to a specific name. For repository events, this is the name of the repository. For organization events, this is the name of the organization. For team member events, this is the username of the team member. in: query required: false schema: type: string - name: actor description: actor name. Optional parameter to filter audit log events to the specific user who triggered the event. in: query required: false schema: type: string - name: from description: Start of the time window you wish to query audit events for. in: query required: false schema: type: string format: date-time - name: to description: End of the time window you wish to query audit events for. in: query required: false schema: type: string format: date-time - name: page description: page - specify page number. Page number to get. in: query required: false schema: type: integer format: int32 default: 1 - name: page_size description: page_size - specify page size. Number of events to return per page. in: query required: false schema: type: integer format: int32 default: 25 tags: - audit-logs /v2/auditlogs/{account}/actions: get: summary: Returns list of audit log actions. description: Get audit log actions for a namespace to be used as a filter for querying audit events. operationId: AuditLogs_GetAuditActions responses: 200: description: A successful response. content: application/json: schema: $ref: "#/components/schemas/GetAuditActionsResponse" examples: response: value: actions: org: actions: - name: team.create description: contains team create events label: Team Created - name: team.delete description: contains team delete events label: Team Deleted - name: team.member.add description: contains team member add events label: Team Member Added - name: team.member.remove description: contains team member remove events label: Team Member Removed - name: team.member.invite description: contains team member invite events label: Team Member Invited - name: member.removed description: contains org member remove events label: Organization Member Removed - name: create description: contains organization create events label: Organization Created label: Organization repo: actions: - name: create description: contains repository create events label: Repository Created - name: delete description: contains repository delete events label: Repository Deleted - name: change_privacy description: contains repository privacy change events label: Privacy Changed - name: tag.push description: contains image tag push events label: Tag Pushed - name: tag.delete description: contains image tag delete events label: Tag Deleted label: Repository 429: description: "" content: application/json: schema: {} examples: response: value: detail: Rate limit exceeded error: false 500: description: "" content: application/json: schema: {} default: description: An unexpected error response. content: application/json: schema: $ref: "#/components/schemas/rpcStatus" parameters: - name: account description: Namespace to query audit log actions for. in: path required: true schema: type: string tags: - audit-logs /v2/orgs/{name}/settings: parameters: - in: path name: name description: Name of the organization. required: true schema: type: string get: summary: Get organization settings description: | Returns organization settings by name. tags: - org-settings responses: 200: description: OK content: application/json: schema: $ref: "#/components/schemas/orgSettings" 401: $ref: "#/components/responses/Unauthorized" 403: $ref: "#/components/responses/Forbidden" 404: $ref: "#/components/responses/NotFound" put: summary: Update organization settings description: | Updates an organization's settings. Some settings are only used when the organization is on a business plan. ***Only users with administrative privileges for the organization (owner role) can modify these settings.*** The following settings are only used on a business plan: - `restricted_images` tags: - org-settings requestBody: content: application/json: schema: required: - restricted_images properties: restricted_images: allOf: - $ref: "#/components/schemas/restricted_images" - type: object required: - enabled - allow_official_images - allow_verified_publishers required: true responses: 200: description: OK content: application/json: schema: $ref: "#/components/schemas/orgSettings" 401: $ref: "#/components/responses/Unauthorized" 403: $ref: "#/components/responses/Forbidden" 404: $ref: "#/components/responses/NotFound" /v2/namespaces/{namespace}/repositories/{repository}/tags: parameters: - $ref: "#/components/parameters/namespace" - $ref: "#/components/parameters/repository" get: summary: "List repository tags" tags: [ repositories ] parameters: - $ref: "#/components/parameters/page" - $ref: "#/components/parameters/page_size" responses: 200: $ref: "#/components/responses/list_tags" 403: $ref: "#/components/responses/Forbidden" 404: $ref: "#/components/responses/NotFound" head: summary: "Check repository tags" tags: [ repositories ] responses: 200: description: "Repository contains tags" 403: $ref: "#/components/responses/Forbidden" 404: $ref: "#/components/responses/NotFound" /v2/namespaces/{namespace}/repositories/{repository}/tags/{tag}: parameters: - $ref: "#/components/parameters/namespace" - $ref: "#/components/parameters/repository" - $ref: "#/components/parameters/tag" get: summary: "Read repository tag" tags: [ repositories ] responses: 200: $ref: "#/components/responses/get_tag" 403: $ref: "#/components/responses/Forbidden" 404: $ref: "#/components/responses/NotFound" head: summary: "Check repository tag" tags: [ repositories ] responses: 200: description: "Repository tag exists" 403: $ref: "#/components/responses/Forbidden" 404: $ref: "#/components/responses/NotFound" /v2/scim/2.0/ServiceProviderConfig: get: summary: Get service provider config description: | Returns a service provider config for Docker's configuration. tags: [ scim ] security: - bearerSCIMAuth: [ ] responses: 200: $ref: '#/components/responses/scim_get_service_provider_config_resp' 401: $ref: "#/components/responses/scim_unauthorized" 500: $ref: "#/components/responses/scim_error" /v2/scim/2.0/ResourceTypes: get: summary: List resource types description: | Returns all resource types supported for the SCIM configuration. tags: [ scim ] security: - bearerSCIMAuth: [ ] responses: 200: $ref: "#/components/responses/scim_get_resource_types_resp" 401: $ref: "#/components/responses/scim_unauthorized" 500: $ref: "#/components/responses/scim_error" /v2/scim/2.0/ResourceTypes/{name}: get: summary: Get a resource type description: | Returns a resource type by name. tags: [ scim ] parameters: - name: name in: path schema: type: string example: User security: - bearerSCIMAuth: [ ] responses: 200: $ref: "#/components/responses/scim_get_resource_type_resp" 401: $ref: "#/components/responses/scim_unauthorized" 404: $ref: "#/components/responses/scim_not_found" 500: $ref: "#/components/responses/scim_error" /v2/scim/2.0/Schemas: get: summary: List schemas description: | Returns all schemas supported for the SCIM configuration. tags: [ scim ] security: - bearerSCIMAuth: [ ] responses: 200: $ref: "#/components/responses/scim_get_schemas_resp" 401: $ref: "#/components/responses/scim_unauthorized" 500: $ref: "#/components/responses/scim_error" /v2/scim/2.0/Schemas/{id}: get: summary: Get a schema description: | Returns a schema by ID. tags: [ scim ] parameters: - name: id in: path schema: type: string example: urn:ietf:params:scim:schemas:core:2.0:User security: - bearerSCIMAuth: [ ] responses: 200: $ref: "#/components/responses/scim_get_schema_resp" 401: $ref: "#/components/responses/scim_unauthorized" 404: $ref: "#/components/responses/scim_not_found" 500: $ref: "#/components/responses/scim_error" /v2/scim/2.0/Users: get: summary: List users description: | List users, returns paginated users for an organization. Use `startIndex` and `count` query parameters to receive paginated results. **Sorting:**
Sorting lets you to specify the order of returned resources by specifying a combination of `sortBy` and `sortOrder` query parameters. The `sortBy` parameter specifies the attribute whose value will be used to order the returned responses. The `sortOrder` parameter defines the order in which the `sortBy` parameter is applied. Allowed values are "ascending" and "descending". **Filtering:**
You can request a subset of resources by specifying the `filter` query parameter containing a filter expression. Attribute names and attribute operators used in filters are case insensitive. The filter parameter must contain at least one valid expression. Each expression must contain an attribute name followed by an attribute operator and an optional value. Supported operators are listed below. - `eq` equal - `ne` not equal - `co` contains - `sw` starts with - `and` Logical "and" - `or` Logical "or" - `not` "Not" function - `()` Precedence grouping tags: [ scim ] security: - bearerSCIMAuth: [ ] parameters: - name: startIndex in: query schema: type: integer minimum: 1 description: "" example: 1 - name: count in: query schema: type: integer minimum: 1 maximum: 200 description: "" example: 10 - name: filter in: query schema: type: string description: "" example: userName eq "jon.snow@docker.com" - $ref: "#/components/parameters/scim_attributes" - name: sortOrder in: query schema: type: string enum: - ascending - descending - name: sortBy in: query schema: type: string description: "User attribute to sort by." example: userName responses: 200: $ref: "#/components/responses/scim_get_users_resp" 400: $ref: "#/components/responses/scim_bad_request" 401: $ref: "#/components/responses/scim_unauthorized" 403: $ref: "#/components/responses/scim_forbidden" 404: $ref: "#/components/responses/scim_not_found" 500: $ref: "#/components/responses/scim_error" post: summary: Create user description: | Creates a user. If the user already exists by email, they are assigned to the organization on the "company" team. tags: [ scim ] security: - bearerSCIMAuth: [ ] requestBody: $ref: "#/components/requestBodies/scim_create_user_request" responses: 201: $ref: "#/components/responses/scim_create_user_resp" 400: $ref: "#/components/responses/scim_bad_request" 401: $ref: "#/components/responses/scim_unauthorized" 403: $ref: "#/components/responses/scim_forbidden" 404: $ref: "#/components/responses/scim_not_found" 409: $ref: "#/components/responses/scim_conflict" 500: $ref: "#/components/responses/scim_error" /v2/scim/2.0/Users/{id}: parameters: - $ref: "#/components/parameters/scim_user_id" get: summary: Get a user description: | Returns a user by ID. tags: [ scim ] security: - bearerSCIMAuth: [ ] responses: 200: $ref: "#/components/responses/scim_get_user_resp" 400: $ref: "#/components/responses/scim_bad_request" 401: $ref: "#/components/responses/scim_unauthorized" 403: $ref: "#/components/responses/scim_forbidden" 404: $ref: "#/components/responses/scim_not_found" 500: $ref: "#/components/responses/scim_error" put: summary: Update a user description: | Updates a user. Use this route to change the user's name, activate, and deactivate the user. tags: [ scim ] security: - bearerSCIMAuth: [ ] requestBody: $ref: "#/components/requestBodies/scim_update_user_request" responses: 200: $ref: "#/components/responses/scim_update_user_resp" 400: $ref: "#/components/responses/scim_bad_request" 401: $ref: "#/components/responses/scim_unauthorized" 403: $ref: "#/components/responses/scim_forbidden" 404: $ref: "#/components/responses/scim_not_found" 409: $ref: "#/components/responses/scim_conflict" 500: $ref: "#/components/responses/scim_error" servers: - url: https://hub.docker.com/ components: responses: BadRequest: description: Bad Request content: application/json: schema: $ref: "#/components/schemas/ValueError" Unauthorized: description: Unauthorized content: application/json: schema: $ref: "#/components/schemas/Error" Forbidden: description: Forbidden content: application/json: schema: $ref: "#/components/schemas/Error" NotFound: description: Not Found content: application/json: schema: $ref: "#/components/schemas/Error" scim_bad_request: description: Bad Request content: application/scim+json: schema: allOf: - $ref: "#/components/schemas/scim_error" - properties: status: example: "400" scimType: type: string description: Some types of errors will return this per the specification. scim_unauthorized: description: Unauthorized content: application/scim+json: schema: allOf: - $ref: "#/components/schemas/scim_error" - properties: status: example: "401" scim_forbidden: description: Forbidden content: application/scim+json: schema: allOf: - $ref: "#/components/schemas/scim_error" - properties: status: example: "403" scim_not_found: description: Not Found content: application/scim+json: schema: allOf: - $ref: "#/components/schemas/scim_error" - properties: status: example: "404" scim_conflict: description: Conflict content: application/scim+json: schema: allOf: - $ref: "#/components/schemas/scim_error" - properties: status: example: "409" scim_error: description: Internal Error content: application/scim+json: schema: allOf: - $ref: "#/components/schemas/scim_error" - properties: status: example: "500" scim_get_service_provider_config_resp: description: "" content: application/scim+json: schema: $ref: "#/components/schemas/scim_service_provider_config" scim_get_resource_types_resp: description: "" content: application/scim+json: schema: type: object properties: schemas: type: array items: type: string example: [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ] totalResults: type: integer example: 1 resources: type: array items: $ref: "#/components/schemas/scim_resource_type" scim_get_resource_type_resp: description: "" content: application/scim+json: schema: $ref: "#/components/schemas/scim_resource_type" scim_get_schemas_resp: description: "" content: application/scim+json: schema: type: object properties: schemas: type: array items: type: string example: [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ] totalResults: type: integer example: 1 resources: type: array items: $ref: "#/components/schemas/scim_schema" scim_get_schema_resp: description: "" content: application/scim+json: schema: $ref: "#/components/schemas/scim_schema" scim_get_users_resp: description: "" content: application/scim+json: schema: type: object properties: schemas: type: array items: type: string example: [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ] totalResults: type: integer example: 1 startIndex: type: integer example: 1 itemsPerPage: type: integer example: 10 resources: type: array items: $ref: "#/components/schemas/scim_user" scim_create_user_resp: description: "" content: application/scim+json: schema: $ref: "#/components/schemas/scim_user" scim_get_user_resp: description: "" content: application/scim+json: schema: $ref: "#/components/schemas/scim_user" scim_update_user_resp: description: "" content: application/scim+json: schema: $ref: "#/components/schemas/scim_user" list_tags: description: "list repository tags" content: application/json: schema: $ref: "#/components/schemas/paginated_tags" get_tag: description: "repository tag" content: application/json: schema: $ref: "#/components/schemas/tag" schemas: UsersLoginRequest: description: User login details type: object required: - username - password properties: username: description: The username of the Docker Hub account to authenticate with. type: string example: myusername password: description: The password or personal access token (PAT) of the Docker Hub account to authenticate with. type: string example: hunter2 PostUsersLoginSuccessResponse: description: successful user login response type: object properties: token: description: | Created authentication token. This token can be used in the HTTP Authorization header as a JWT to authenticate with the Docker Hub APIs. type: string example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c nullable: false PostUsersLoginErrorResponse: description: failed user login response or second factor required type: object required: - detail properties: detail: description: Description of the error. type: string example: Incorrect authentication credentials nullable: false login_2fa_token: description: Short time lived token to be used on `/v2/users/2fa-login` to complete the authentication. This field is present only if 2FA is enabled. type: string example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c nullable: true Users2FALoginRequest: description: Second factor user login details type: object required: - login_2fa_token - code properties: login_2fa_token: description: The intermediate 2FA token returned from `/v2/users/login` API. type: string example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c code: description: The Time-based One-Time Password of the Docker Hub account to authenticate with. type: string example: 123456 PostUsers2FALoginErrorResponse: description: failed second factor login response. type: object properties: detail: description: Description of the error. type: string example: Incorrect authentication credentials nullable: false ErrorInfo: description: Context information for an error used for diagnostics. type: object properties: api_call_docker_id: description: ID of docker user. type: string api_call_name: description: Name of the API operation called. type: string api_call_start: description: Date/time of call start. type: string api_call_txnid: description: Unique ID for this call. type: string ErrorResponse: description: Represents an error. type: object properties: txnid: description: Unique ID for this call. type: string message: description: The error message. type: string errinfo: $ref: "#/components/schemas/ErrorInfo" ErrorDetail: description: Error with a detail field. type: object properties: detail: description: The error message. type: string GetNamespaceRepositoryImagesSummaryResponse: description: Summary information for images in a repository. type: object properties: active_from: description: Time from which an image must have been pushed or pulled to be counted as active. type: string example: 2021-01-25T14:25:37.076343059Z statistics: type: object properties: total: description: Number of images in this repository. type: integer example: 3 active: description: Number of images counted as active in this repository. type: integer example: 2 inactive: description: Number of images counted as inactive in this repository. type: integer example: 1 GetNamespaceRepositoryImagesResponse: description: Paginated list of images in a repository. type: object properties: count: description: Total count of images in the repository. type: integer example: 100 next: description: Link to the next page with the same query parameters if there are more images. type: string example: https://hub.docker.com/v2/namespaces/mynamespace/repositories/myrepo/images?&page=4&page_size=20 nullable: true previous: description: Link to the previous page with the same query parameters if not on first page. type: string example: https://hub.docker.com/v2/namespaces/mynamespace/repositories/myrepo/images?&page=2&page_size=20 nullable: true results: type: array description: Image details. items: type: object properties: namespace: description: The repository namespace. type: string example: mynamespace repository: description: The repository name. type: string example: myrepo digest: description: The image's digest. type: string example: sha256:1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr tags: description: The current and historical tags for this image. type: array items: type: object properties: tag: description: The tag. type: string example: latest is_current: description: | `true` if the tag currently points to this image. `false` if it has been overwritten to point at a different image. type: boolean example: true last_pushed: description: Time when this image was last pushed. type: string example: 2021-02-24T22:05:27.526308Z nullable: true last_pulled: description: Time when this image was last pulled. Note this is updated at most once per hour. type: string example: 2021-02-24T23:16:10.200008Z nullable: true status: description: The status of the image based on its last activity against the `active_from` time. type: string enum: - active - inactive example: active GetNamespaceRepositoryImagesTagsResponse: description: Paginated list of tags for this repository. type: object properties: count: description: Total count of tags for this image. type: integer example: 100 next: description: Link to the next page if there are more tags. type: string example: https://hub.docker.com/v2/namespaces/mynamespace/repositories/myrepo/images/sha256:mydigest/tags?&page=4&page_size=20 nullable: true previous: description: Link to the previous page if not on first page. type: string example: https://hub.docker.com/v2/namespaces/mynamespace/repositories/myrepo/images/sha256:mydigest/tags?&page=2&page_size=20 nullable: true results: description: The current and historical tags for this image. type: array items: type: object properties: tag: description: The tag. type: string example: latest is_current: description: | `true` if the tag currently points to this image. `false` if it has been overwritten to point at a different image. type: boolean example: true PostNamespacesDeleteImagesRequest: description: Delete images request. type: object properties: dry_run: description: If `true` then will check and return errors and unignored warnings for the deletion request but will not delete any images. type: boolean example: false active_from: description: | Sets the time from which an image must have been pushed or pulled to be counted as active. Defaults to 1 month before the current time. type: string example: 2020-12-01T12:00:00Z manifests: description: Image manifests to delete. type: array items: type: object required: - repository - digest properties: repository: description: Name of the repository to delete the image from. type: string example: myrepo digest: description: Digest of the image to delete. type: string example: sha256:1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr ignore_warnings: description: | Warnings to ignore. If a warning is not ignored then no deletions will happen and the warning is returned in the response. These warnings include: - is_active: warning when attempting to delete an image that is marked as active. - current_tag: warning when attempting to delete an image that has one or more current tags in the repository. Warnings can be copied from the response to the request. type: array items: type: object required: - repository - digest - warning properties: repository: description: Name of the repository of the image to ignore the warning for. type: string example: myrepo digest: description: Digest of the image to ignore the warning for. type: string example: sha256:1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr warning: description: Warning to ignore. type: string enum: - is_active - current_tag example: current_tag tags: description: Current tags to ignore. type: array items: type: string example: latest PostNamespacesDeleteImagesResponseSuccess: description: Successful delete images response. type: object properties: dry_run: description: Whether the request was a dry run or not. type: boolean example: false metrics: type: object properties: manifest_deletes: description: Number of manifests deleted. type: integer example: 3 manifest_errors: description: Number of manifests that failed to delete. type: integer example: 0 tag_deletes: description: Number of tags deleted. type: integer example: 1 tag_errors: description: Number of tags that failed to delete. type: integer example: 0 PostNamespacesDeleteImagesResponseError: description: Deletion not possible. type: object properties: txnid: description: Unique ID for this call. type: string message: description: The error message. type: string errinfo: allOf: - $ref: "#/components/schemas/ErrorInfo" - type: object properties: type: description: Type of error. type: string example: validation details: type: object properties: errors: description: Errors from validating delete request. These cannot be ignored. type: array items: type: object properties: repository: description: Name of the repository of the image that caused the error. type: string example: myrepo digest: description: Digest of the image that caused the error. type: string example: sha256:1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr error: description: Error type. type: string enum: - not_found - unauthorized - child_manifest example: not_found warnings: description: | Warnings that can be ignored. These warnings include: - is_active: warning when attempting to delete an image that is marked as active. - current_tag: warning when attempting to delete an image that has one or more current tags in the repository. Warnings can be copied from the response to the request. type: array items: type: object properties: repository: description: Name of the repository of the image that caused the warning. type: string example: myrepo digest: description: Digest of the image that caused the warning. type: string example: sha256:1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr warning: description: Warning type. type: string enum: - is_active - current_tag example: current_tag tags: description: Current tags if warning is `current_tag`. type: array items: type: string example: latest protobufAny: type: object properties: type_url: type: string value: type: string format: byte rpcStatus: type: object properties: code: type: integer format: int32 message: type: string details: type: array items: $ref: "#/components/schemas/protobufAny" AuditLogAction: type: object properties: name: type: string description: Name of audit log action. description: type: string description: Description of audit log action. label: type: string description: Label for audit log action. description: Audit Log action AuditLogActions: type: object properties: actions: type: array items: $ref: "#/components/schemas/AuditLogAction" description: List of audit log actions. label: type: string description: Grouping label for a particular set of audit log actions. GetAuditActionsResponse: type: object properties: actions: type: object additionalProperties: $ref: "#/components/schemas/AuditLogActions" description: Map of audit log actions. description: GetAuditActions response. GetAuditLogsResponse: type: object properties: logs: type: array items: $ref: "#/components/schemas/AuditLog" description: List of audit log events. description: GetAuditLogs response. AuditLog: type: object properties: account: type: string action: type: string name: type: string actor: type: string data: type: object additionalProperties: type: string timestamp: type: string format: date-time action_description: type: string description: Audit log event. ValueError: type: object description: Used to error if input validation fails. properties: fields: type: object items: type: string text: type: string Error: type: object properties: detail: type: string message: type: string accessToken: type: object properties: uuid: type: string example: b30bbf97-506c-4ecd-aabc-842f3cb484fb client_id: type: string example: HUB creator_ip: type: string example: 127.0.0.1 creator_ua: type: string example: some user agent created_at: type: string example: 2021-07-20T12:00:00.000000Z last_used: type: string example: null nullable: true generated_by: type: string example: manual is_active: type: boolean example: true token: type: string example: a7a5ef25-8889-43a0-8cc7-f2a94268e861 token_label: type: string example: My read only token scopes: type: array example: - repo:read items: type: string createAccessTokenRequest: type: object required: - token_label - scopes properties: token_label: type: string description: Friendly name for you to identify the token. example: My read only token scopes: type: array description: | Valid scopes: "repo:admin", "repo:write", "repo:read", "repo:public_read" example: - repo:read items: type: string createAccessTokensResponse: $ref: "#/components/schemas/accessToken" getAccessTokensResponse: type: object properties: count: type: number example: 1 next: type: string example: null previous: type: string example: null active_count: type: number example: 1 results: type: array items: allOf: - $ref: "#/components/schemas/accessToken" - type: object properties: token: type: string example: "" patchAccessTokenRequest: type: object properties: token_label: type: string example: My read only token is_active: type: boolean example: false patchAccessTokenResponse: $ref: "#/components/schemas/accessToken" orgSettings: type: object properties: restricted_images: $ref: "#/components/schemas/restricted_images" restricted_images: type: object properties: enabled: type: boolean description: Whether or not to restrict image usage for users in the organization. example: true allow_official_images: type: boolean description: Allow usage of official images if "enabled" is `true`. example: true allow_verified_publishers: type: boolean description: Allow usage of verified publisher images if "enabled" is `true`. example: true layer: type: object properties: digest: type: string description: "image layer digest" nullable: true size: type: integer description: "size of the layer" instruction: type: string description: "Dockerfile instruction" image: type: object properties: architecture: type: string description: "CPU architecture" features: type: string description: "CPU features" variant: type: string description: "CPU variant" digest: type: string description: "image digest" nullable: true layers: type: array items: $ref: '#/components/schemas/layer' os: type: string description: "operating system" os_features: type: string description: "OS features" os_version: type: string description: "OS version" size: type: integer description: "size of the image" status: type: string enum: ["active", "inactive"] description: "Status of the image" last_pulled: type: string example: "2021-01-05T21:06:53.506400Z" description: "datetime of last pull" nullable: true last_pushed: type: string example: "2021-01-05T21:06:53.506400Z" description: "datetime of last push" nullable: true tag: type: object properties: id: type: integer description: "tag ID" images: type: object $ref: '#/components/schemas/image' creator: type: integer description: "ID of the user that pushed the tag" last_updated: type: string example: "2021-01-05T21:06:53.506400Z" description: "datetime of last update" nullable: true last_updater: type: integer description: "ID of the last user that updated the tag" last_updater_username: type: string description: "Hub username of the user that updated the tag" name: type: string description: "name of the tag" repository: type: integer description: "repository ID" full_size: type: integer description: "compressed size (sum of all layers) of the tagged image" v2: type: string description: "repository API version" status: type: string enum: ["active", "inactive"] description: "whether a tag has been pushed to or pulled in the past month" tag_last_pulled: type: string example: "2021-01-05T21:06:53.506400Z" description: "datetime of last pull" nullable: true tag_last_pushed: type: string example: "2021-01-05T21:06:53.506400Z" description: "datetime of last push" nullable: true paginated_tags: allOf: - $ref: '#/components/schemas/page' - type: object properties: results: type: array items: $ref: '#/components/schemas/tag' page: type: object properties: count: type: integer description: total number of results available across all pages next: type: string description: link to next page of results if any nullable: true previous: type: string description: link to previous page of results if any nullable: true scim_error: type: object properties: status: type: string description: The status code for the response in string format. schemas: type: array items: type: string default: urn:ietf:params:scim:api:messages:2.0:Error detail: type: string description: Details about why the request failed. scim_service_provider_config: type: object properties: schemas: type: array items: type: string example: [ "urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig" ] documentationUri: type: string example: "" patch: properties: supported: type: boolean example: false bulk: type: object properties: supported: type: boolean example: false maxOperations: type: integer maxPayloadSize: type: integer filter: type: object properties: supported: type: boolean example: true maxResults: type: integer example: 99999 changePassword: type: object properties: supported: type: boolean example: false sort: type: object properties: supported: type: boolean example: true etag: type: object properties: supported: type: boolean example: false authenticationSchemes: type: object properties: name: type: string example: OAuth 2.0 Bearer Token description: type: string example: The OAuth 2.0 Bearer Token Authentication scheme. OAuth enables clients to access protected resources by obtaining an access token, which is defined in RFC 6750 as "a string representing an access authorization issued to the client", rather than using the resource owner's credentials directly. specUri: type: string example: "http://tools.ietf.org/html/rfc6750" type: type: string example: oauthbearertoken scim_resource_type: type: object properties: schemas: type: array items: type: string example: "urn:ietf:params:scim:schemas:core:2.0:ResourceType" id: type: string example: User name: type: string example: User description: type: string example: User endpoint: type: string example: "/Users" schema: type: string example: "urn:ietf:params:scim:schemas:core:2.0:User" scim_schema_attribute: type: object properties: name: type: string example: userName type: enum: - string - boolean - complex type: string example: string multiValued: type: boolean example: false description: type: string example: Unique identifier for the User, typically used by the user to directly authenticate to the service provider. Each User MUST include a non-empty userName value. This identifier MUST be unique across the service provider's entire set of Users. required: type: boolean example: true caseExact: type: boolean example: false mutability: type: string example: readWrite returned: type: string example: default uniqueness: type: string example: server scim_schema_parent_attribute: allOf: - $ref: "#/components/schemas/scim_schema_attribute" - type: object properties: subAttributes: type: array items: $ref: "#/components/schemas/scim_schema_attribute" scim_schema: type: object properties: schemas: type: array items: type: string example: [ "urn:ietf:params:scim:schemas:core:2.0:Schema" ] id: type: string example: urn:ietf:params:scim:schemas:core:2.0:User name: type: string example: User description: type: string example: User Account attributes: type: array example: [ ] items: $ref: "#/components/schemas/scim_schema_parent_attribute" scim_email: type: object properties: value: type: string example: jon.snow@docker.com display: type: string example: jon.snow@docker.com primary: type: boolean example: true scim_group: type: object properties: value: type: string example: "nightswatch" display: type: string example: "nightswatch" scim_user_username: type: string description: The user's email address. This must be reachable via email. example: jon.snow@docker.com scim_user_name: type: object properties: givenName: type: string example: Jon familyName: type: string example: Snow scim_user_display_name: type: string description: The username in Docker. Also known as the "Docker ID". example: jonsnow scim_user_schemas: type: array items: type: string example: "urn:ietf:params:scim:schemas:core:2.0:User" minItems: 1 scim_user_id: type: string example: d80f7c79-7730-49d8-9a41-7c42fb622d9c description: The unique identifier for the user. A v4 UUID. scim_user: type: object properties: schemas: $ref: "#/components/schemas/scim_user_schemas" id: $ref: "#/components/schemas/scim_user_id" userName: $ref: "#/components/schemas/scim_user_username" name: $ref: "#/components/schemas/scim_user_name" displayName: $ref: "#/components/schemas/scim_user_display_name" active: type: boolean example: true emails: type: array items: $ref: "#/components/schemas/scim_email" groups: type: array items: $ref: "#/components/schemas/scim_group" meta: type: object properties: resourceType: type: string example: User location: type: string example: https://hub.docker.com/v2/scim/2.0/Users/d80f7c79-7730-49d8-9a41-7c42fb622d9c created: type: string description: The creation date for the user as a RFC3339 formatted string. example: 2022-05-20T00:54:18Z lastModified: type: string description: The date the user was last modified as a RFC3339 formatted string. example: 2022-05-20T00:54:18Z parameters: scim_attributes: in: query name: attributes schema: type: string description: Comma delimited list of attributes to limit to in the response. example: userName,displayName scim_user_id: name: id in: path schema: type: string description: The user ID. example: "d80f7c79-7730-49d8-9a41-7c42fb622d9c" namespace: in: path name: namespace required: true schema: type: string repository: in: path name: repository required: true schema: type: string tag: in: path name: tag required: true schema: type: string page: in: query name: page required: false schema: type: integer description: "Page number to get. Defaults to 1." page_size: in: query name: page_size required: false schema: type: integer description: "Number of items to get per page. Defaults to 10. Max of 100." requestBodies: scim_create_user_request: required: true content: application/scim+json: schema: type: object required: - schemas - userName properties: schemas: $ref: "#/components/schemas/scim_user_schemas" userName: $ref: "#/components/schemas/scim_user_username" name: $ref: "#/components/schemas/scim_user_name" scim_update_user_request: required: true content: application/scim+json: schema: type: object required: - schemas properties: schemas: $ref: "#/components/schemas/scim_user_schemas" name: allOf: - $ref: "#/components/schemas/scim_user_name" - description: If this is omitted from the request, the update will skip the update on it. We will only ever change the name, but not clear it. enabled: type: boolean default: false description: If this is omitted from the request, it will default to false resulting in a deactivated user.