From a3405040220a312a2a5165d36565e2729099e6b3 Mon Sep 17 00:00:00 2001 From: Gurleen Sethi Date: Wed, 19 Mar 2025 11:22:52 -0400 Subject: [PATCH 1/9] feat: document OATs public APIs --- content/reference/api/hub/latest.yaml | 169 ++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) diff --git a/content/reference/api/hub/latest.yaml b/content/reference/api/hub/latest.yaml index 14e787825af7..fe4164b4ee12 100644 --- a/content/reference/api/hub/latest.yaml +++ b/content/reference/api/hub/latest.yaml @@ -675,6 +675,69 @@ paths: $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' + /v2/orgs/{name}/access-tokens: + post: + summary: Create access token + description: | + Create an access token for an organization. + tags: + - access-tokens + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/createOrgAccessTokenRequest' + required: true + responses: + '201': + description: Created + content: + application/json: + schema: + $ref: '#/components/schemas/createOrgAccessTokenResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + get: + summary: List access tokens + description: | + List access tokens for an organization. + tags: + - access-tokens + security: + - bearerAuth: [] + 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/getOrgAccessTokensResponse' + '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' @@ -2798,6 +2861,112 @@ components: format: date-time description: The date the user was last modified as a RFC3339 formatted string. example: '2022-05-20T00:54:18Z' + orgAccessToken: + type: object + properties: + id: + type: string + example: "a7a5ef25-8889-43a0-8cc7-f2a94268e861" + label: + type: string + example: "My organization token" + created_by: + type: string + example: "johndoe" + is_active: + type: boolean + example: true + created_at: + type: string + format: date-time + example: "2022-05-20T00:54:18Z" + expires_at: + type: string + format: date-time + example: "2023-05-20T00:54:18Z" + nullable: true + last_used_at: + type: string + format: date-time + example: "2022-06-15T12:30:45Z" + nullable: true + orgAccessTokenResource: + type: object + properties: + type: + type: string + enum: + - TYPE_REPO + - TYPE_ORG + example: "TYPE_REPO" + description: The type of resource + required: true + path: + type: string + example: "myorg/myrepo" + description: The path of the resource. The format of this will change depending on the type of resource. + required: true + scopes: + type: array + description: The scopes this token has access to + items: + type: string + example: "repo-pull" + required: true + getOrgAccessTokensResponse: + type: object + properties: + total: + type: number + example: 10 + next: + type: string + example: https://hub.docker.com/v2/orgs/docker/access-tokens?page=2&page_size=10 + previous: + type: string + example: https://hub.docker.com/v2/orgs/docker/access-tokens?page=1&page_size=10 + results: + type: array + items: + $ref: '#/components/schemas/orgAccessToken' + createOrgAccessTokenRequest: + type: object + properties: + label: + type: string + description: Label for the access token + example: "My organization token" + required: true + description: + type: string + description: Description of the access token + example: "Token for CI/CD pipeline" + resources: + type: array + description: Resources this token has access to + items: + $ref: '#/components/schemas/orgAccessTokenResource' + expires_at: + type: string + format: date-time + description: Expiration date for the token + example: "2023-05-20T00:54:18Z" + nullable: true + createOrgAccessTokenResponse: + type: object + allOf: + - $ref: '#/components/schemas/orgAccessToken' + - type: object + properties: + token: + type: string + description: The actual token value that can be used for authentication + example: "dckr_oat_7awgM4jG5SQvxcvmNzhKj8PQjxo" + resources: + type: array + items: + $ref: '#/components/schemas/orgAccessTokenResource' + parameters: namespace: in: path From a57ea3e4b3291dd5acceba858bdc58d3604105c6 Mon Sep 17 00:00:00 2001 From: Gurleen Sethi Date: Wed, 19 Mar 2025 11:46:29 -0400 Subject: [PATCH 2/9] feat: document OATs public APIs --- content/reference/api/hub/latest.yaml | 97 ++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/content/reference/api/hub/latest.yaml b/content/reference/api/hub/latest.yaml index fe4164b4ee12..2f62fb8341d9 100644 --- a/content/reference/api/hub/latest.yaml +++ b/content/reference/api/hub/latest.yaml @@ -738,6 +738,81 @@ paths: '404': $ref: '#/components/responses/NotFound' + /v2/orgs/{org_name}/access-tokens/{access_token_id}: + parameters: + - $ref: '#/components/parameters/org_name' + - in: path + name: access_token_id + required: true + schema: + type: string + description: The ID of the access token to retrieve + example: "a7a5ef25-8889-43a0-8cc7-f2a94268e861" + get: + summary: Get access token + description: | + Get details of a specific access token for an organization. + tags: + - access-tokens + security: + - bearerAuth: [] + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/getOrgAccessTokenResponse' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + patch: + summary: Update access token + description: | + Update a specific access token for an organization. + tags: + - access-tokens + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/updateOrgAccessTokenRequest' + required: true + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/updateOrgAccessTokenResponse' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + delete: + summary: Delete access token + description: | + Delete a specific access token for an organization. This action cannot be undone. + tags: + - access-tokens + security: + - bearerAuth: [] + responses: + '204': + description: Access token deleted successfully + '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' @@ -2929,6 +3004,16 @@ components: type: array items: $ref: '#/components/schemas/orgAccessToken' + getOrgAccessTokenResponse: + allOf: + - $ref: '#/components/schemas/orgAccessToken' + - type: object + properties: + resources: + type: array + description: Resources this token has access to + items: + $ref: '#/components/schemas/orgAccessTokenResource' createOrgAccessTokenRequest: type: object properties: @@ -2966,7 +3051,17 @@ components: type: array items: $ref: '#/components/schemas/orgAccessTokenResource' - + updateOrgAccessTokenResponse: + type: object + allOf: + - $ref: '#/components/schemas/orgAccessToken' + - type: object + properties: + resources: + type: array + description: Resources this token has access to + items: + $ref: '#/components/schemas/orgAccessTokenResource' parameters: namespace: in: path From e7c14733b2a47f7679b8099d9236f032fd27f782 Mon Sep 17 00:00:00 2001 From: Gurleen Sethi Date: Wed, 19 Mar 2025 11:48:04 -0400 Subject: [PATCH 3/9] feat: document OATs public APIs --- content/reference/api/hub/latest.yaml | 1126 +++++++++++++------------ 1 file changed, 573 insertions(+), 553 deletions(-) diff --git a/content/reference/api/hub/latest.yaml b/content/reference/api/hub/latest.yaml index 2f62fb8341d9..df764550cdff 100644 --- a/content/reference/api/hub/latest.yaml +++ b/content/reference/api/hub/latest.yaml @@ -81,7 +81,7 @@ tags: ## Organization Access Token (OAT) Organization access tokens are scoped to specific resources and scopes in an organization. They are managed by organization owners. - + These tokens are meant for automation and are not meant to be used by users. @@ -169,7 +169,7 @@ paths: The returned token is used in the HTTP Authorization header like `Authorization: Bearer {TOKEN}`. _**As of September 16, 2024, this route requires a personal access token (PAT) instead of a password if your organization has SSO enforced.**_ - +
Deprecated: Use [Create access token] instead.
@@ -177,22 +177,22 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/UsersLoginRequest' + $ref: "#/components/schemas/UsersLoginRequest" description: Login details. required: true responses: - '200': + "200": description: Authentication successful content: application/json: schema: - $ref: '#/components/schemas/PostUsersLoginSuccessResponse' - '401': + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" + "401": description: Authentication failed or second factor required content: application/json: schema: - $ref: '#/components/schemas/PostUsersLoginErrorResponse' + $ref: "#/components/schemas/PostUsersLoginErrorResponse" /v2/users/2fa-login: post: tags: @@ -212,22 +212,22 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Users2FALoginRequest' + $ref: "#/components/schemas/Users2FALoginRequest" description: Login details. required: true responses: - '200': + "200": description: Authentication successful content: application/json: schema: - $ref: '#/components/schemas/PostUsersLoginSuccessResponse' - '401': + $ref: "#/components/schemas/PostUsersLoginSuccessResponse" + "401": description: Authentication failed content: application/json: schema: - $ref: '#/components/schemas/PostUsers2FALoginErrorResponse' + $ref: "#/components/schemas/PostUsers2FALoginErrorResponse" /v2/auth/token: post: tags: @@ -237,7 +237,7 @@ paths: operationId: AuthCreateAccessToken description: | Creates and returns a short-lived access token in JWT format for use as a bearer when calling Docker APIs. - + If successful, the access token returned should be used in the HTTP Authorization header like `Authorization: Bearer {access_token}`. @@ -265,15 +265,15 @@ paths: type: string example: dckr_pat_124509ugsdjga93 responses: - '200': + "200": description: Token created content: application/json: schema: - $ref: '#/components/schemas/AuthCreateTokenResponse' - '401': + $ref: "#/components/schemas/AuthCreateTokenResponse" + "401": description: Authentication failed - $ref: '#/components/responses/unauthorized' + $ref: "#/components/responses/unauthorized" /v2/access-tokens: post: summary: Create personal access token @@ -286,25 +286,25 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/createAccessTokenRequest' + $ref: "#/components/schemas/createAccessTokenRequest" required: true responses: - '201': + "201": description: Created content: application/json: schema: - $ref: '#/components/schemas/createAccessTokensResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' + $ref: "#/components/schemas/createAccessTokensResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" get: summary: List personal access tokens description: Returns a paginated list of personal access tokens. tags: - access-tokens - security: + security: - bearerAuth: [] parameters: - in: query @@ -318,16 +318,16 @@ paths: type: number default: 10 responses: - '200': + "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/getAccessTokensResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' + $ref: "#/components/schemas/getAccessTokensResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" /v2/access-tokens/{uuid}: parameters: - in: path @@ -341,64 +341,64 @@ paths: Updates a personal access token partially. You can either update the token's label or enable/disable it. tags: - access-tokens - security: + security: - bearerAuth: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/patchAccessTokenRequest' + $ref: "#/components/schemas/patchAccessTokenRequest" required: true responses: - '200': + "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/patchAccessTokenResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' + $ref: "#/components/schemas/patchAccessTokenResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" get: summary: Get personal access token description: Returns a personal access token by UUID. tags: - access-tokens - security: + security: - bearerAuth: [] responses: - '200': + "200": description: OK content: application/json: schema: allOf: - - $ref: '#/components/schemas/accessToken' + - $ref: "#/components/schemas/accessToken" - type: object properties: token: type: string - example: '' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' + example: "" + "401": + $ref: "#/components/responses/Unauthorized" + "404": + $ref: "#/components/responses/NotFound" delete: summary: Delete personal access token description: | Deletes a personal access token permanently. This cannot be undone. tags: - access-tokens - security: + security: - bearerAuth: [] responses: - '204': + "204": description: A successful response. - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' + "401": + $ref: "#/components/responses/Unauthorized" + "404": + $ref: "#/components/responses/NotFound" /v2/auditlogs/{account}/actions: get: summary: List audit log actions @@ -407,15 +407,15 @@ paths: operationId: AuditLogs_ListAuditActions - security: + security: - bearerAuth: [] responses: - '200': + "200": description: A successful response. content: application/json: schema: - $ref: '#/components/schemas/GetAuditActionsResponse' + $ref: "#/components/schemas/GetAuditActionsResponse" examples: response: value: @@ -462,8 +462,8 @@ paths: description: contains image tag delete events label: Tag Deleted label: Repository - '429': - description: '' + "429": + description: "" content: application/json: schema: {} @@ -472,8 +472,8 @@ paths: value: detail: Rate limit exceeded error: false - '500': - description: '' + "500": + description: "" content: application/json: schema: {} @@ -482,7 +482,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/rpcStatus' + $ref: "#/components/schemas/rpcStatus" parameters: - name: account description: Namespace to query audit log actions for. @@ -503,12 +503,12 @@ paths: security: - bearerAuth: [] responses: - '200': + "200": description: A successful response. content: application/json: schema: - $ref: '#/components/schemas/GetAuditLogsResponse' + $ref: "#/components/schemas/GetAuditLogsResponse" examples: response: value: @@ -520,11 +520,11 @@ paths: data: digest: sha256:c1ae9c435032a276f80220c7d9b40f76266bbe79243d34f9cda30b76fe114dfa tag: latest - timestamp: '2021-02-19T01:34:35Z' + timestamp: "2021-02-19T01:34:35Z" action_description: | pushed the tag latest with the digest sha256:c1ae9c435032a to the repository docker/example - '429': - description: '' + "429": + description: "" content: application/json: schema: {} @@ -533,8 +533,8 @@ paths: value: detail: Rate limit exceeded error: false - '500': - description: '' + "500": + description: "" content: application/json: schema: {} @@ -543,7 +543,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/rpcStatus' + $ref: "#/components/schemas/rpcStatus" parameters: - name: account description: Namespace to query audit logs for. @@ -618,21 +618,21 @@ paths: Returns organization settings by name. tags: - org-settings - security: + security: - bearerAuth: [] responses: - '200': + "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' + $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: | @@ -644,7 +644,7 @@ paths: - `restricted_images` tags: - org-settings - security: + security: - bearerAuth: [] requestBody: content: @@ -655,7 +655,7 @@ paths: properties: restricted_images: allOf: - - $ref: '#/components/schemas/restricted_images' + - $ref: "#/components/schemas/restricted_images" - type: object required: - enabled @@ -663,54 +663,54 @@ paths: - allow_verified_publishers required: true responses: - '200': + "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' + $ref: "#/components/schemas/orgSettings" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" /v2/orgs/{name}/access-tokens: post: summary: Create access token description: | Create an access token for an organization. tags: - - access-tokens + - org-access-tokens security: - bearerAuth: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/createOrgAccessTokenRequest' + $ref: "#/components/schemas/createOrgAccessTokenRequest" required: true responses: - '201': + "201": description: Created content: application/json: schema: - $ref: '#/components/schemas/createOrgAccessTokenResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '403': - $ref: '#/components/responses/Forbidden' - '404': - $ref: '#/components/responses/NotFound' + $ref: "#/components/schemas/createOrgAccessTokenResponse" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" get: summary: List access tokens description: | List access tokens for an organization. tags: - - access-tokens + - org-access-tokens security: - bearerAuth: [] parameters: @@ -725,22 +725,22 @@ paths: type: number default: 10 responses: - '200': + "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/getOrgAccessTokensResponse' - '401': - $ref: '#/components/responses/Unauthorized' - '403': - $ref: '#/components/responses/Forbidden' - '404': - $ref: '#/components/responses/NotFound' + $ref: "#/components/schemas/getOrgAccessTokensResponse" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" /v2/orgs/{org_name}/access-tokens/{access_token_id}: parameters: - - $ref: '#/components/parameters/org_name' + - $ref: "#/components/parameters/org_name" - in: path name: access_token_id required: true @@ -753,75 +753,75 @@ paths: description: | Get details of a specific access token for an organization. tags: - - access-tokens + - org-access-tokens security: - bearerAuth: [] responses: - '200': + "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/getOrgAccessTokenResponse' - '401': - $ref: '#/components/responses/Unauthorized' - '403': - $ref: '#/components/responses/Forbidden' - '404': - $ref: '#/components/responses/NotFound' + $ref: "#/components/schemas/getOrgAccessTokenResponse" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" patch: summary: Update access token description: | Update a specific access token for an organization. tags: - - access-tokens + - org-access-tokens security: - bearerAuth: [] requestBody: content: application/json: schema: - $ref: '#/components/schemas/updateOrgAccessTokenRequest' + $ref: "#/components/schemas/updateOrgAccessTokenRequest" required: true responses: - '200': + "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/updateOrgAccessTokenResponse' - '401': - $ref: '#/components/responses/Unauthorized' - '403': - $ref: '#/components/responses/Forbidden' - '404': - $ref: '#/components/responses/NotFound' + $ref: "#/components/schemas/updateOrgAccessTokenResponse" + "401": + $ref: "#/components/responses/Unauthorized" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" delete: summary: Delete access token description: | Delete a specific access token for an organization. This action cannot be undone. tags: - - access-tokens + - org-access-tokens security: - bearerAuth: [] responses: - '204': + "204": description: Access token deleted successfully - '401': - $ref: '#/components/responses/Unauthorized' - '403': - $ref: '#/components/responses/Forbidden' - '404': - $ref: '#/components/responses/NotFound' + "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' + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" get: summary: List repository tags tags: - repositories - security: + security: - bearerAuth: [] parameters: - in: query @@ -837,65 +837,65 @@ paths: type: integer description: Number of items to get per page. Defaults to 10. Max of 100. responses: - '200': - $ref: '#/components/responses/list_tags' - '403': - $ref: '#/components/responses/Forbidden' - '404': - $ref: '#/components/responses/NotFound' + "200": + $ref: "#/components/responses/list_tags" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" head: summary: Check repository tags tags: - repositories - security: + security: - bearerAuth: [] responses: - '200': + "200": description: Repository contains tags - '403': - $ref: '#/components/responses/Forbidden' - '404': - $ref: '#/components/responses/NotFound' + "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' + - $ref: "#/components/parameters/namespace" + - $ref: "#/components/parameters/repository" + - $ref: "#/components/parameters/tag" get: summary: Read repository tag tags: - repositories - security: + security: - bearerAuth: [] responses: - '200': - $ref: '#/components/responses/get_tag' - '403': - $ref: '#/components/responses/Forbidden' - '404': - $ref: '#/components/responses/NotFound' + "200": + $ref: "#/components/responses/get_tag" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" head: summary: Check repository tag tags: - repositories - security: + security: - bearerAuth: [] responses: - '200': + "200": description: Repository tag exists - '403': - $ref: '#/components/responses/Forbidden' - '404': - $ref: '#/components/responses/NotFound' + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" /v2/orgs/{org_name}/members: parameters: - - $ref: '#/components/parameters/org_name' - - $ref: '#/components/parameters/search' - - $ref: '#/components/parameters/page' - - $ref: '#/components/parameters/page_size' - - $ref: '#/components/parameters/invites' - - $ref: '#/components/parameters/type' - - $ref: '#/components/parameters/role' + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/search" + - $ref: "#/components/parameters/page" + - $ref: "#/components/parameters/page_size" + - $ref: "#/components/parameters/invites" + - $ref: "#/components/parameters/type" + - $ref: "#/components/parameters/role" get: summary: List org members description: | @@ -912,28 +912,28 @@ paths: tags: - orgs - security: + security: - bearerAuth: [] responses: - '200': + "200": description: List of members content: application/json: schema: type: array items: - $ref: '#/components/schemas/org_member_paginated' - '400': - $ref: '#/components/responses/bad_request' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + $ref: "#/components/schemas/org_member_paginated" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" /v2/orgs/{org_name}/members/export: parameters: - - $ref: '#/components/parameters/org_name' + - $ref: "#/components/parameters/org_name" get: summary: Export org members CSV description: | @@ -942,10 +942,10 @@ paths: tags: - orgs - security: + security: - bearerAuth: [] responses: - '200': + "200": description: Exported members content: text/csv: @@ -995,19 +995,19 @@ paths: schema: type: string example: attachment;filename="{org_name}-members-{timestamp}.csv" - '400': - $ref: '#/components/responses/bad_request' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" /v2/orgs/{org_name}/members/{username}: x-audience: public parameters: - - $ref: '#/components/parameters/org_name' - - $ref: '#/components/parameters/username' + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/username" put: summary: Update org member (role) description: | @@ -1017,7 +1017,7 @@ paths: tags: - orgs - security: + security: - bearerAuth: [] requestBody: required: true @@ -1035,20 +1035,20 @@ paths: - editor - member responses: - '200': + "200": description: Member role updated content: application/json: schema: - $ref: '#/components/schemas/org_member' - '400': - $ref: '#/components/responses/bad_request' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + $ref: "#/components/schemas/org_member" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" delete: summary: Remove member from org description: | @@ -1057,23 +1057,23 @@ paths: tags: - orgs - security: + security: - bearerAuth: [] responses: - '204': + "204": description: Member removed successfully - '400': - $ref: '#/components/responses/bad_request' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" /v2/orgs/{org_name}/invites: x-audience: public parameters: - - $ref: '#/components/parameters/org_name' + - $ref: "#/components/parameters/org_name" get: summary: List org invites description: | @@ -1082,11 +1082,11 @@ paths: tags: - invites - security: + security: - bearerAuth: [] responses: - '200': - description: '' + "200": + description: "" content: application/json: schema: @@ -1095,28 +1095,28 @@ paths: data: type: array items: - $ref: '#/components/schemas/invite' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + $ref: "#/components/schemas/invite" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" /v2/orgs/{org_name}/groups: x-audience: public parameters: - - $ref: '#/components/parameters/org_name' + - $ref: "#/components/parameters/org_name" get: summary: Get groups of an organization description: | tags: - groups - security: + security: - bearerAuth: [] parameters: - - $ref: '#/components/parameters/page' - - $ref: '#/components/parameters/page_size' + - $ref: "#/components/parameters/page" + - $ref: "#/components/parameters/page_size" - in: query name: username schema: @@ -1128,8 +1128,8 @@ paths: type: string description: Get groups for the specified group in the organization. responses: - '200': - description: '' + "200": + description: "" content: application/json: schema: @@ -1146,13 +1146,13 @@ paths: results: type: array items: - $ref: '#/components/schemas/org_group' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" post: summary: Create a new group description: | @@ -1161,7 +1161,7 @@ paths: tags: - groups - security: + security: - bearerAuth: [] requestBody: content: @@ -1175,51 +1175,51 @@ paths: description: type: string responses: - '201': + "201": description: Group created successfully content: application/json: schema: - $ref: '#/components/schemas/org_group' - '400': - $ref: '#/components/responses/bad_request' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' + $ref: "#/components/schemas/org_group" + "400": + $ref: "#/components/responses/bad_request" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" /v2/orgs/{org_name}/groups/{group_name}: x-audience: public parameters: - - $ref: '#/components/parameters/org_name' - - $ref: '#/components/parameters/group_name' + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" get: summary: Get a group of an organization description: | tags: - groups - security: + security: - bearerAuth: [] responses: - '200': - description: '' + "200": + description: "" content: application/json: schema: - $ref: '#/components/schemas/org_group' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" put: summary: Update the details for an organization group description: | tags: - groups - security: + security: - bearerAuth: [] requestBody: content: @@ -1233,25 +1233,25 @@ paths: description: type: string responses: - '200': - description: '' + "200": + description: "" content: application/json: schema: - $ref: '#/components/schemas/org_group' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" patch: summary: Update some details for an organization group description: | tags: - groups - security: + security: - bearerAuth: [] requestBody: content: @@ -1263,45 +1263,45 @@ paths: description: type: string responses: - '200': - description: '' + "200": + description: "" content: application/json: schema: - $ref: '#/components/schemas/org_group' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + $ref: "#/components/schemas/org_group" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" delete: summary: Delete an organization group description: | tags: - groups - security: + security: - bearerAuth: [] responses: - '204': + "204": description: Group deleted successfully - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" /v2/orgs/{org_name}/groups/{group_name}/members: x-audience: public get: - security: + security: - bearerAuth: [] parameters: - - $ref: '#/components/parameters/org_name' - - $ref: '#/components/parameters/group_name' - - $ref: '#/components/parameters/page' - - $ref: '#/components/parameters/page_size' + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" + - $ref: "#/components/parameters/page" + - $ref: "#/components/parameters/page_size" - in: query name: search schema: @@ -1316,8 +1316,8 @@ paths: tags: - groups responses: - '200': - description: '' + "200": + description: "" content: application/json: schema: @@ -1334,60 +1334,60 @@ paths: results: type: array items: - $ref: '#/components/schemas/group_member' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + $ref: "#/components/schemas/group_member" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" post: parameters: - - $ref: '#/components/parameters/org_name' - - $ref: '#/components/parameters/group_name' + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" summary: Add a member to a group description: | tags: - groups - security: + security: - bearerAuth: [] requestBody: - $ref: '#/components/requestBodies/add_member_to_org_group' + $ref: "#/components/requestBodies/add_member_to_org_group" responses: - '200': + "200": description: OK - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' - '500': - $ref: '#/components/responses/internal_error' + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" + "500": + $ref: "#/components/responses/internal_error" /v2/orgs/{org_name}/groups/{group_name}/members/{username}: x-audience: public parameters: - - $ref: '#/components/parameters/org_name' - - $ref: '#/components/parameters/group_name' - - $ref: '#/components/parameters/username' + - $ref: "#/components/parameters/org_name" + - $ref: "#/components/parameters/group_name" + - $ref: "#/components/parameters/username" delete: summary: Remove a user from a group description: | tags: - groups - security: + security: - bearerAuth: [] responses: - '204': + "204": description: User removed successfully - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" /v2/invites/{id}: x-audience: public parameters: @@ -1404,17 +1404,17 @@ paths: tags: - invites - security: + security: - bearerAuth: [] responses: - '204': - description: '' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + "204": + description: "" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" /v2/invites/{id}/resend: x-audience: public parameters: @@ -1431,21 +1431,21 @@ paths: tags: - invites - security: + security: - bearerAuth: [] responses: - '204': - description: '' - '401': - $ref: '#/components/responses/unauthorized' - '403': - $ref: '#/components/responses/forbidden' - '404': - $ref: '#/components/responses/not_found' + "204": + description: "" + "401": + $ref: "#/components/responses/unauthorized" + "403": + $ref: "#/components/responses/forbidden" + "404": + $ref: "#/components/responses/not_found" /v2/invites/bulk: x-audience: public parameters: - - $ref: '#/components/parameters/bulk_invite' + - $ref: "#/components/parameters/bulk_invite" post: summary: Bulk create invites description: | @@ -1455,11 +1455,11 @@ paths: tags: - invites requestBody: - $ref: '#/components/requestBodies/bulk_invite_request' - security: + $ref: "#/components/requestBodies/bulk_invite_request" + security: - bearerAuth: [] responses: - '202': + "202": description: Accepted content: application/json: @@ -1467,11 +1467,11 @@ paths: type: object properties: invitees: - $ref: '#/components/schemas/bulk_invite' - '400': - $ref: '#/components/responses/bad_request' - '409': - $ref: '#/components/responses/conflict' + $ref: "#/components/schemas/bulk_invite" + "400": + $ref: "#/components/responses/bad_request" + "409": + $ref: "#/components/responses/conflict" /v2/scim/2.0/ServiceProviderConfig: x-audience: public get: @@ -1483,12 +1483,12 @@ paths: 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' + "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: x-audience: public get: @@ -1500,12 +1500,12 @@ paths: security: - bearerSCIMAuth: [] responses: - '200': - $ref: '#/components/responses/scim_get_resource_types_resp' - '401': - $ref: '#/components/responses/scim_unauthorized' - '500': - $ref: '#/components/responses/scim_error' + "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}: x-audience: public get: @@ -1524,14 +1524,14 @@ paths: 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' + "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: x-audience: public get: @@ -1543,12 +1543,12 @@ paths: security: - bearerSCIMAuth: [] responses: - '200': - $ref: '#/components/responses/scim_get_schemas_resp' - '401': - $ref: '#/components/responses/scim_unauthorized' - '500': - $ref: '#/components/responses/scim_error' + "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}: x-audience: public get: @@ -1567,14 +1567,14 @@ paths: 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' + "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: x-audience: public get: @@ -1612,7 +1612,7 @@ paths: schema: type: integer minimum: 1 - description: '' + description: "" example: 1 - name: count in: query @@ -1620,15 +1620,15 @@ paths: type: integer minimum: 1 maximum: 200 - description: '' + description: "" example: 10 - name: filter in: query schema: type: string - description: '' + description: "" example: userName eq "jon.snow@docker.com" - - $ref: '#/components/parameters/scim_attributes' + - $ref: "#/components/parameters/scim_attributes" - name: sortOrder in: query schema: @@ -1643,18 +1643,18 @@ paths: 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' + "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: | @@ -1664,26 +1664,26 @@ paths: security: - bearerSCIMAuth: [] requestBody: - $ref: '#/components/requestBodies/scim_create_user_request' + $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' + "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}: x-audience: public parameters: - - $ref: '#/components/parameters/scim_user_id' + - $ref: "#/components/parameters/scim_user_id" get: summary: Get a user description: | @@ -1693,18 +1693,18 @@ paths: 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' + "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: | @@ -1714,22 +1714,22 @@ paths: security: - bearerSCIMAuth: [] requestBody: - $ref: '#/components/requestBodies/scim_update_user_request' + $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' + "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" components: responses: BadRequest: @@ -1737,83 +1737,83 @@ components: content: application/json: schema: - $ref: '#/components/schemas/ValueError' + $ref: "#/components/schemas/ValueError" Unauthorized: description: Unauthorized content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" Forbidden: description: Forbidden content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" NotFound: description: Not Found content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" list_tags: description: list repository tags content: application/json: schema: - $ref: '#/components/schemas/paginated_tags' + $ref: "#/components/schemas/paginated_tags" get_tag: description: repository tag content: application/json: schema: - $ref: '#/components/schemas/tag' + $ref: "#/components/schemas/tag" bad_request: description: Bad Request content: application/json: schema: - $ref: '#/components/schemas/error' + $ref: "#/components/schemas/error" unauthorized: description: Unauthorized content: application/json: schema: - $ref: '#/components/schemas/error' + $ref: "#/components/schemas/error" forbidden: description: Forbidden content: application/json: schema: - $ref: '#/components/schemas/error' + $ref: "#/components/schemas/error" not_found: description: Not Found content: application/json: schema: - $ref: '#/components/schemas/error' + $ref: "#/components/schemas/error" conflict: description: Conflict content: application/json: schema: - $ref: '#/components/schemas/error' + $ref: "#/components/schemas/error" internal_error: description: Internal content: application/json: schema: - $ref: '#/components/schemas/error' + $ref: "#/components/schemas/error" scim_bad_request: description: Bad Request content: application/scim+json: schema: allOf: - - $ref: '#/components/schemas/scim_error' + - $ref: "#/components/schemas/scim_error" - properties: status: - example: '400' + example: "400" scimType: type: string description: Some types of errors will return this per the specification. @@ -1823,58 +1823,58 @@ components: application/scim+json: schema: allOf: - - $ref: '#/components/schemas/scim_error' + - $ref: "#/components/schemas/scim_error" - properties: status: - example: '401' + example: "401" scim_forbidden: description: Forbidden content: application/scim+json: schema: allOf: - - $ref: '#/components/schemas/scim_error' + - $ref: "#/components/schemas/scim_error" - properties: status: - example: '403' + example: "403" scim_not_found: description: Not Found content: application/scim+json: schema: allOf: - - $ref: '#/components/schemas/scim_error' + - $ref: "#/components/schemas/scim_error" - properties: status: - example: '404' + example: "404" scim_conflict: description: Conflict content: application/scim+json: schema: allOf: - - $ref: '#/components/schemas/scim_error' + - $ref: "#/components/schemas/scim_error" - properties: status: - example: '409' + example: "409" scim_error: description: Internal Error content: application/scim+json: schema: allOf: - - $ref: '#/components/schemas/scim_error' + - $ref: "#/components/schemas/scim_error" - properties: status: - example: '500' + example: "500" scim_get_service_provider_config_resp: - description: '' + description: "" content: application/scim+json: schema: - $ref: '#/components/schemas/scim_service_provider_config' + $ref: "#/components/schemas/scim_service_provider_config" scim_get_resource_types_resp: - description: '' + description: "" content: application/scim+json: schema: @@ -1891,15 +1891,15 @@ components: resources: type: array items: - $ref: '#/components/schemas/scim_resource_type' + $ref: "#/components/schemas/scim_resource_type" scim_get_resource_type_resp: - description: '' + description: "" content: application/scim+json: schema: - $ref: '#/components/schemas/scim_resource_type' + $ref: "#/components/schemas/scim_resource_type" scim_get_schemas_resp: - description: '' + description: "" content: application/scim+json: schema: @@ -1916,15 +1916,15 @@ components: resources: type: array items: - $ref: '#/components/schemas/scim_schema' + $ref: "#/components/schemas/scim_schema" scim_get_schema_resp: - description: '' + description: "" content: application/scim+json: schema: - $ref: '#/components/schemas/scim_schema' + $ref: "#/components/schemas/scim_schema" scim_get_users_resp: - description: '' + description: "" content: application/scim+json: schema: @@ -1948,25 +1948,25 @@ components: resources: type: array items: - $ref: '#/components/schemas/scim_user' + $ref: "#/components/schemas/scim_user" scim_create_user_resp: - description: '' + description: "" content: application/scim+json: schema: - $ref: '#/components/schemas/scim_user' + $ref: "#/components/schemas/scim_user" scim_get_user_resp: - description: '' + description: "" content: application/scim+json: schema: - $ref: '#/components/schemas/scim_user' + $ref: "#/components/schemas/scim_user" scim_update_user_resp: - description: '' + description: "" content: application/scim+json: schema: - $ref: '#/components/schemas/scim_user' + $ref: "#/components/schemas/scim_user" schemas: UsersLoginRequest: description: User login details @@ -2064,7 +2064,7 @@ components: details: type: array items: - $ref: '#/components/schemas/protobufAny' + $ref: "#/components/schemas/protobufAny" AuditLogAction: type: object properties: @@ -2084,7 +2084,7 @@ components: actions: type: array items: - $ref: '#/components/schemas/AuditLogAction' + $ref: "#/components/schemas/AuditLogAction" description: List of audit log actions. label: type: string @@ -2095,7 +2095,7 @@ components: actions: type: object additionalProperties: - $ref: '#/components/schemas/AuditLogActions' + $ref: "#/components/schemas/AuditLogActions" description: Map of audit log actions. description: GetAuditActions response. GetAuditLogsResponse: @@ -2104,7 +2104,7 @@ components: logs: type: array items: - $ref: '#/components/schemas/AuditLog' + $ref: "#/components/schemas/AuditLog" description: List of audit log events. description: GetAuditLogs response. AuditLog: @@ -2162,7 +2162,7 @@ components: example: some user agent created_at: type: string - example: '2021-07-20T12:00:00.000000Z' + example: "2021-07-20T12:00:00.000000Z" last_used: type: string example: null @@ -2211,9 +2211,9 @@ components: Optional expiration date for the token. If omitted, the token will remain valid indefinitely. format: date-time - example: '2021-10-28T18:30:19.520861Z' + example: "2021-10-28T18:30:19.520861Z" createAccessTokensResponse: - $ref: '#/components/schemas/accessToken' + $ref: "#/components/schemas/accessToken" getAccessTokensResponse: type: object properties: @@ -2233,12 +2233,12 @@ components: type: array items: allOf: - - $ref: '#/components/schemas/accessToken' + - $ref: "#/components/schemas/accessToken" - type: object properties: token: type: string - example: '' + example: "" patchAccessTokenRequest: type: object properties: @@ -2251,12 +2251,12 @@ components: type: boolean example: false patchAccessTokenResponse: - $ref: '#/components/schemas/accessToken' + $ref: "#/components/schemas/accessToken" orgSettings: type: object properties: restricted_images: - $ref: '#/components/schemas/restricted_images' + $ref: "#/components/schemas/restricted_images" restricted_images: type: object properties: @@ -2304,7 +2304,7 @@ components: layers: type: array items: - $ref: '#/components/schemas/layer' + $ref: "#/components/schemas/layer" os: type: string description: operating system @@ -2325,12 +2325,12 @@ components: description: Status of the image last_pulled: type: string - example: '2021-01-05T21:06:53.506400Z' + 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' + example: "2021-01-05T21:06:53.506400Z" description: datetime of last push nullable: true tag: @@ -2341,13 +2341,13 @@ components: description: tag ID images: type: object - $ref: '#/components/schemas/image' + $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' + example: "2021-01-05T21:06:53.506400Z" description: datetime of last update nullable: true last_updater: @@ -2376,23 +2376,23 @@ components: 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' + 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' + example: "2021-01-05T21:06:53.506400Z" description: datetime of last push nullable: true paginated_tags: allOf: - - $ref: '#/components/schemas/page' + - $ref: "#/components/schemas/page" - type: object properties: results: type: array items: - $ref: '#/components/schemas/tag' + $ref: "#/components/schemas/tag" page: type: object properties: @@ -2443,13 +2443,13 @@ components: example: server scim_schema_parent_attribute: allOf: - - $ref: '#/components/schemas/scim_schema_attribute' + - $ref: "#/components/schemas/scim_schema_attribute" - type: object properties: subAttributes: type: array items: - $ref: '#/components/schemas/scim_schema_attribute' + $ref: "#/components/schemas/scim_schema_attribute" invite: type: object properties: @@ -2474,7 +2474,7 @@ components: example: owners created_at: type: string - example: '2021-10-28T18:30:19.520861Z' + example: "2021-10-28T18:30:19.520861Z" bulk_invite: type: object properties: @@ -2492,7 +2492,7 @@ components: description: status of the invite or validation error invite: description: Invite data if successfully invited - $ref: '#/components/schemas/invite' + $ref: "#/components/schemas/invite" example: invitees: - invitee: invitee@docker.com @@ -2503,7 +2503,7 @@ components: invitee: invitee@docker.com org: docker team: owners - created_at: '2021-10-28T18:30:19.520861Z' + created_at: "2021-10-28T18:30:19.520861Z" - invitee: invitee2@docker.com status: existing_org_member - invitee: invitee3@docker.com @@ -2545,7 +2545,7 @@ components: example: Docker Inc date_joined: type: string - example: '2021-01-05T21:06:53.506400Z' + example: "2021-01-05T21:06:53.506400Z" full_name: type: string example: Jon Snow @@ -2568,7 +2568,7 @@ components: example: dockeruser org_member: allOf: - - $ref: '#/components/schemas/user' + - $ref: "#/components/schemas/user" properties: email: type: string @@ -2605,21 +2605,21 @@ components: description: | Last time the user logged in. To access this field, you must have insights visible for your organization. See [Insights](https://docs.docker.com/admin/organization/insights/#view-insights-for-organization-users). - example: '2021-01-05T21:06:53.506400Z' + example: "2021-01-05T21:06:53.506400Z" last_seen_at: type: string format: date-time description: | Last time the user was seen. To access this field, you must have insights visible for your organization. See [Insights](https://docs.docker.com/admin/organization/insights/#view-insights-for-organization-users). - example: '2021-01-05T21:06:53.506400Z' + example: "2021-01-05T21:06:53.506400Z" last_desktop_version: type: string description: | Last desktop version the user used. To access this field, you must have insights visible for your organization. See [Insights](https://docs.docker.com/admin/organization/insights/#view-insights-for-organization-users). example: 4.29.0 - + org_member_paginated: type: object properties: @@ -2639,7 +2639,7 @@ components: type: array description: List of accounts. items: - $ref: '#/components/schemas/org_member' + $ref: "#/components/schemas/org_member" org_group: type: object properties: @@ -2675,7 +2675,7 @@ components: date_joined: type: string format: date-time - example: '2021-01-05T21:06:53.506400Z' + example: "2021-01-05T21:06:53.506400Z" full_name: type: string example: John Snow @@ -2715,7 +2715,7 @@ components: type: boolean legacy_email_address: allOf: - - $ref: '#/components/schemas/email_address' + - $ref: "#/components/schemas/email_address" - type: object properties: user: @@ -2723,7 +2723,7 @@ components: example: dockeruser email_with_username: allOf: - - $ref: '#/components/schemas/email_address' + - $ref: "#/components/schemas/email_address" - type: object properties: username: @@ -2740,7 +2740,7 @@ components: - urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig documentationUri: type: string - example: '' + example: "" patch: properties: supported: @@ -2844,7 +2844,7 @@ components: type: array example: [] items: - $ref: '#/components/schemas/scim_schema_parent_attribute' + $ref: "#/components/schemas/scim_schema_parent_attribute" scim_email: type: object properties: @@ -2897,26 +2897,26 @@ components: type: object properties: schemas: - $ref: '#/components/schemas/scim_user_schemas' + $ref: "#/components/schemas/scim_user_schemas" id: - $ref: '#/components/schemas/scim_user_id' + $ref: "#/components/schemas/scim_user_id" userName: - $ref: '#/components/schemas/scim_user_username' + $ref: "#/components/schemas/scim_user_username" name: - $ref: '#/components/schemas/scim_user_name' + $ref: "#/components/schemas/scim_user_name" displayName: - $ref: '#/components/schemas/scim_user_display_name' + $ref: "#/components/schemas/scim_user_display_name" active: type: boolean example: true emails: type: array items: - $ref: '#/components/schemas/scim_email' + $ref: "#/components/schemas/scim_email" groups: type: array items: - $ref: '#/components/schemas/scim_group' + $ref: "#/components/schemas/scim_group" meta: type: object properties: @@ -2930,12 +2930,12 @@ components: type: string format: date-time description: The creation date for the user as a RFC3339 formatted string. - example: '2022-05-20T00:54:18Z' + example: "2022-05-20T00:54:18Z" lastModified: type: string format: date-time description: The date the user was last modified as a RFC3339 formatted string. - example: '2022-05-20T00:54:18Z' + example: "2022-05-20T00:54:18Z" orgAccessToken: type: object properties: @@ -3003,17 +3003,17 @@ components: results: type: array items: - $ref: '#/components/schemas/orgAccessToken' + $ref: "#/components/schemas/orgAccessToken" getOrgAccessTokenResponse: allOf: - - $ref: '#/components/schemas/orgAccessToken' + - $ref: "#/components/schemas/orgAccessToken" - type: object properties: resources: type: array description: Resources this token has access to items: - $ref: '#/components/schemas/orgAccessTokenResource' + $ref: "#/components/schemas/orgAccessTokenResource" createOrgAccessTokenRequest: type: object properties: @@ -3030,17 +3030,17 @@ components: type: array description: Resources this token has access to items: - $ref: '#/components/schemas/orgAccessTokenResource' + $ref: "#/components/schemas/orgAccessTokenResource" expires_at: type: string format: date-time description: Expiration date for the token example: "2023-05-20T00:54:18Z" - nullable: true + nullable: true createOrgAccessTokenResponse: type: object allOf: - - $ref: '#/components/schemas/orgAccessToken' + - $ref: "#/components/schemas/orgAccessToken" - type: object properties: token: @@ -3050,18 +3050,38 @@ components: resources: type: array items: - $ref: '#/components/schemas/orgAccessTokenResource' + $ref: "#/components/schemas/orgAccessTokenResource" + updateOrgAccessTokenRequest: + type: object + properties: + label: + type: string + description: Label for the access token + example: "My organization token" + description: + type: string + description: Description of the access token + example: "Token for CI/CD pipeline" + resources: + type: array + description: Resources this token has access to + items: + $ref: "#/components/schemas/orgAccessTokenResource" + is_active: + type: boolean + description: Whether the token is active + example: true updateOrgAccessTokenResponse: type: object allOf: - - $ref: '#/components/schemas/orgAccessToken' + - $ref: "#/components/schemas/orgAccessToken" - type: object properties: resources: type: array description: Resources this token has access to items: - $ref: '#/components/schemas/orgAccessTokenResource' + $ref: "#/components/schemas/orgAccessTokenResource" parameters: namespace: in: path @@ -3218,11 +3238,11 @@ components: - userName properties: schemas: - $ref: '#/components/schemas/scim_user_schemas' + $ref: "#/components/schemas/scim_user_schemas" userName: - $ref: '#/components/schemas/scim_user_username' + $ref: "#/components/schemas/scim_user_username" name: - $ref: '#/components/schemas/scim_user_name' + $ref: "#/components/schemas/scim_user_name" scim_update_user_request: required: true content: @@ -3233,10 +3253,10 @@ components: - schemas properties: schemas: - $ref: '#/components/schemas/scim_user_schemas' + $ref: "#/components/schemas/scim_user_schemas" name: allOf: - - $ref: '#/components/schemas/scim_user_name' + - $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 @@ -3278,6 +3298,6 @@ x-tagGroups: - org-settings - repositories - scim - - orgs + - orgs - groups - invites From c4932f89d9c3f8fdac79d43545eb6d6fb79c88e5 Mon Sep 17 00:00:00 2001 From: Gurleen Sethi Date: Wed, 19 Mar 2025 11:55:00 -0400 Subject: [PATCH 4/9] feat: add tag --- content/reference/api/hub/latest.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/reference/api/hub/latest.yaml b/content/reference/api/hub/latest.yaml index df764550cdff..d2d0d192e849 100644 --- a/content/reference/api/hub/latest.yaml +++ b/content/reference/api/hub/latest.yaml @@ -133,6 +133,11 @@ tags: The organization endpoints allow you to interact with and manage your organizations. For more information, see [Organization administration overview](https://docs.docker.com/admin/organization/). + - name: org-access-tokens + x-displayName: Organization Access Tokens + x-audience: public + description: | + The organization access token endpoints allow you to manage organization access tokens, see [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information. - name: groups x-displayName: Groups (Teams) x-audience: public From 37db93d2e2cfa8bbe69e5d8da76a6dcad43a991c Mon Sep 17 00:00:00 2001 From: Gurleen Sethi Date: Mon, 24 Mar 2025 11:28:14 -0400 Subject: [PATCH 5/9] feat: add to changelog --- content/reference/api/hub/latest-changelog.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/content/reference/api/hub/latest-changelog.md b/content/reference/api/hub/latest-changelog.md index 030cfc991f4f..3889e6dade48 100644 --- a/content/reference/api/hub/latest-changelog.md +++ b/content/reference/api/hub/latest-changelog.md @@ -11,6 +11,12 @@ 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 org access token management. + ## 2025-03-18 ### New From 7c5c868d6e456278bd01645293c79bd95481f641 Mon Sep 17 00:00:00 2001 From: Gurleen Sethi Date: Mon, 24 Mar 2025 12:04:02 -0400 Subject: [PATCH 6/9] feat: add to changelog --- content/reference/api/hub/latest.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/reference/api/hub/latest.yaml b/content/reference/api/hub/latest.yaml index d2d0d192e849..98e55ffb2c5a 100644 --- a/content/reference/api/hub/latest.yaml +++ b/content/reference/api/hub/latest.yaml @@ -133,11 +133,6 @@ tags: The organization endpoints allow you to interact with and manage your organizations. For more information, see [Organization administration overview](https://docs.docker.com/admin/organization/). - - name: org-access-tokens - x-displayName: Organization Access Tokens - x-audience: public - description: | - The organization access token endpoints allow you to manage organization access tokens, see [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information. - name: groups x-displayName: Groups (Teams) x-audience: public @@ -159,6 +154,11 @@ tags: 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/security/for-admins/provisioning/scim/). + - name: org-access-tokens + x-displayName: Organization Access Tokens + x-audience: public + description: | + The organization access token endpoints allow you to manage organization access tokens, see [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information. paths: /v2/users/login: post: From 78be2874a5d3056d40cbd53335c18fe8f933ce79 Mon Sep 17 00:00:00 2001 From: Gurleen Sethi Date: Mon, 24 Mar 2025 12:06:40 -0400 Subject: [PATCH 7/9] feat: add to api group --- content/reference/api/hub/latest.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/content/reference/api/hub/latest.yaml b/content/reference/api/hub/latest.yaml index 98e55ffb2c5a..83ba12a81b56 100644 --- a/content/reference/api/hub/latest.yaml +++ b/content/reference/api/hub/latest.yaml @@ -3306,3 +3306,4 @@ x-tagGroups: - orgs - groups - invites + - org-access-tokens From 140cc09eacce158a95d673e645603dd709f8996c Mon Sep 17 00:00:00 2001 From: Gurleen Sethi Date: Mon, 24 Mar 2025 12:16:13 -0400 Subject: [PATCH 8/9] feat: reorder api group --- content/reference/api/hub/latest.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/reference/api/hub/latest.yaml b/content/reference/api/hub/latest.yaml index 83ba12a81b56..023d7afd1a06 100644 --- a/content/reference/api/hub/latest.yaml +++ b/content/reference/api/hub/latest.yaml @@ -3304,6 +3304,6 @@ x-tagGroups: - repositories - scim - orgs + - org-access-tokens - groups - invites - - org-access-tokens From a8de7f75cad334e3b9d48bbf7e5d752736f7373b Mon Sep 17 00:00:00 2001 From: Gurleen Sethi Date: Mon, 24 Mar 2025 12:23:39 -0400 Subject: [PATCH 9/9] chore: nit changes --- content/reference/api/hub/latest-changelog.md | 2 +- content/reference/api/hub/latest.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/reference/api/hub/latest-changelog.md b/content/reference/api/hub/latest-changelog.md index 3889e6dade48..c1c8d7ed42c1 100644 --- a/content/reference/api/hub/latest-changelog.md +++ b/content/reference/api/hub/latest-changelog.md @@ -15,7 +15,7 @@ issues for Docker Service APIs. ### New -- Add [apis](/reference/api/hub/latest/#tag/org-access-tokens) for org access token management. +- Add [APIs](/reference/api/hub/latest/#tag/org-access-tokens) for organization access token (OATs) management. ## 2025-03-18 diff --git a/content/reference/api/hub/latest.yaml b/content/reference/api/hub/latest.yaml index 023d7afd1a06..44f4bab98c76 100644 --- a/content/reference/api/hub/latest.yaml +++ b/content/reference/api/hub/latest.yaml @@ -158,7 +158,7 @@ tags: x-displayName: Organization Access Tokens x-audience: public description: | - The organization access token endpoints allow you to manage organization access tokens, see [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information. + The organization access token endpoints allow you to manage organization access tokens (OATs). See [Organization access tokens](https://docs.docker.com/security/for-admins/access-tokens/) for more information. paths: /v2/users/login: post: