diff --git a/content/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md b/content/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md
index 4adf8b19bbf..078fda8f028 100644
--- a/content/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md
+++ b/content/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md
@@ -61,7 +61,7 @@ You can download extension CSV reports from the **Insights and analytics** dashb
## Exporting analytics data
You can export the analytics data either from the web dashboard, or using the
-[DVP Data API](/reference/api/hub/dvp.md). All members of an organization have access to the analytics data.
+[DVP Data API](/reference/api/dvp/latest.md). All members of an organization have access to the analytics data.
The data is available as a downloadable CSV file, in a weekly (Monday through
Sunday) or monthly format. Monthly data is available from the first day of the
@@ -89,7 +89,7 @@ Export usage data for your organization's images using the Docker Hub website by
The HTTP API endpoints are available at:
`https://hub.docker.com/api/publisher/analytics/v1`. Learn how to export data
-using the API in the [DVP Data API documentation](/reference/api/hub/dvp.md).
+using the API in the [DVP Data API documentation](/reference/api/dvp/latest.md).
## Data points
diff --git a/content/reference/_index.md b/content/reference/_index.md
index d51c780f93f..f39ef589bc5 100644
--- a/content/reference/_index.md
+++ b/content/reference/_index.md
@@ -41,7 +41,7 @@ params:
- title: DVP Data API
description: API for Docker Verified Publishers to fetch analytics data.
icon: area_chart
- link: /reference/api/hub/dvp/
+ link: /reference/api/dvp/latest/
- title: Registry API
description: API for Docker Registry.
icon: database
diff --git a/content/reference/api/dvp/_index.md b/content/reference/api/dvp/_index.md
new file mode 100644
index 00000000000..18f6030ead2
--- /dev/null
+++ b/content/reference/api/dvp/_index.md
@@ -0,0 +1,6 @@
+---
+title: DVP Data API
+build:
+ render: never
+---
+
diff --git a/content/reference/api/dvp/changelog.md b/content/reference/api/dvp/changelog.md
new file mode 100644
index 00000000000..76c97932388
--- /dev/null
+++ b/content/reference/api/dvp/changelog.md
@@ -0,0 +1,20 @@
+---
+description: Docker Verified Publisher API changelog
+title: Docker Verified Publisher API changelog
+linkTitle: Changelog
+keywords: docker dvp, dvp, whats new, release notes, api, changelog
+weight: 1
+toc_min: 1
+toc_max: 2
+---
+
+Here you can learn about the latest changes, new features, bug fixes, and known
+issues for Docker Verified Publisher API.
+
+---
+
+## 2025-06-27
+
+### New
+
+- Create changelog
diff --git a/content/reference/api/dvp/deprecated.md b/content/reference/api/dvp/deprecated.md
new file mode 100644
index 00000000000..d47f041c92f
--- /dev/null
+++ b/content/reference/api/dvp/deprecated.md
@@ -0,0 +1,37 @@
+---
+description: Deprecated Docker Verified Publisher API endpoints
+keywords: deprecated
+title: Deprecated Docker Verified Publisher API endpoints
+linkTitle: Deprecated
+weight: 2
+---
+
+This page provides an overview of endpoints that are deprecated in Docker Verified Publisher API.
+
+## Endpoint deprecation policy
+
+As changes are made to Docker there may be times when existing endpoints need to be removed or replaced with newer endpoints. Before an existing endpoint is removed it is labeled as "deprecated" within the documentation. After some time it may be removed.
+
+## Deprecated endpoints
+
+The following table provides an overview of the current status of deprecated endpoints:
+
+**Deprecated**: the endpoint is marked "deprecated" and should no longer be used.
+
+The endpoint may be removed, disabled, or change behavior in a future release.
+
+**Removed**: the endpoint was removed, disabled, or hidden.
+
+---
+
+| Status | Feature | Date |
+|--------|---------------------------------------------------------------|------------|
+| | [Create deprecation log table](#create-deprecation-log-table) | 2025-06-27 |
+
+---
+
+### Create deprecation log table
+
+Reformat page
+
+---
\ No newline at end of file
diff --git a/content/reference/api/hub/dvp.md b/content/reference/api/dvp/latest.md
similarity index 73%
rename from content/reference/api/hub/dvp.md
rename to content/reference/api/dvp/latest.md
index c4cc61554ca..cd96ddf06d4 100644
--- a/content/reference/api/hub/dvp.md
+++ b/content/reference/api/dvp/latest.md
@@ -1,7 +1,9 @@
---
layout: api
description: Reference documentation and Swagger (OpenAPI) specification for the Docker Verified Publisher API.
-linkTitle: DVP Data API
title: Docker Verified Publisher API reference
-weight: 4
+linkTitle: OpenAPI
+weight: 3
+aliases:
+ - /reference/api/hub/dvp/
---
diff --git a/content/reference/api/dvp/latest.yaml b/content/reference/api/dvp/latest.yaml
new file mode 100644
index 00000000000..8ff2030acab
--- /dev/null
+++ b/content/reference/api/dvp/latest.yaml
@@ -0,0 +1,696 @@
+openapi: 3.0.0
+info:
+ title: DVP Data API
+ version: 1.0.0
+ x-logo:
+ url: https://docs.docker.com/assets/images/logo-docker-main.png
+ href: /reference
+ description: |
+ The Docker DVP Data API allows [Docker Verified Publishers](https://docs.docker.com/docker-hub/publish/) to view image pull analytics data for their namespaces. Analytics data can be retrieved as raw data, or in a summary format.
+
+ #### Summary data
+
+ In your summary data CSV, you will have access to the data points listed below. You can request summary data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month).
+
+ There are two levels of summary data:
+
+ - Repository-level, a summary of every namespace and repository
+ - Tag- or digest-level, a summary of every namespace, repository, and reference
+ (tag or digest)
+
+ The summary data formats contain the following data points:
+
+ - Unique IP address count
+ - Pulls by tag count
+ - Pulls by digest count
+ - Version check count
+
+ #### Raw data
+
+ In your raw data CSV you will have access to the data points listed below. You can request raw data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month). **Note:** each action is represented as a single row.
+
+ - Type (industry)
+ - Host (cloud provider)
+ - Country (geolocation)
+ - Timestamp
+ - Namespace
+ - Repository
+ - Reference (digest is always included, tag is provided when available)
+ - HTTP request method
+ - Action, one of the following:
+ - Pull by tag
+ - Pull by digest
+ - Version check
+ - User-Agent
+
+servers:
+ - url: https://hub.docker.com/api/publisher/analytics/v1
+security:
+ - HubAuth: []
+
+features.openapi:
+ schemaDefinitionsTagName: Schemas
+
+tags:
+ - name: authentication
+ x-displayName: Authentication Endpoints
+ - name: namespaces
+ x-displayName: Namespace data
+ - name: discovery
+ x-displayName: Discovery
+ - name: responseDataFile
+ x-displayName: ResponseDataFile
+ description: |
+
+ - name: yearModel
+ x-displayName: Year Data Model
+ description: |
+
+ - name: monthModel
+ x-displayName: Month Data Model
+ description: |
+
+ - name: weekModel
+ x-displayName: Week Data Model
+ description: |
+
+
+x-tagGroups:
+ - name: API
+ tags:
+ - authentication
+ - discovery
+ - namespaces
+ - name: Models
+ tags:
+ - responseDataFile
+ - yearModel
+ - monthModel
+ - weekModel
+
+paths:
+ /v2/users/login:
+ security: []
+ servers:
+ - url: https://hub.docker.com
+ post:
+ security: []
+ 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:
+ security: []
+ servers:
+ - url: https://hub.docker.com
+ post:
+ security: []
+ tags:
+ - authentication
+ summary: Second factor authentication
+ operationId: PostUsers2FALogin
+ description: |
+ When a 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"
+
+
+ /:
+ get:
+ tags: [discovery]
+ summary: Get namespaces and repos
+ description: Gets a list of your namespaces and repos which have data available.
+ operationId: getNamespaces
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NamespaceData'
+ /namespaces:
+ get:
+ tags: [discovery]
+ summary: Get user's namespaces
+ description: Get metadata associated with the namespaces the user has access to, including extra repos associated with the namespaces.
+ operationId: getUserNamespaces
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/NamespaceMetadata'
+ '401':
+ description: Authentication failed or second factor required
+ /namespaces/{namespace}:
+ get:
+ tags: [discovery]
+ summary: Get namespace
+ description: Gets metadata associated with specified namespace, including extra repos associated with the namespace.
+ operationId: getNamespace
+ parameters:
+ - in: path
+ name: namespace
+ schema:
+ type: string
+ required: true
+ description: Namespace to fetch data for
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NamespaceMetadata'
+ /namespaces/{namespace}/pulls:
+ get:
+ tags: [namespaces]
+ summary: Get pull data
+ description: Gets pulls for the given namespace.
+ operationId: getNamespacePulls
+ parameters:
+ - in: path
+ name: namespace
+ schema:
+ type: string
+ required: true
+ description: Namespace to fetch data for
+ - in: query
+ name: timespan
+ schema:
+ $ref: '#/components/schemas/TimespanType'
+ required: false
+ description: Timespan type for fetching data
+ - in: query
+ name: period
+ schema:
+ $ref: '#/components/schemas/PeriodType'
+ required: false
+ description: Relative period of the period to fetch data
+ - in: query
+ name: group
+ schema:
+ $ref: '#/components/schemas/GroupType'
+ required: false
+ description: Field to group the data by
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PullData'
+ '404':
+ description: Not found - namespace doesn't exist or user does not have permission to access it
+ /namespaces/{namespace}/repos/{repo}/pulls:
+ get:
+ tags: [namespaces]
+ summary: Get pull data
+ description: Gets pulls for the given repo.
+ operationId: getRepoPulls
+ parameters:
+ - in: path
+ name: namespace
+ schema:
+ type: string
+ required: true
+ description: Namespace to fetch data for
+ - in: path
+ name: repo
+ schema:
+ type: string
+ required: true
+ description: Repository to fetch data for
+ - in: query
+ name: timespan
+ schema:
+ $ref: '#/components/schemas/TimespanType'
+ required: false
+ description: Timespan type for fetching data
+ - in: query
+ name: period
+ schema:
+ $ref: '#/components/schemas/PeriodType'
+ required: false
+ description: Relative period of the period to fetch data
+ - in: query
+ name: group
+ schema:
+ $ref: '#/components/schemas/GroupType'
+ required: false
+ description: Field to group the data by
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PullData'
+ '404':
+ description: Not found - repo doesn't exist or user does not have permission to access it
+ /namespaces/{namespace}/pulls/exports/years:
+ get:
+ tags: [namespaces]
+ summary: Get years with data
+ description: Gets a list of years that have data for the given namespace.
+ operationId: getNamespaceYears
+ parameters:
+ - in: path
+ name: namespace
+ schema:
+ type: string
+ required: true
+ description: Namespace to fetch data for
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/YearData'
+ /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}:
+ get:
+ tags: [namespaces]
+ summary: Get timespans with data
+ description: Gets a list of timespans of the given type that have data for the given namespace and year.
+ operationId: getNamespaceTimespans
+ parameters:
+ - in: path
+ name: namespace
+ schema:
+ type: string
+ required: true
+ description: Namespace to fetch data for
+ - in: path
+ name: year
+ schema:
+ type: integer
+ required: true
+ description: Year to fetch data for
+ - in: path
+ name: timespantype
+ schema:
+ $ref: '#/components/schemas/TimespanType'
+ required: true
+ description: Type of timespan to fetch data for
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/TimespanData'
+ /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}/{timespan}:
+ get:
+ tags: [namespaces]
+ summary: Get namespace metadata for timespan
+ description: Gets info about data for the given namespace and timespan.
+ operationId: getNamespaceTimespanMetadata
+ parameters:
+ - in: path
+ name: namespace
+ schema:
+ type: string
+ required: true
+ description: Namespace to fetch data for
+ - in: path
+ name: year
+ schema:
+ type: integer
+ required: true
+ description: Year to fetch data for
+ - in: path
+ name: timespantype
+ schema:
+ $ref: '#/components/schemas/TimespanType'
+ required: true
+ description: Type of timespan to fetch data for
+ - in: path
+ name: timespan
+ schema:
+ type: integer
+ required: true
+ description: Timespan to fetch data for
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/TimespanModel'
+ '404':
+ description: Not Found
+ /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}/{timespan}/{dataview}:
+ get:
+ tags: [namespaces]
+ summary: Get namespace data for timespan
+ description: Gets a list of URLs that can be used to download the pull data for the given namespace and timespan.
+ operationId: getNamespaceDataByTimespan
+ parameters:
+ - in: path
+ name: namespace
+ schema:
+ type: string
+ required: true
+ description: Namespace to fetch data for
+ - in: path
+ name: year
+ schema:
+ type: integer
+ required: true
+ description: Year to fetch data for
+ - in: path
+ name: timespantype
+ schema:
+ $ref: '#/components/schemas/TimespanType'
+ required: true
+ description: Type of timespan to fetch data for
+ - in: path
+ name: timespan
+ schema:
+ type: integer
+ required: true
+ description: Timespan to fetch data for
+ - in: path
+ name: dataview
+ schema:
+ $ref: '#/components/schemas/DataviewType'
+ required: true
+ description: Type of data to fetch
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ResponseData'
+ /repos/pulls:
+ get:
+ tags: [namespaces]
+ summary: Get pull data for multiple repos
+ description: Gets pull for the given repos.
+ operationId: getManyReposPulls
+ parameters:
+ - in: query
+ name: repos
+ schema:
+ type: array
+ items:
+ type: string
+ required: true
+ description: Repositories to fetch data for (maximum of 50 repositories per request).
+ - in: query
+ name: timespan
+ schema:
+ $ref: '#/components/schemas/TimespanType'
+ required: false
+ description: Timespan type for fetching data
+ - in: query
+ name: period
+ schema:
+ $ref: '#/components/schemas/PeriodType'
+ required: false
+ description: Relative period of the period to fetch data
+ - in: query
+ name: group
+ schema:
+ $ref: '#/components/schemas/GroupType'
+ required: false
+ description: Field to group the data by
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ReposPullData'
+
+components:
+ 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-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
+
+ ResponseData:
+ properties:
+ data:
+ type: array
+ description: |
+ List of urls to download the data. When the data is large, the data will be split into multiple files.
+ items:
+ $ref: '#/components/schemas/ResponseDataFile'
+ ResponseDataFile:
+ properties:
+ url:
+ type: string
+ size:
+ type: integer
+ format: int64
+ NamespaceData:
+ properties:
+ namespaces:
+ type: array
+ items:
+ type: string
+ NamespaceMetadata:
+ properties:
+ namespace:
+ type: string
+ extraRepos:
+ type: array
+ items:
+ type: string
+ datasets:
+ type: array
+ items:
+ $ref: '#/components/schemas/DatasetModel'
+ DatasetModel:
+ properties:
+ name:
+ $ref: '#/components/schemas/DatasetType'
+ views:
+ type: array
+ items:
+ $ref: '#/components/schemas/DataviewType'
+ timespans:
+ type: array
+ items:
+ $ref: '#/components/schemas/TimespanType'
+ PullData:
+ properties:
+ pulls:
+ type: array
+ items:
+ $ref: '#/components/schemas/PullModel'
+ ReposPullData:
+ properties:
+ repos:
+ type: object
+ additionalProperties:
+ $ref: '#/components/schemas/PullData'
+ PullModel:
+ properties:
+ start:
+ type: string
+ end:
+ type: string
+ repo:
+ type: string
+ namespace:
+ type: string
+ pullCount:
+ type: integer
+ ipCount:
+ type: integer
+ country:
+ type: string
+
+ YearData:
+ properties:
+ years:
+ type: array
+ items:
+ $ref: '#/components/schemas/YearModel'
+ YearModel:
+ properties:
+ year:
+ type: integer
+ MonthData:
+ properties:
+ months:
+ type: array
+ items:
+ $ref: '#/components/schemas/MonthModel'
+ MonthModel:
+ properties:
+ month:
+ type: integer
+ WeekData:
+ properties:
+ weeks:
+ type: array
+ items:
+ $ref: '#/components/schemas/WeekModel'
+ WeekModel:
+ properties:
+ week:
+ type: integer
+ TimespanType:
+ type: string
+ enum: [months,weeks]
+ PeriodType:
+ type: string
+ enum: [last-2-months,last-3-months,last-6-months,last-12-months]
+ DataviewType:
+ type: string
+ enum: [raw,summary,repo-summary,namespace-summary]
+ DatasetType:
+ type: string
+ enum: [pulls]
+ TimespanModel:
+ oneOf:
+ - $ref: '#/components/schemas/MonthModel'
+ - $ref: '#/components/schemas/WeekModel'
+ TimespanData:
+ oneOf:
+ - $ref: '#/components/schemas/MonthData'
+ - $ref: '#/components/schemas/WeekData'
+ GroupType:
+ type: string
+ enum: [repo,namespace]
+ securitySchemes:
+ HubAuth:
+ type: https
+ scheme: bearer
+ bearerFormat: JWT
+ description: |
+ JWT Bearer Authentication is required to access the Docker DVP Data API.
+
+ This authentication documentation is duplicated from the [Hub API Authentication docs](https://docs.docker.com/reference/api/hub/#tag/authentication)
+ x-displayName: Docker Hub Authentication
diff --git a/content/reference/api/hub/changelog.md b/content/reference/api/hub/changelog.md
new file mode 100644
index 00000000000..0c2958a8d68
--- /dev/null
+++ b/content/reference/api/hub/changelog.md
@@ -0,0 +1,43 @@
+---
+description: Docker Hub API changelog
+title: Docker Hub API changelog
+linkTitle: Changelog
+keywords: docker hub, hub, whats new, release notes, api, changelog
+weight: 1
+toc_min: 1
+toc_max: 2
+aliases:
+ - /reference/api/hub/latest-changelog/
+---
+
+Here you can learn about the latest changes, new features, bug fixes, and known
+issues for Docker Service APIs.
+
+---
+
+## 2025-06-27
+
+### New
+
+- Add [List repositories](/reference/api/hub/latest/#tag/repositories/operation/listNamespaceRepositories) endpoints for a given `namespace`.
+
+### Deprecations
+
+- [Deprecate /v2/repositories/{namespace}](/reference/api/hub/deprecated/#deprecate-legacy-listnamespacerepositories)
+
+---
+
+## 2025-03-25
+
+### New
+
+- Add [APIs](/reference/api/hub/latest/#tag/org-access-tokens) for organization access token (OATs) management.
+
+---
+
+## 2025-03-18
+
+### New
+
+- Add access to [audit logs](/reference/api/hub/latest/#tag/audit-logs) for org
+ access tokens.
diff --git a/content/reference/api/hub/deprecated.md b/content/reference/api/hub/deprecated.md
index cd32c0d2c04..5e2ce9aabca 100644
--- a/content/reference/api/hub/deprecated.md
+++ b/content/reference/api/hub/deprecated.md
@@ -1,15 +1,54 @@
---
-description: Docker Hub API v1 (deprecated)
-keywords: kitematic, deprecated
-title: Docker Hub API v1 (deprecated)
-weight: 3
+description: Deprecated Docker Hub API endpoints
+keywords: deprecated
+title: Deprecated Docker Hub API endpoints
+linkTitle: Deprecated
+weight: 2
aliases:
- - /docker-hub/api/deprecated/
+ - /docker-hub/api/deprecated/
---
-> **Deprecated**
->
-> Docker Hub API v1 has been deprecated. Please use Docker Hub API v2 instead.
+This page provides an overview of endpoints that are deprecated in Docker Hub API.
+
+## Endpoint deprecation policy
+
+As changes are made to Docker there may be times when existing endpoints need to be removed or replaced with newer endpoints. Before an existing endpoint is removed it is labeled as "deprecated" within the documentation. After some time it may be removed.
+
+## Deprecated endpoints
+
+The following table provides an overview of the current status of deprecated endpoints:
+
+**Deprecated**: the endpoint is marked "deprecated" and should no longer be used.
+
+The endpoint may be removed, disabled, or change behavior in a future release.
+
+**Removed**: the endpoint was removed, disabled, or hidden.
+
+---
+
+| Status | Feature | Date |
+|------------|---------------------------------------------------------------------------------------|------------|
+| Deprecated | [Deprecate /v2/repositories/{namespace}](#deprecate-legacy-listnamespacerepositories) | 2025-06-27 |
+| | [Create deprecation log table](#create-deprecation-log-table) | 2025-06-27 |
+| Removed | [Docker Hub API v1 deprecation](#docker-hub-api-v1-deprecation) | 2022-08-23 |
+
+---
+
+### Deprecate legacy ListNamespaceRepositories
+
+Deprecate undocumented endpoint `GET /v2/repositories/{namespace}` replaced by [List repositories](/reference/api/hub/latest/#tag/repositories/operation/listNamespaceRepositories).
+
+---
+
+### Create deprecation log table
+
+Reformat page
+
+---
+
+### Docker Hub API v1 deprecation
+
+Docker Hub API v1 has been deprecated. Use Docker Hub API v2 instead.
The following API routes within the v1 path will no longer work and will return a 410 status code:
* `/v1/repositories/{name}/images`
@@ -21,11 +60,11 @@ The following API routes within the v1 path will no longer work and will return
If you want to continue using the Docker Hub API in your current applications, update your clients to use v2 endpoints.
-| **OLD** | **NEW** |
-|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| [/v1/repositories/{name}/images](https://github.com/moby/moby/blob/v1.3.0/docs/sources/reference/api/docker-io_api.md#list-user-repository-images) | [/v2/namespaces/{namespace}/repositories/{repository}/images](/reference/api/hub/latest.md#tag/images/operation/GetNamespacesRepositoriesImages) |
-| [/v1/repositories/{namespace}/{name}/images](https://github.com/moby/moby/blob/v1.3.0/docs/sources/reference/api/docker-io_api.md#list-user-repository-images) | [/v2/namespaces/{namespace}/repositories/{repository}/images](/reference/api/hub/latest.md#tag/images/operation/GetNamespacesRepositoriesImages) |
-| [/v1/repositories/{name}/tags](https://github.com/moby/moby/blob/v1.8.3/docs/reference/api/registry_api.md#list-repository-tags) | [/v2/namespaces/{namespace}/repositories/{repository}/tags](/reference/api/hub/latest.md#tag/repositories/paths/~1v2~1namespaces~1%7Bnamespace%7D~1repositories~1%7Brepository%7D~1tags/get) |
-| [/v1/repositories/{namespace}/{name}/tags](https://github.com/moby/moby/blob/v1.8.3/docs/reference/api/registry_api.md#list-repository-tags) | [/v2/namespaces/{namespace}/repositories/{repository}/tags](/reference/api/hub/latest.md#tag/repositories/paths/~1v2~1namespaces~1%7Bnamespace%7D~1repositories~1%7Brepository%7D~1tags/get) |
-| [/v1/repositories/{namespace}/{name}/tags](https://github.com/moby/moby/blob/v1.8.3/docs/reference/api/registry_api.md#get-image-id-for-a-particular-tag) | [/v2/namespaces/{namespace}/repositories/{repository}/tags/{tag}](/reference/api/hub/latest.md#tag/repositories/paths/~1v2~1namespaces~1%7Bnamespace%7D~1repositories~1%7Brepository%7D~1tags~1%7Btag%7D/get) |
-| [/v1/repositories/{namespace}/{name}/tags/{tag_name}](https://github.com/moby/moby/blob/v1.8.3/docs/reference/api/registry_api.md#get-image-id-for-a-particular-tag) | [/v2/namespaces/{namespace}/repositories/{repository}/tags/{tag}](/reference/api/hub/latest.md#tag/repositories/paths/~1v2~1namespaces~1%7Bnamespace%7D~1repositories~1%7Brepository%7D~1tags~1%7Btag%7D/get) |
+| **OLD** | **NEW** |
+|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
+| [/v1/repositories/{name}/tags](https://github.com/moby/moby/blob/v1.8.3/docs/reference/api/registry_api.md#list-repository-tags) | [/v2/namespaces/{namespace}/repositories/{repository}/tags](/reference/api/hub/latest/#tag/repositories/operation/ListRepositoryTags) |
+| [/v1/repositories/{namespace}/{name}/tags](https://github.com/moby/moby/blob/v1.8.3/docs/reference/api/registry_api.md#list-repository-tags) | [/v2/namespaces/{namespace}/repositories/{repository}/tags](/reference/api/hub/latest.md/#tag/repositories/operation/ListRepositoryTags) |
+| [/v1/repositories/{namespace}/{name}/tags](https://github.com/moby/moby/blob/v1.8.3/docs/reference/api/registry_api.md#get-image-id-for-a-particular-tag) | [/v2/namespaces/{namespace}/repositories/{repository}/tags/{tag}](/reference/api/hub/latest/#tag/repositories/operation/GetRepositoryTag) |
+| [/v1/repositories/{namespace}/{name}/tags/{tag_name}](https://github.com/moby/moby/blob/v1.8.3/docs/reference/api/registry_api.md#get-image-id-for-a-particular-tag) | [/v2/namespaces/{namespace}/repositories/{repository}/tags/{tag}](/reference/api/hub/latest/#tag/repositories/operation/GetRepositoryTag) |
+
+---
\ No newline at end of file
diff --git a/content/reference/api/hub/dvp.yaml b/content/reference/api/hub/dvp.yaml
index 8ff2030acab..3a561a7be5c 100644
--- a/content/reference/api/hub/dvp.yaml
+++ b/content/reference/api/hub/dvp.yaml
@@ -1,696 +1,5 @@
-openapi: 3.0.0
-info:
- title: DVP Data API
- version: 1.0.0
- x-logo:
- url: https://docs.docker.com/assets/images/logo-docker-main.png
- href: /reference
- description: |
- The Docker DVP Data API allows [Docker Verified Publishers](https://docs.docker.com/docker-hub/publish/) to view image pull analytics data for their namespaces. Analytics data can be retrieved as raw data, or in a summary format.
-
- #### Summary data
-
- In your summary data CSV, you will have access to the data points listed below. You can request summary data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month).
-
- There are two levels of summary data:
-
- - Repository-level, a summary of every namespace and repository
- - Tag- or digest-level, a summary of every namespace, repository, and reference
- (tag or digest)
-
- The summary data formats contain the following data points:
-
- - Unique IP address count
- - Pulls by tag count
- - Pulls by digest count
- - Version check count
-
- #### Raw data
-
- In your raw data CSV you will have access to the data points listed below. You can request raw data for a complete week (Monday through Sunday) or for a complete month (available on the first day of the following month). **Note:** each action is represented as a single row.
-
- - Type (industry)
- - Host (cloud provider)
- - Country (geolocation)
- - Timestamp
- - Namespace
- - Repository
- - Reference (digest is always included, tag is provided when available)
- - HTTP request method
- - Action, one of the following:
- - Pull by tag
- - Pull by digest
- - Version check
- - User-Agent
-
-servers:
- - url: https://hub.docker.com/api/publisher/analytics/v1
-security:
- - HubAuth: []
-
-features.openapi:
- schemaDefinitionsTagName: Schemas
-
-tags:
- - name: authentication
- x-displayName: Authentication Endpoints
- - name: namespaces
- x-displayName: Namespace data
- - name: discovery
- x-displayName: Discovery
- - name: responseDataFile
- x-displayName: ResponseDataFile
- description: |
-
- - name: yearModel
- x-displayName: Year Data Model
- description: |
-
- - name: monthModel
- x-displayName: Month Data Model
- description: |
-
- - name: weekModel
- x-displayName: Week Data Model
- description: |
-
-
-x-tagGroups:
- - name: API
- tags:
- - authentication
- - discovery
- - namespaces
- - name: Models
- tags:
- - responseDataFile
- - yearModel
- - monthModel
- - weekModel
-
-paths:
- /v2/users/login:
- security: []
- servers:
- - url: https://hub.docker.com
- post:
- security: []
- 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:
- security: []
- servers:
- - url: https://hub.docker.com
- post:
- security: []
- tags:
- - authentication
- summary: Second factor authentication
- operationId: PostUsers2FALogin
- description: |
- When a 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"
-
-
- /:
- get:
- tags: [discovery]
- summary: Get namespaces and repos
- description: Gets a list of your namespaces and repos which have data available.
- operationId: getNamespaces
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/NamespaceData'
- /namespaces:
- get:
- tags: [discovery]
- summary: Get user's namespaces
- description: Get metadata associated with the namespaces the user has access to, including extra repos associated with the namespaces.
- operationId: getUserNamespaces
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/NamespaceMetadata'
- '401':
- description: Authentication failed or second factor required
- /namespaces/{namespace}:
- get:
- tags: [discovery]
- summary: Get namespace
- description: Gets metadata associated with specified namespace, including extra repos associated with the namespace.
- operationId: getNamespace
- parameters:
- - in: path
- name: namespace
- schema:
- type: string
- required: true
- description: Namespace to fetch data for
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/NamespaceMetadata'
- /namespaces/{namespace}/pulls:
- get:
- tags: [namespaces]
- summary: Get pull data
- description: Gets pulls for the given namespace.
- operationId: getNamespacePulls
- parameters:
- - in: path
- name: namespace
- schema:
- type: string
- required: true
- description: Namespace to fetch data for
- - in: query
- name: timespan
- schema:
- $ref: '#/components/schemas/TimespanType'
- required: false
- description: Timespan type for fetching data
- - in: query
- name: period
- schema:
- $ref: '#/components/schemas/PeriodType'
- required: false
- description: Relative period of the period to fetch data
- - in: query
- name: group
- schema:
- $ref: '#/components/schemas/GroupType'
- required: false
- description: Field to group the data by
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PullData'
- '404':
- description: Not found - namespace doesn't exist or user does not have permission to access it
- /namespaces/{namespace}/repos/{repo}/pulls:
- get:
- tags: [namespaces]
- summary: Get pull data
- description: Gets pulls for the given repo.
- operationId: getRepoPulls
- parameters:
- - in: path
- name: namespace
- schema:
- type: string
- required: true
- description: Namespace to fetch data for
- - in: path
- name: repo
- schema:
- type: string
- required: true
- description: Repository to fetch data for
- - in: query
- name: timespan
- schema:
- $ref: '#/components/schemas/TimespanType'
- required: false
- description: Timespan type for fetching data
- - in: query
- name: period
- schema:
- $ref: '#/components/schemas/PeriodType'
- required: false
- description: Relative period of the period to fetch data
- - in: query
- name: group
- schema:
- $ref: '#/components/schemas/GroupType'
- required: false
- description: Field to group the data by
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PullData'
- '404':
- description: Not found - repo doesn't exist or user does not have permission to access it
- /namespaces/{namespace}/pulls/exports/years:
- get:
- tags: [namespaces]
- summary: Get years with data
- description: Gets a list of years that have data for the given namespace.
- operationId: getNamespaceYears
- parameters:
- - in: path
- name: namespace
- schema:
- type: string
- required: true
- description: Namespace to fetch data for
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/YearData'
- /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}:
- get:
- tags: [namespaces]
- summary: Get timespans with data
- description: Gets a list of timespans of the given type that have data for the given namespace and year.
- operationId: getNamespaceTimespans
- parameters:
- - in: path
- name: namespace
- schema:
- type: string
- required: true
- description: Namespace to fetch data for
- - in: path
- name: year
- schema:
- type: integer
- required: true
- description: Year to fetch data for
- - in: path
- name: timespantype
- schema:
- $ref: '#/components/schemas/TimespanType'
- required: true
- description: Type of timespan to fetch data for
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/TimespanData'
- /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}/{timespan}:
- get:
- tags: [namespaces]
- summary: Get namespace metadata for timespan
- description: Gets info about data for the given namespace and timespan.
- operationId: getNamespaceTimespanMetadata
- parameters:
- - in: path
- name: namespace
- schema:
- type: string
- required: true
- description: Namespace to fetch data for
- - in: path
- name: year
- schema:
- type: integer
- required: true
- description: Year to fetch data for
- - in: path
- name: timespantype
- schema:
- $ref: '#/components/schemas/TimespanType'
- required: true
- description: Type of timespan to fetch data for
- - in: path
- name: timespan
- schema:
- type: integer
- required: true
- description: Timespan to fetch data for
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/TimespanModel'
- '404':
- description: Not Found
- /namespaces/{namespace}/pulls/exports/years/{year}/{timespantype}/{timespan}/{dataview}:
- get:
- tags: [namespaces]
- summary: Get namespace data for timespan
- description: Gets a list of URLs that can be used to download the pull data for the given namespace and timespan.
- operationId: getNamespaceDataByTimespan
- parameters:
- - in: path
- name: namespace
- schema:
- type: string
- required: true
- description: Namespace to fetch data for
- - in: path
- name: year
- schema:
- type: integer
- required: true
- description: Year to fetch data for
- - in: path
- name: timespantype
- schema:
- $ref: '#/components/schemas/TimespanType'
- required: true
- description: Type of timespan to fetch data for
- - in: path
- name: timespan
- schema:
- type: integer
- required: true
- description: Timespan to fetch data for
- - in: path
- name: dataview
- schema:
- $ref: '#/components/schemas/DataviewType'
- required: true
- description: Type of data to fetch
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ResponseData'
- /repos/pulls:
- get:
- tags: [namespaces]
- summary: Get pull data for multiple repos
- description: Gets pull for the given repos.
- operationId: getManyReposPulls
- parameters:
- - in: query
- name: repos
- schema:
- type: array
- items:
- type: string
- required: true
- description: Repositories to fetch data for (maximum of 50 repositories per request).
- - in: query
- name: timespan
- schema:
- $ref: '#/components/schemas/TimespanType'
- required: false
- description: Timespan type for fetching data
- - in: query
- name: period
- schema:
- $ref: '#/components/schemas/PeriodType'
- required: false
- description: Relative period of the period to fetch data
- - in: query
- name: group
- schema:
- $ref: '#/components/schemas/GroupType'
- required: false
- description: Field to group the data by
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ReposPullData'
-
-components:
- 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-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
-
- ResponseData:
- properties:
- data:
- type: array
- description: |
- List of urls to download the data. When the data is large, the data will be split into multiple files.
- items:
- $ref: '#/components/schemas/ResponseDataFile'
- ResponseDataFile:
- properties:
- url:
- type: string
- size:
- type: integer
- format: int64
- NamespaceData:
- properties:
- namespaces:
- type: array
- items:
- type: string
- NamespaceMetadata:
- properties:
- namespace:
- type: string
- extraRepos:
- type: array
- items:
- type: string
- datasets:
- type: array
- items:
- $ref: '#/components/schemas/DatasetModel'
- DatasetModel:
- properties:
- name:
- $ref: '#/components/schemas/DatasetType'
- views:
- type: array
- items:
- $ref: '#/components/schemas/DataviewType'
- timespans:
- type: array
- items:
- $ref: '#/components/schemas/TimespanType'
- PullData:
- properties:
- pulls:
- type: array
- items:
- $ref: '#/components/schemas/PullModel'
- ReposPullData:
- properties:
- repos:
- type: object
- additionalProperties:
- $ref: '#/components/schemas/PullData'
- PullModel:
- properties:
- start:
- type: string
- end:
- type: string
- repo:
- type: string
- namespace:
- type: string
- pullCount:
- type: integer
- ipCount:
- type: integer
- country:
- type: string
-
- YearData:
- properties:
- years:
- type: array
- items:
- $ref: '#/components/schemas/YearModel'
- YearModel:
- properties:
- year:
- type: integer
- MonthData:
- properties:
- months:
- type: array
- items:
- $ref: '#/components/schemas/MonthModel'
- MonthModel:
- properties:
- month:
- type: integer
- WeekData:
- properties:
- weeks:
- type: array
- items:
- $ref: '#/components/schemas/WeekModel'
- WeekModel:
- properties:
- week:
- type: integer
- TimespanType:
- type: string
- enum: [months,weeks]
- PeriodType:
- type: string
- enum: [last-2-months,last-3-months,last-6-months,last-12-months]
- DataviewType:
- type: string
- enum: [raw,summary,repo-summary,namespace-summary]
- DatasetType:
- type: string
- enum: [pulls]
- TimespanModel:
- oneOf:
- - $ref: '#/components/schemas/MonthModel'
- - $ref: '#/components/schemas/WeekModel'
- TimespanData:
- oneOf:
- - $ref: '#/components/schemas/MonthData'
- - $ref: '#/components/schemas/WeekData'
- GroupType:
- type: string
- enum: [repo,namespace]
- securitySchemes:
- HubAuth:
- type: https
- scheme: bearer
- bearerFormat: JWT
- description: |
- JWT Bearer Authentication is required to access the Docker DVP Data API.
-
- This authentication documentation is duplicated from the [Hub API Authentication docs](https://docs.docker.com/reference/api/hub/#tag/authentication)
- x-displayName: Docker Hub Authentication
+---
+outputs:
+ - redirect
+url: /reference/api/dvp/latest.yaml
+---
diff --git a/content/reference/api/hub/latest-changelog.md b/content/reference/api/hub/latest-changelog.md
deleted file mode 100644
index c1c8d7ed42c..00000000000
--- a/content/reference/api/hub/latest-changelog.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Docker Hub API Changelog
-keywords: hub, api, changelog
-title: Docker Hub API Changelog
-keywords: docker hub, whats new, release notes, api, changelog
-weight: 2
-toc_min: 1
-toc_max: 2
----
-
-Here you can learn about the latest changes, new features, bug fixes, and known
-issues for Docker Service APIs.
-
-## 2025-03-25
-
-### New
-
-- Add [APIs](/reference/api/hub/latest/#tag/org-access-tokens) for organization access token (OATs) management.
-
-## 2025-03-18
-
-### New
-
-- Add access to [audit logs](/reference/api/hub/latest/#tag/audit-logs) for org
- access tokens.
diff --git a/content/reference/api/hub/latest.md b/content/reference/api/hub/latest.md
index f70a8cc07eb..843bcfd0528 100644
--- a/content/reference/api/hub/latest.md
+++ b/content/reference/api/hub/latest.md
@@ -1,7 +1,7 @@
---
layout: api
-description: Reference documentation and OpenAPI specification for the Docker Hub API.
+description: Reference documentation and Swagger (OpenAPI) specification for the Docker Hub API.
title: Docker Hub API reference
-linkTitle: Docker Hub API
-weight: 1
+linkTitle: OpenAPI
+weight: 3
---
diff --git a/content/reference/api/hub/latest.yaml b/content/reference/api/hub/latest.yaml
index 681870cc93d..abff223767c 100644
--- a/content/reference/api/hub/latest.yaml
+++ b/content/reference/api/hub/latest.yaml
@@ -23,7 +23,7 @@ tags:
- name: changelog
x-displayName: Changelog
description: |
- See the [Changelog](/reference/api/hub/latest-changelog) for a summary of changes across Docker Hub API versions.
+ See the [Changelog](/reference/api/hub/changelog) for a summary of changes across Docker Hub API versions.
- name: resources
x-displayName: Resources
description: |
@@ -823,6 +823,7 @@ paths:
- $ref: "#/components/parameters/namespace"
- $ref: "#/components/parameters/repository"
get:
+ operationId: ListRepositoryTags
summary: List repository tags
tags:
- repositories
@@ -867,6 +868,7 @@ paths:
- $ref: "#/components/parameters/repository"
- $ref: "#/components/parameters/tag"
get:
+ operationId: GetRepositoryTag
summary: Read repository tag
tags:
- repositories
@@ -926,8 +928,152 @@ paths:
$ref: "#/components/responses/forbidden"
"404":
$ref: "#/components/responses/NotFound"
+ /v2/namespaces/{namespace}/repositories:
+ parameters:
+ - $ref: "#/components/parameters/namespace"
+ get:
+ operationId: listNamespaceRepositories
+ summary: List repositories in a namespace
+ description: |
+ Returns a list of repositories within the specified namespace (organization or user).
+
+ Public repositories are accessible to everyone, while private repositories require appropriate authentication and permissions.
+ tags:
+ - repositories
+ security:
+ - bearerAuth: [ ]
+ - { } # Allow anonymous access for public repositories
+ parameters:
+ - in: query
+ name: page
+ required: false
+ schema:
+ type: integer
+ minimum: 1
+ default: 1
+ description: Page number to get. Defaults to 1.
+ - in: query
+ name: page_size
+ required: false
+ schema:
+ type: integer
+ minimum: 1
+ maximum: 1000
+ default: 10
+ description: Number of repositories to get per page. Defaults to 10. Max of 1000.
+ - in: query
+ name: name
+ required: false
+ schema:
+ type: string
+ description: Filter repositories by name (partial match).
+ - in: query
+ name: ordering
+ required: false
+ schema:
+ type: string
+ enum:
+ - name
+ - -name
+ - last_updated
+ - -last_updated
+ - pull_count
+ - -pull_count
+ description: |
+ Order repositories by the specified field. Prefix with '-' for descending order.
+ Available options:
+ - `name` / `-name`: Repository name (ascending/descending)
+ - `last_updated` / `-last_updated`: Last update time (ascending/descending)
+ - `pull_count` / `-pull_count`: Number of pulls (ascending/descending)
+ responses:
+ "200":
+ description: List of repositories
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/list_repositories_response"
+ examples:
+ repositories_list:
+ value:
+ count: 287
+ next: "https://hub.docker.com/v2/namespaces/docker/repositories?page=2&page_size=2"
+ previous: null
+ results:
+ - name: "highland_builder"
+ namespace: "docker"
+ repository_type: "image"
+ status: 1
+ status_description: "active"
+ description: "Image for performing Docker build requests"
+ is_private: false
+ star_count: 7
+ pull_count: 15722123
+ last_updated: "2023-06-20T10:44:45.459826Z"
+ last_modified: "2024-10-16T13:48:34.145251Z"
+ date_registered: "2015-05-19T21:13:35.937763Z"
+ affiliation: ""
+ media_types:
+ - "application/octet-stream"
+ - "application/vnd.docker.container.image.v1+json"
+ - "application/vnd.docker.distribution.manifest.v1+prettyjws"
+ content_types:
+ - "unrecognized"
+ - "image"
+ categories:
+ - name: "Languages & frameworks"
+ slug: "languages-and-frameworks"
+ - name: "Integration & delivery"
+ slug: "integration-and-delivery"
+ - name: "Operating systems"
+ slug: "operating-systems"
+ storage_size: 488723114800
+ - name: "whalesay"
+ namespace: "docker"
+ repository_type: null
+ status: 1
+ status_description: "active"
+ description: "An image for use in the Docker demo tutorial"
+ is_private: false
+ star_count: 757
+ pull_count: 130737682
+ last_updated: "2015-06-19T19:06:27.388123Z"
+ last_modified: "2024-10-16T13:48:34.145251Z"
+ date_registered: "2015-06-09T18:16:36.527329Z"
+ affiliation: ""
+ media_types:
+ - "application/vnd.docker.distribution.manifest.v1+prettyjws"
+ content_types:
+ - "image"
+ categories:
+ - name: "Languages & frameworks"
+ slug: "languages-and-frameworks"
+ - name: "Integration & delivery"
+ slug: "integration-and-delivery"
+ storage_size: 103666708
+ "400":
+ description: Bad Request - Invalid request parameters
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/error"
+ examples:
+ invalid_ordering:
+ summary: Invalid ordering value
+ value:
+ fields:
+ ordering: [ "Invalid ordering value. Must be one of: name, -name, last_updated, -last_updated, pull_count, -pull_count" ]
+ text: "Invalid ordering value"
+ "401":
+ $ref: "#/components/responses/unauthorized"
+ "403":
+ $ref: "#/components/responses/forbidden"
+ "404":
+ description: Page not found - occurs when requesting a page number `>1` that exceeds the available results
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/error"
-
/v2/orgs/{org_name}/members:
parameters:
- $ref: "#/components/parameters/org_name"
@@ -2009,6 +2155,129 @@ components:
schema:
$ref: "#/components/schemas/scim_user"
schemas:
+ repository_list_entry:
+ type: object
+ properties:
+ name:
+ type: string
+ description: Name of the repository
+ example: "hello-world"
+ namespace:
+ type: string
+ description: Namespace (organization or username) that owns the repository
+ example: "docker"
+ repository_type:
+ type: string
+ description: Type of repository
+ enum:
+ - image
+ - plugin
+ - null
+ example: "image"
+ nullable: true
+ status:
+ type: integer
+ description: Repository status code
+ example: 1
+ status_description:
+ type: string
+ description: Human-readable repository status
+ enum:
+ - active
+ - inactive
+ example: "active"
+ description:
+ type: string
+ description: Repository description
+ nullable: true
+ example: "Hello World! (an example of minimal Dockerization)"
+ is_private:
+ type: boolean
+ description: Whether the repository is private
+ example: false
+ star_count:
+ type: integer
+ description: Number of users who starred this repository
+ minimum: 0
+ example: 1234
+ pull_count:
+ type: integer
+ description: Total number of pulls for this repository
+ minimum: 0
+ example: 50000000
+ last_updated:
+ type: string
+ format: date-time
+ description: ISO 8601 timestamp of when the repository was last updated
+ example: "2023-12-01T10:30:00Z"
+ nullable: true
+ last_modified:
+ type: string
+ format: date-time
+ description: ISO 8601 timestamp of when the repository was last modified
+ example: "2023-12-01T10:30:00Z"
+ nullable: true
+ date_registered:
+ type: string
+ format: date-time
+ description: ISO 8601 timestamp of when the repository was created
+ example: "2013-06-19T19:07:54Z"
+ affiliation:
+ type: string
+ description: User's affiliation with the repository (empty string if no affiliation)
+ example: ""
+ media_types:
+ type: array
+ description: Media types supported by this repository
+ items:
+ type: string
+ example:
+ - "application/vnd.docker.plugin.v1+json"
+ content_types:
+ type: array
+ description: Content types supported by this repository
+ items:
+ type: string
+ example:
+ - "plugin"
+ categories:
+ type: array
+ description: Categories associated with this repository
+ items:
+ $ref: "#/components/schemas/category"
+ example: []
+ storage_size:
+ type: integer
+ description: Storage size in bytes used by this repository
+ minimum: 0
+ example: 232719127
+ category:
+ type: object
+ required:
+ - name
+ - slug
+ properties:
+ name:
+ type: string
+ description: Human-readable name of the category
+ example: "Databases"
+ minLength: 1
+ slug:
+ type: string
+ description: URL-friendly identifier for the category
+ example: "databases"
+ minLength: 1
+ pattern: "^[a-z0-9]+(?:-[a-z0-9]+)*$"
+ description: Repository category for classification and discovery
+ list_repositories_response:
+ allOf:
+ - $ref: "#/components/schemas/page"
+ - type: object
+ properties:
+ results:
+ type: array
+ items:
+ $ref: "#/components/schemas/repository_list_entry"
UsersLoginRequest:
description: User login details
type: object