{
  "openapi": "3.0.1",
  "info": {
    "title": "Azure Container Registry",
    "description": "Metadata API definition for the Azure Container Registry runtime",
    "version": "2019-08-15-preview"
  },
  "servers": [
    {
      "url": "https://azure.local/"
    }
  ],
  "security": [
    {
      "registry_auth": null,
      "registry_oauth2": null
    }
  ],
  "tags": [
    {
      "name": "v2",
      "description": "Root API"
    },
    {
      "name": "Manifest",
      "description": "Everything about manifests"
    },
    {
      "name": "Tag",
      "description": "Everything about tags"
    },
    {
      "name": "Layer",
      "description": "Everything about layers"
    },
    {
      "name": "Repository",
      "description": "Everything about repository"
    },
    {
      "name": "AcrRepository",
      "description": "ACR APIs related to repositories"
    },
    {
      "name": "AcrManifest",
      "description": "ACR APIs related to manifests"
    },
    {
      "name": "AcrTag",
      "description": "ACR APIs related to tags"
    }
  ],
  "paths": {
    "/acr/v1/_catalog": {
      "get": {
        "tags": [
          "AcrRepository"
        ],
        "description": "List repositories",
        "operationId": "Repository_GetList",
        "parameters": [
          {
            "name": "last",
            "in": "query",
            "description": "Query parameter for the last item in previous query. Result set will include values lexically after last.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "n",
            "in": "query",
            "description": "query parameter for max number of items",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a list of repositories",
            "headers": {
              "Link": {
                "description": "next paginated result",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Repositories"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/acr/v1/{name}": {
      "get": {
        "tags": [
          "AcrRepository",
          "AcrMetadata"
        ],
        "description": "Get repository attributes",
        "operationId": "Repository_GetAttributes",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a list of attributes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RepositoryAttributes"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "AcrRepository"
        ],
        "description": "Delete the repository identified by `name`",
        "operationId": "Repository_Delete",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "The repository is deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletedRepository"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "AcrRepository",
          "AcrMetadata"
        ],
        "description": "Update the attribute identified by `name` where `reference` is the name of the repository.",
        "operationId": "Repository_UpdateAttributes",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Repository attribute value",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeableAttributes"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "The attributes are updated"
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/acr/v1/{name}/_manifests": {
      "get": {
        "tags": [
          "AcrManifest",
          "AcrMetadata"
        ],
        "description": "List manifests of a repository",
        "operationId": "Manifests_GetList",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "last",
            "in": "query",
            "description": "Query parameter for the last item in previous query. Result set will include values lexically after last.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "n",
            "in": "query",
            "description": "query parameter for max number of items",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "orderby",
            "in": "query",
            "description": "orderby query parameter",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a list of manifests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrManifests"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/acr/v1/{name}/_manifests/{reference}": {
      "get": {
        "tags": [
          "AcrManifest",
          "AcrMetadata"
        ],
        "description": "Get manifest attributes",
        "operationId": "Manifests_GetAttributes",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reference",
            "in": "path",
            "description": "A tag or a digest, pointing to a specific image",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of attributes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManifestAttributes"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "AcrManifest",
          "AcrMetadata"
        ],
        "description": "Update attributes of a manifest",
        "operationId": "Manifests_UpdateAttributes",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reference",
            "in": "path",
            "description": "A tag or a digest, pointing to a specific image",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Repository attribute value",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeableAttributes"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "The attributes are updated"
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/acr/v1/{name}/_tags": {
      "get": {
        "tags": [
          "AcrTag",
          "AcrMetadata"
        ],
        "description": "List tags of a repository",
        "operationId": "Tag_GetList",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "last",
            "in": "query",
            "description": "Query parameter for the last item in previous query. Result set will include values lexically after last.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "n",
            "in": "query",
            "description": "query parameter for max number of items",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "orderby",
            "in": "query",
            "description": "orderby query parameter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "digest",
            "in": "query",
            "description": "filter by digest",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tag details of a repository",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagList"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/acr/v1/{name}/_tags/{reference}": {
      "get": {
        "tags": [
          "AcrTag",
          "AcrMetadata"
        ],
        "description": "Get tag attributes by tag",
        "operationId": "Tag_GetAttributes",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reference",
            "in": "path",
            "description": "Tag name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tag attributes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagAttributes"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "AcrTag",
          "AcrMetadata"
        ],
        "description": "Delete tag",
        "operationId": "Tag_Delete",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reference",
            "in": "path",
            "description": "Tag name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "The tag is deleted"
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "AcrTag",
          "AcrMetadata"
        ],
        "description": "Update tag attributes",
        "operationId": "Tag_UpdateAttributes",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reference",
            "in": "path",
            "description": "Tag name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Repository attribute value",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeableAttributes"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "The attributes are updated"
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/oauth2/exchange": {
      "post": {
        "tags": [
          "AcrToken",
          "RefreshToken"
        ],
        "description": "Exchange AAD tokens for an ACR refresh Token",
        "operationId": "RefreshTokens_GetFromExchange",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "required": [
                  "grant_type",
                  "service"
                ],
                "type": "object",
                "properties": {
                  "grant_type": {
                    "type": "string",
                    "description": "Can take a value of access_token_refresh_token, or access_token, or refresh_token",
                    "enum": [
                      "access_token_refresh_token",
                      "access_token",
                      "refresh_token"
                    ]
                  },
                  "service": {
                    "type": "string",
                    "description": "Indicates the name of your Azure container registry."
                  },
                  "tenant": {
                    "type": "string",
                    "description": "AAD tenant associated to the AAD credentials."
                  },
                  "refresh_token": {
                    "type": "string",
                    "description": "AAD refresh token, mandatory when grant_type is access_token_refresh_token or refresh_token"
                  },
                  "access_token": {
                    "type": "string",
                    "description": "AAD access token, mandatory when grant_type is access_token_refresh_token or access_token."
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Refresh token acquired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RefreshToken"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/oauth2/token": {
      "get": {
        "tags": [
          "AcrToken",
          "AccessToken",
          "userLogin"
        ],
        "description": "Exchange Username, Password and Scope an ACR Access Token",
        "operationId": "AccessTokens_GetFromLogin",
        "parameters": [
          {
            "name": "service",
            "in": "query",
            "description": "Indicates the name of your Azure container registry.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "description": "Expected to be a valid scope, and can be specified more than once for multiple scope requests. You can obtain this from the Www-Authenticate response header from the challenge.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Access token acquired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessToken"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        },
        "security": [
          {
            "registry_auth": null
          }
        ]
      },
      "post": {
        "tags": [
          "AcrToken",
          "AccessToken"
        ],
        "description": "Exchange ACR Refresh token for an ACR Access Token",
        "operationId": "AccessTokens_Get",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "required": [
                  "grant_type",
                  "refresh_token",
                  "scope",
                  "service"
                ],
                "type": "object",
                "properties": {
                  "grant_type": {
                    "type": "string",
                    "description": "Grant type is expected to be refresh_token",
                    "enum": [
                      "refresh_token"
                    ]
                  },
                  "service": {
                    "type": "string",
                    "description": "Indicates the name of your Azure container registry."
                  },
                  "scope": {
                    "type": "string",
                    "description": "Which is expected to be a valid scope, and can be specified more than once for multiple scope requests. You obtained this from the Www-Authenticate response header from the challenge."
                  },
                  "refresh_token": {
                    "type": "string",
                    "description": "Must be a valid ACR refresh token"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Access token acquired",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessToken"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/v2/": {
      "get": {
        "tags": [
          "v2"
        ],
        "description": "Tells whether this Docker Registry instance supports Docker Registry HTTP API v2",
        "operationId": "V2Support_Check",
        "responses": {
          "200": {
            "description": "Successful response. API v2 supported"
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{name}/blobs/uploads/": {
      "post": {
        "tags": [
          "Layer"
        ],
        "description": "Mount a blob identified by the `mount` parameter from another repository.",
        "operationId": "Blob_Mount",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Name of the source repository.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mount",
            "in": "query",
            "description": "Digest of blob to mount from the source repository.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "The blob has been created in the registry and is available at the provided location.",
            "headers": {
              "Docker-Upload-UUID": {
                "description": "Identifies the docker upload uuid for the current request.",
                "schema": {
                  "type": "string"
                }
              },
              "Docker-Content-Digest": {
                "description": "Digest of the targeted content for the request.",
                "schema": {
                  "type": "string"
                }
              },
              "Location": {
                "description": "Provided location for blob",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{name}/blobs/{digest}": {
      "get": {
        "tags": [
          "Layer"
        ],
        "description": "Retrieve the blob from the registry identified by digest.",
        "operationId": "Blob_Get",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "digest",
            "in": "path",
            "description": "Digest of a BLOB",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The blob identified by digest is available. The blob content will be present in the body of the response.",
            "headers": {
              "Content-Length": {
                "description": "The length of the requested blob content.",
                "schema": {
                  "type": "integer",
                  "format": "int64"
                }
              },
              "Docker-Content-Digest": {
                "description": "Digest of the targeted content for the request.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "description": "blob binary data",
                  "format": "binary"
                }
              }
            }
          },
          "307": {
            "description": "The blob identified by digest is available at the provided location.",
            "headers": {
              "Location": {
                "description": "The location where the layer should be accessible.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Layer"
        ],
        "description": "Removes an already uploaded blob.",
        "operationId": "Blob_Delete",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "digest",
            "in": "path",
            "description": "Digest of a BLOB",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "The blob identified by digest is available. The blob content will be present in the body of the response.",
            "headers": {
              "Docker-Content-Digest": {
                "description": "Digest of the targeted content for the request.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "description": "blob binary data",
                  "format": "binary"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "head": {
        "tags": [
          "Layer"
        ],
        "description": "Same as GET, except only the headers are returned.",
        "operationId": "Blob_Check",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "digest",
            "in": "path",
            "description": "Digest of a BLOB",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The blob identified by digest is available. The blob content will be present in the body of the response.",
            "headers": {
              "Content-Length": {
                "description": "The length of the requested blob content.",
                "schema": {
                  "type": "integer",
                  "format": "int64"
                }
              },
              "Docker-Content-Digest": {
                "description": "Digest of the targeted content for the request.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "307": {
            "description": "The blob identified by digest is available at the provided location.",
            "headers": {
              "Location": {
                "description": "The location where the layer should be accessible.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{name}/manifests/{reference}": {
      "get": {
        "tags": [
          "Manifest"
        ],
        "description": "Get the manifest identified by `name` and `reference` where `reference` can be a tag or digest.",
        "operationId": "Manifests_Get",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reference",
            "in": "path",
            "description": "A tag or a digest, pointing to a specific image",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "accept",
            "in": "header",
            "description": "Accept header string delimited by comma. For example, application/vnd.docker.distribution.manifest.v2+json",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the requested manifest file in a larger combined group",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManifestWrapper"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Manifest"
        ],
        "description": "Put the manifest identified by `name` and `reference` where `reference` can be a tag or digest.",
        "operationId": "Manifests_Create",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reference",
            "in": "path",
            "description": "A tag or a digest, pointing to a specific image",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Manifest body, can take v1 or v2 values depending on accept header",
          "content": {
            "application/vnd.docker.distribution.manifest.v2+json": {
              "schema": {
                "$ref": "#/components/schemas/Manifest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The manifest is updated",
            "headers": {
              "Content-Length": {
                "description": "The length of the requested blob content.",
                "schema": {
                  "type": "integer",
                  "format": "int64"
                }
              },
              "Docker-Content-Digest": {
                "description": "Identifies the docker upload uuid for the current request.",
                "schema": {
                  "type": "string"
                }
              },
              "Location": {
                "description": "The canonical location url of the uploaded manifest.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Manifest"
        ],
        "description": "Delete the manifest identified by `name` and `reference`. Note that a manifest can _only_ be deleted by `digest`.",
        "operationId": "Manifests_Delete",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "Name of the image (including the namespace)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reference",
            "in": "path",
            "description": "A tag or a digest, pointing to a specific image",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "The manifest has been deleted"
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      }
    },
    "/{nextBlobUuidLink}": {
      "get": {
        "tags": [
          "Layer"
        ],
        "description": "Retrieve status of upload identified by uuid. The primary purpose of this endpoint is to resolve the current status of a resumable upload.",
        "operationId": "Blob_GetStatus",
        "parameters": [
          {
            "name": "nextBlobUuidLink",
            "in": "path",
            "description": "Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) )",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "The upload is known and in progress. The last received offset is available in the Range header.",
            "headers": {
              "Docker-Upload-UUID": {
                "description": "Identifies the docker upload uuid for the current request.",
                "schema": {
                  "type": "string"
                }
              },
              "Range": {
                "description": "Range indicating the current progress of the upload.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Layer"
        ],
        "description": "Complete the upload, providing all the data in the body, if necessary. A request without a body will just complete the upload with previously uploaded content.",
        "operationId": "Blob_EndUpload",
        "parameters": [
          {
            "name": "digest",
            "in": "query",
            "description": "Digest of a BLOB",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nextBlobUuidLink",
            "in": "path",
            "description": "Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) )",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Optional raw data of blob",
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "object",
                "format": "file"
              }
            }
          },
          "required": false
        },
        "responses": {
          "201": {
            "description": "The upload has been completed and accepted by the registry.",
            "headers": {
              "Range": {
                "description": "Range indicating the current progress of the upload.",
                "schema": {
                  "type": "string"
                }
              },
              "Docker-Content-Digest": {
                "description": "Digest of the targeted content for the request.",
                "schema": {
                  "type": "string"
                }
              },
              "Location": {
                "description": "Provided location for blob",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Layer"
        ],
        "description": "Cancel outstanding upload processes, releasing associated resources. If this is not called, the unfinished uploads will eventually timeout.",
        "operationId": "Blob_CancelUpload",
        "parameters": [
          {
            "name": "nextBlobUuidLink",
            "in": "path",
            "description": "Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) )",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "The upload has been successfully deleted."
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Layer"
        ],
        "description": "Upload a stream of data without completing the upload.",
        "operationId": "Blob_Upload",
        "parameters": [
          {
            "name": "nextBlobUuidLink",
            "in": "path",
            "description": "Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) )",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Raw data of blob",
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "object",
                "format": "file"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "The stream of data has been accepted and the current progress is available in the range header. The updated upload location is available in the Location header.",
            "headers": {
              "Docker-Upload-UUID": {
                "description": "Identifies the docker upload uuid for the current request.",
                "schema": {
                  "type": "string"
                }
              },
              "Range": {
                "description": "Range indicating the current progress of the upload.",
                "schema": {
                  "type": "string"
                }
              },
              "Location": {
                "description": "Provided location for blob",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "ACR error response describing why the operation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcrErrors"
                }
              }
            }
          }
        },
        "security": [
          {
            "registry_auth": null,
            "registry_oauth2": null
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "formData_AccessToken": {
        "type": "string",
        "description": "AAD access token, mandatory when grant_type is access_token_refresh_token or access_token."
      },
      "formData_Grant_type": {
        "type": "string",
        "description": "Can take a value of access_token_refresh_token, or access_token, or refresh_token",
        "enum": [
          "access_token_refresh_token",
          "access_token",
          "refresh_token"
        ]
      },
      "formData_RefreshToken": {
        "type": "string",
        "description": "AAD refresh token, mandatory when grant_type is access_token_refresh_token or refresh_token"
      },
      "formData_Scope": {
        "type": "string",
        "description": "Which is expected to be a valid scope, and can be specified more than once for multiple scope requests. You can obtain this from the Www-Authenticate response header from the challenge."
      },
      "formData_Service": {
        "type": "string",
        "description": "Indicates the name of your Azure container registry."
      },
      "formData_Tenant": {
        "type": "string",
        "description": "AAD tenant associated to the AAD credentials."
      },
      "AccessToken": {
        "type": "object",
        "properties": {
          "access_token": {
            "type": "string",
            "description": "The access token for performing authenticated requests"
          }
        }
      },
      "AcrErrorInfo": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code"
          },
          "detail": {
            "type": "object",
            "description": "Error details"
          },
          "message": {
            "type": "string",
            "description": "Error message"
          }
        },
        "description": "Error information"
      },
      "AcrErrors": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "description": "Array of detailed error",
            "items": {
              "$ref": "#/components/schemas/AcrErrorInfo"
            }
          }
        },
        "description": "Acr error response describing why the operation failed"
      },
      "AcrManifests": {
        "type": "object",
        "properties": {
          "imageName": {
            "type": "string",
            "description": "Image name"
          },
          "manifests": {
            "type": "array",
            "description": "List of manifests",
            "items": {
              "$ref": "#/components/schemas/ManifestAttributesBase"
            }
          },
          "registry": {
            "type": "string",
            "description": "Registry name"
          }
        },
        "description": "Manifest attributes",
        "example": {
          "imageName": "imageName",
          "manifests": [
            {
              "architecture": "architecture",
              "changeableAttributes": {
                "deleteEnabled": true,
                "listEnabled": true,
                "quarantineDetails": "quarantineDetails",
                "quarantineState": "quarantineState",
                "readEnabled": true,
                "writeEnabled": true
              },
              "configMediaType": "configMediaType",
              "createdTime": "createdTime",
              "digest": "digest",
              "imageSize": 2401606,
              "lastUpdateTime": "lastUpdateTime",
              "mediaType": "mediaType",
              "os": "os",
              "tags": [
                "tags",
                "tags"
              ]
            },
            {
              "architecture": "architecture",
              "changeableAttributes": {
                "deleteEnabled": true,
                "listEnabled": true,
                "quarantineDetails": "quarantineDetails",
                "quarantineState": "quarantineState",
                "readEnabled": true,
                "writeEnabled": true
              },
              "configMediaType": "configMediaType",
              "createdTime": "createdTime",
              "digest": "digest",
              "imageSize": 2401606,
              "lastUpdateTime": "lastUpdateTime",
              "mediaType": "mediaType",
              "os": "os",
              "tags": [
                "tags",
                "tags"
              ]
            }
          ],
          "registry": "registry"
        }
      },
      "Annotations": {
        "type": "object",
        "properties": {
          "org.opencontainers.image.authors": {
            "type": "string",
            "description": "Contact details of the people or organization responsible for the image."
          },
          "org.opencontainers.image.created": {
            "type": "string",
            "description": "Date and time on which the image was built (string, date-time as defined by https://tools.ietf.org/html/rfc3339#section-5.6)",
            "format": "date-time"
          },
          "org.opencontainers.image.description": {
            "type": "string",
            "description": "Human-readable description of the software packaged in the image"
          },
          "org.opencontainers.image.documentation": {
            "type": "string",
            "description": "URL to get documentation on the image."
          },
          "org.opencontainers.image.licenses": {
            "type": "string",
            "description": "License(s) under which contained software is distributed as an SPDX License Expression."
          },
          "org.opencontainers.image.ref.name": {
            "type": "string",
            "description": "Name of the reference for a target."
          },
          "org.opencontainers.image.revision": {
            "type": "string",
            "description": "Source control revision identifier for the packaged software."
          },
          "org.opencontainers.image.source": {
            "type": "string",
            "description": "URL to get source code for building the image."
          },
          "org.opencontainers.image.title": {
            "type": "string",
            "description": "Human-readable title of the image"
          },
          "org.opencontainers.image.url": {
            "type": "string",
            "description": "URL to find more information on the image."
          },
          "org.opencontainers.image.vendor": {
            "type": "string",
            "description": "Name of the distributing entity, organization or individual."
          },
          "org.opencontainers.image.version": {
            "type": "string",
            "description": "Version of the packaged software. The version MAY match a label or tag in the source code repository, may also be Semantic versioning-compatible"
          }
        },
        "additionalProperties": {
          "type": "object"
        },
        "description": "Additional information provided through arbitrary metadata.",
        "nullable": true
      },
      "ChangeableAttributes": {
        "type": "object",
        "properties": {
          "deleteEnabled": {
            "type": "boolean",
            "description": "Delete enabled"
          },
          "listEnabled": {
            "type": "boolean",
            "description": "List enabled"
          },
          "readEnabled": {
            "type": "boolean",
            "description": "Read enabled"
          },
          "writeEnabled": {
            "type": "boolean",
            "description": "Write enabled"
          }
        },
        "example": {
          "deleteEnabled": true,
          "listEnabled": true,
          "readEnabled": true,
          "writeEnabled": true
        }
      },
      "DeletedRepository": {
        "type": "object",
        "properties": {
          "manifestsDeleted": {
            "type": "array",
            "description": "SHA of the deleted image",
            "items": {
              "type": "string"
            }
          },
          "tagsDeleted": {
            "type": "array",
            "description": "Tag of the deleted image",
            "items": {
              "type": "string"
            }
          }
        },
        "description": "Deleted repository"
      },
      "Descriptor": {
        "type": "object",
        "properties": {
          "annotations": {
            "$ref": "#/components/schemas/Annotations"
          },
          "digest": {
            "type": "string",
            "description": "Layer digest"
          },
          "mediaType": {
            "type": "string",
            "description": "Layer media type"
          },
          "size": {
            "type": "integer",
            "description": "Layer size",
            "format": "int64"
          },
          "urls": {
            "type": "array",
            "description": "Specifies a list of URIs from which this object may be downloaded.",
            "items": {
              "type": "string",
              "description": "Must conform to RFC 3986. Entries should use the http and https schemes, as defined in RFC 7230."
            }
          }
        },
        "description": "Docker V2 image layer descriptor including config and layers",
        "example": {
          "digest": "sha256:5d20c808ce198565ff70b3ed23a991dd49afac45dece63474b27ce6ed036adc6",
          "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
          "size": 2107098
        }
      },
      "FsLayer": {
        "type": "object",
        "properties": {
          "blobSum": {
            "type": "string",
            "description": "SHA of an image layer"
          }
        },
        "description": "Image layer information",
        "example": {
          "blobSum": "sha256:1f7d468f830cb0ed4beb8edc9438f18096e8c682e56a35242f60e6c61b718b30"
        }
      },
      "History": {
        "type": "object",
        "properties": {
          "v1Compatibility": {
            "type": "string",
            "description": "The raw v1 compatibility information"
          }
        },
        "description": "A list of unstructured historical data for v1 compatibility",
        "example": {
          "v1Compatibility": "v1 compatibility info"
        }
      },
      "ImageSignature": {
        "type": "object",
        "properties": {
          "header": {
            "$ref": "#/components/schemas/JWK"
          },
          "protected": {
            "type": "string",
            "description": "The signed protected header"
          },
          "signature": {
            "type": "string",
            "description": "A signature for the image manifest, signed by a libtrust private key"
          }
        },
        "description": "Signature of a signed manifest",
        "example": {
          "header": {
            "alg": "ES256",
            "jwk": {
              "crv": "P-256",
              "kid": "WGXM:EYWQ:DA53:LQUP:BCWG:5RDG:S3ZM:ETH7:VMQS:WWKZ:EWDG:V74Q",
              "kty": "EC",
              "x": "OxZ9k5BVjPZ7jb3BmBD4X0d8MVPJqfF4NeSe8reoqnY",
              "y": "EaCqTe4-vYwhk7qU6Bs2-AeLGOVtCe_-IY2MdE0Vfyc"
            }
          },
          "protected": "eyJmb3JtYXRMZW5ndGgiOjI5ODYsImZvcm1hdFRhaWwiOiJDbjAiLCJ0aW1lIjoiMjAxOC0wOS0yMFQyMzo0MTo1MloifQ",
          "signature": "p73LfotMGD8nNXz2g9YX2XtSllb4GI5-b3vjqP5N0nkv8QXg-r5z_omGiVbOZE2BYG1X_4TIN23l1KSEqsXxOg"
        }
      },
      "JWK": {
        "type": "object",
        "properties": {
          "alg": {
            "type": "string",
            "description": "The algorithm used to sign or encrypt the JWT"
          },
          "jwk": {
            "$ref": "#/components/schemas/JWKHeader"
          }
        },
        "description": "A JSON web signature"
      },
      "JWKHeader": {
        "type": "object",
        "properties": {
          "crv": {
            "type": "string",
            "description": "crv value"
          },
          "kid": {
            "type": "string",
            "description": "kid value"
          },
          "kty": {
            "type": "string",
            "description": "kty value"
          },
          "x": {
            "type": "string",
            "description": "x value"
          },
          "y": {
            "type": "string",
            "description": "y value"
          }
        },
        "description": "JSON web key parameter"
      },
      "Manifest": {
        "type": "object",
        "properties": {
          "schemaVersion": {
            "type": "integer",
            "description": "Schema version"
          }
        },
        "description": "Returns the requested manifest file"
      },
      "ManifestAttributes": {
        "type": "object",
        "properties": {
          "imageName": {
            "type": "string",
            "description": "Image name"
          },
          "manifest": {
            "$ref": "#/components/schemas/ManifestAttributesBase"
          },
          "registry": {
            "type": "string",
            "description": "Registry name"
          }
        },
        "description": "Manifest attributes details",
        "example": {
          "imageName": "nanoserver",
          "manifest": {
            "architecture": "amd64",
            "changeableAttributes": {
              "deleteEnabled": true,
              "listEnabled": true,
              "readEnabled": true,
              "writeEnabled": true
            },
            "configMediaType": "application/vnd.docker.container.image.v1+json",
            "createdTime": "2018-09-06T06:17:20.9983915Z",
            "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086",
            "imageSize": 2401606,
            "lastUpdateTime": "2018-09-06T06:17:20.9983915Z",
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "os": "windows",
            "tags": [
              "4.7.2-20180905-nanoserver-1803"
            ]
          },
          "registry": "acrapi.azurecr-test.io"
        }
      },
      "ManifestAttributesBase": {
        "type": "object",
        "properties": {
          "architecture": {
            "type": "string",
            "description": "CPU architecture"
          },
          "changeableAttributes": {
            "$ref": "#/components/schemas/ChangeableAttributes"
          },
          "configMediaType": {
            "type": "string",
            "description": "Config blob media type"
          },
          "createdTime": {
            "type": "string",
            "description": "Created time"
          },
          "digest": {
            "type": "string",
            "description": "Manifest"
          },
          "imageSize": {
            "type": "integer",
            "description": "Image size",
            "format": "int64"
          },
          "lastUpdateTime": {
            "type": "string",
            "description": "Last update time"
          },
          "mediaType": {
            "type": "string",
            "description": "Media type"
          },
          "os": {
            "type": "string",
            "description": "Operating system"
          },
          "tags": {
            "type": "array",
            "description": "List of tags",
            "items": {
              "type": "string",
              "description": "Tag name"
            }
          }
        },
        "description": "Manifest details",
        "example": {
          "architecture": "architecture",
          "changeableAttributes": {
            "deleteEnabled": true,
            "listEnabled": true,
            "readEnabled": true,
            "writeEnabled": true
          },
          "configMediaType": "configMediaType",
          "createdTime": "createdTime",
          "digest": "digest",
          "imageSize": 2401606,
          "lastUpdateTime": "lastUpdateTime",
          "mediaType": "mediaType",
          "os": "os",
          "tags": [
            "tags",
            "tags"
          ]
        }
      },
      "ManifestAttributes_manifest": {
        "type": "object",
        "properties": {
          "quarantineTag": {
            "type": "string",
            "description": "Quarantine tag name"
          },
          "references": {
            "type": "array",
            "description": "List of manifest attributes details",
            "items": {
              "$ref": "#/components/schemas/ManifestAttributes_manifest_references"
            }
          }
        },
        "description": "List of manifest attributes",
        "example": {
          "quarantineTag": "quarantineTag",
          "references": [
            {
              "architecture": "architecture",
              "digest": "digest",
              "os": "os"
            },
            {
              "architecture": "architecture",
              "digest": "digest",
              "os": "os"
            }
          ]
        }
      },
      "ManifestAttributes_manifest_references": {
        "type": "object",
        "properties": {
          "architecture": {
            "type": "string",
            "description": "CPU architecture"
          },
          "digest": {
            "type": "string",
            "description": "Manifest digest"
          },
          "os": {
            "type": "string",
            "description": "Operating system"
          }
        },
        "description": "Manifest attributes details",
        "example": {
          "architecture": "architecture",
          "digest": "digest",
          "os": "os"
        }
      },
      "ManifestChangeableAttributes": {
        "type": "object",
        "properties": {
          "deleteEnabled": {
            "type": "boolean",
            "description": "Delete enabled"
          },
          "listEnabled": {
            "type": "boolean",
            "description": "List enabled"
          },
          "quarantineDetails": {
            "type": "string",
            "description": "Quarantine details"
          },
          "quarantineState": {
            "type": "string",
            "description": "Quarantine state"
          },
          "readEnabled": {
            "type": "boolean",
            "description": "Read enabled"
          },
          "writeEnabled": {
            "type": "boolean",
            "description": "Write enabled"
          }
        },
        "description": "Changeable attributes",
        "example": {
          "deleteEnabled": true,
          "listEnabled": true,
          "quarantineDetails": "quarantineDetails",
          "quarantineState": "quarantineState",
          "readEnabled": true,
          "writeEnabled": true
        }
      },
      "ManifestList": {
        "properties": {
          "manifests": {
            "type": "array",
            "description": "List of V2 image layer information",
            "items": {
              "$ref": "#/components/schemas/ManifestListAttributes"
            }
          },
          "mediaType": {
            "type": "string",
            "description": "Media type for this Manifest"
          }
        },
        "description": "Returns the requested Docker multi-arch-manifest file",
        "allOf": [
          {
            "$ref": "#/components/schemas/Manifest"
          }
        ]
      },
      "ManifestListAttributes": {
        "type": "object",
        "properties": {
          "digest": {
            "type": "string",
            "description": "The digest of the content, as defined by the Registry V2 HTTP API Specification"
          },
          "mediaType": {
            "type": "string",
            "description": "The MIME type of the referenced object. This will generally be application/vnd.docker.image.manifest.v2+json, but it could also be application/vnd.docker.image.manifest.v1+json"
          },
          "platform": {
            "$ref": "#/components/schemas/Platform"
          },
          "size": {
            "type": "integer",
            "description": "The size in bytes of the object",
            "format": "int64"
          }
        }
      },
      "ManifestWrapper": {
        "properties": {
          "annotations": {
            "$ref": "#/components/schemas/Annotations"
          },
          "architecture": {
            "type": "string",
            "description": "(V1) CPU architecture"
          },
          "config": {
            "$ref": "#/components/schemas/Descriptor"
          },
          "fsLayers": {
            "type": "array",
            "description": "(V1) List of layer information",
            "items": {
              "$ref": "#/components/schemas/FsLayer"
            }
          },
          "history": {
            "type": "array",
            "description": "(V1) Image history",
            "items": {
              "$ref": "#/components/schemas/History"
            }
          },
          "layers": {
            "type": "array",
            "description": "(V2, OCI) List of V2 image layer information",
            "items": {
              "$ref": "#/components/schemas/Descriptor"
            }
          },
          "manifests": {
            "type": "array",
            "description": "(ManifestList, OCIIndex) List of V2 image layer information",
            "items": {
              "$ref": "#/components/schemas/ManifestListAttributes"
            }
          },
          "mediaType": {
            "type": "string",
            "description": "Media type for this Manifest"
          },
          "name": {
            "type": "string",
            "description": "(V1) Image name"
          },
          "signatures": {
            "type": "array",
            "description": "(V1) Image signature",
            "items": {
              "$ref": "#/components/schemas/ImageSignature"
            }
          },
          "tag": {
            "type": "string",
            "description": "(V1) Image tag"
          }
        },
        "description": "Returns the requested manifest file",
        "allOf": [
          {
            "$ref": "#/components/schemas/Manifest"
          }
        ]
      },
      "OCIIndex": {
        "properties": {
          "annotations": {
            "$ref": "#/components/schemas/Annotations"
          },
          "manifests": {
            "type": "array",
            "description": "List of OCI image layer information",
            "items": {
              "$ref": "#/components/schemas/ManifestListAttributes"
            }
          }
        },
        "description": "Returns the requested OCI index file",
        "allOf": [
          {
            "$ref": "#/components/schemas/Manifest"
          }
        ]
      },
      "OCIManifest": {
        "properties": {
          "annotations": {
            "$ref": "#/components/schemas/Annotations"
          },
          "config": {
            "$ref": "#/components/schemas/Descriptor"
          },
          "layers": {
            "type": "array",
            "description": "List of V2 image layer information",
            "items": {
              "$ref": "#/components/schemas/Descriptor"
            }
          }
        },
        "description": "Returns the requested OCI Manifest file",
        "allOf": [
          {
            "$ref": "#/components/schemas/Manifest"
          }
        ]
      },
      "Platform": {
        "type": "object",
        "properties": {
          "architecture": {
            "type": "string",
            "description": "Specifies the CPU architecture, for example amd64 or ppc64le."
          },
          "features": {
            "type": "array",
            "description": "The optional features field specifies an array of strings, each listing a required CPU feature (for example sse4 or aes",
            "items": {
              "type": "string"
            }
          },
          "os": {
            "type": "string",
            "description": "The os field specifies the operating system, for example linux or windows."
          },
          "os.features": {
            "type": "array",
            "description": "The optional os.features field specifies an array of strings, each listing a required OS feature (for example on Windows win32k",
            "items": {
              "type": "string"
            }
          },
          "os.version": {
            "type": "string",
            "description": "The optional os.version field specifies the operating system version, for example 10.0.10586."
          },
          "variant": {
            "type": "string",
            "description": "The optional variant field specifies a variant of the CPU, for example armv6l to specify a particular CPU variant of the ARM CPU."
          }
        },
        "description": "The platform object describes the platform which the image in the manifest runs on. A full list of valid operating system and architecture values are listed in the Go language documentation for $GOOS and $GOARCH"
      },
      "RefreshToken": {
        "type": "object",
        "properties": {
          "refresh_token": {
            "type": "string",
            "description": "The refresh token to be used for generating access tokens"
          }
        }
      },
      "Repositories": {
        "type": "object",
        "properties": {
          "repositories": {
            "type": "array",
            "description": "Repository names",
            "items": {
              "type": "string"
            }
          }
        },
        "description": "List of repositories",
        "example": {
          "repositories": [
            "production/alpine",
            "testing/alpine"
          ]
        }
      },
      "RepositoryAttributes": {
        "type": "object",
        "properties": {
          "changeableAttributes": {
            "$ref": "#/components/schemas/ChangeableAttributes"
          },
          "createdTime": {
            "type": "string",
            "description": "Image created time"
          },
          "imageName": {
            "type": "string",
            "description": "Image name"
          },
          "lastUpdateTime": {
            "type": "string",
            "description": "Image last update time"
          },
          "manifestCount": {
            "type": "integer",
            "description": "Number of the manifests"
          },
          "registry": {
            "type": "string",
            "description": "Registry name"
          },
          "tagCount": {
            "type": "integer",
            "description": "Number of the tags"
          }
        },
        "description": "Repository attributes",
        "example": {
          "changeableAttributes": {
            "deleteEnabled": true,
            "listEnabled": true,
            "readEnabled": true,
            "writeEnabled": true
          },
          "createdTime": "2018-09-07T16:30:46.6583219Z",
          "imageName": "imageName",
          "lastUpdateTime": "2018-09-07T16:30:46.6583219Z",
          "manifestCount": 2,
          "registry": "registryname.azurecr.io",
          "tagCount": 6
        }
      },
      "RepositoryTags": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the image"
          },
          "tags": {
            "type": "array",
            "description": "List of tags",
            "items": {
              "type": "string",
              "description": "Tag name"
            }
          }
        },
        "description": "Result of the request to list tags of the image",
        "example": {
          "name": "name",
          "tags": [
            "tags",
            "tags"
          ]
        }
      },
      "TagAttributes": {
        "type": "object",
        "properties": {
          "imageName": {
            "type": "string",
            "description": "Image name"
          },
          "registry": {
            "type": "string",
            "description": "Registry name"
          },
          "tag": {
            "$ref": "#/components/schemas/TagAttributesBase"
          }
        },
        "description": "Tag attributes",
        "example": {
          "imageName": "imageName",
          "registry": "registry",
          "tag": {
            "changeableAttributes": {
              "deleteEnabled": true,
              "listEnabled": true,
              "readEnabled": true,
              "writeEnabled": true
            },
            "createdTime": "createdTime",
            "digest": "digest",
            "lastUpdateTime": "lastUpdateTime",
            "name": "name",
            "signed": true
          }
        }
      },
      "TagAttributesBase": {
        "type": "object",
        "properties": {
          "changeableAttributes": {
            "$ref": "#/components/schemas/ChangeableAttributes"
          },
          "createdTime": {
            "type": "string",
            "description": "Tag created time"
          },
          "digest": {
            "type": "string",
            "description": "Tag digest"
          },
          "lastUpdateTime": {
            "type": "string",
            "description": "Tag last update time"
          },
          "name": {
            "type": "string",
            "description": "Tag name"
          },
          "signed": {
            "type": "boolean",
            "description": "Is signed"
          }
        },
        "description": "Tag attribute details",
        "example": {
          "changeableAttributes": {
            "deleteEnabled": true,
            "listEnabled": true,
            "readEnabled": true,
            "writeEnabled": true
          },
          "createdTime": "2018-08-10T17:28:44.1082945Z",
          "digest": "sha256:0873c923e00e0fd2ba78041bfb64a105e1ecb7678916d1f7776311e45bf5634b",
          "lastUpdateTime": "2018-08-10T17:28:44.1082945Z",
          "name": "tagname",
          "signed": true
        }
      },
      "TagAttributes_tag": {
        "type": "object",
        "properties": {
          "signatureRecord": {
            "type": "string",
            "description": "SignatureRecord value"
          }
        },
        "description": "Tag",
        "example": {
          "signatureRecord": "signatureRecord"
        }
      },
      "TagList": {
        "type": "object",
        "properties": {
          "imageName": {
            "type": "string",
            "description": "Image name"
          },
          "registry": {
            "type": "string",
            "description": "Registry name"
          },
          "tags": {
            "type": "array",
            "description": "List of tag attribute details",
            "items": {
              "$ref": "#/components/schemas/TagAttributesBase"
            }
          }
        },
        "description": "List of tag details",
        "example": {
          "imageName": "imageName",
          "registry": "registry",
          "tags": [
            {
              "changeableAttributes": {
                "deleteEnabled": true,
                "listEnabled": true,
                "readEnabled": true,
                "writeEnabled": true
              },
              "createdTime": "createdTime",
              "digest": "digest",
              "lastUpdateTime": "lastUpdateTime",
              "name": "name",
              "signed": true
            },
            {
              "changeableAttributes": {
                "deleteEnabled": true,
                "listEnabled": true,
                "readEnabled": true,
                "writeEnabled": true
              },
              "createdTime": "createdTime",
              "digest": "digest",
              "lastUpdateTime": "lastUpdateTime",
              "name": "name",
              "signed": true
            }
          ]
        }
      },
      "V1Manifest": {
        "properties": {
          "architecture": {
            "type": "string",
            "description": "CPU architecture"
          },
          "fsLayers": {
            "type": "array",
            "description": "List of layer information",
            "items": {
              "$ref": "#/components/schemas/FsLayer"
            }
          },
          "history": {
            "type": "array",
            "description": "Image history",
            "items": {
              "$ref": "#/components/schemas/History"
            }
          },
          "name": {
            "type": "string",
            "description": "Image name"
          },
          "signatures": {
            "type": "array",
            "description": "Image signature",
            "items": {
              "$ref": "#/components/schemas/ImageSignature"
            }
          },
          "tag": {
            "type": "string",
            "description": "Image tag"
          }
        },
        "description": "Returns the requested V1 manifest file",
        "allOf": [
          {
            "$ref": "#/components/schemas/Manifest"
          }
        ]
      },
      "V2Manifest": {
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Descriptor"
          },
          "layers": {
            "type": "array",
            "description": "List of V2 image layer information",
            "items": {
              "$ref": "#/components/schemas/Descriptor"
            }
          },
          "mediaType": {
            "type": "string",
            "description": "Media type for this Manifest"
          }
        },
        "description": "Returns the requested Docker V2 Manifest file",
        "allOf": [
          {
            "$ref": "#/components/schemas/Manifest"
          }
        ]
      }
    },
    "parameters": {
      "BlobQueryDigest": {
        "name": "digest",
        "in": "query",
        "description": "Digest of a BLOB",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Content-Range": {
        "name": "Content-Range",
        "in": "header",
        "description": "Range of bytes identifying the desired block of content represented by the body. Start must the end offset retrieved via status check plus one. Note that this is a non-standard use of the `Content-Range` header.",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Digest": {
        "name": "digest",
        "in": "path",
        "description": "Digest of a BLOB",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "From": {
        "name": "from",
        "in": "query",
        "description": "Name of the source repository.",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "ImageName": {
        "name": "name",
        "in": "path",
        "description": "Name of the image (including the namespace)",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "ImageReference": {
        "name": "reference",
        "in": "path",
        "description": "A tag or a digest, pointing to a specific image",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "ManifestReference": {
        "name": "reference",
        "in": "path",
        "description": "Tag or digest of the target manifest",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Mount": {
        "name": "mount",
        "in": "query",
        "description": "Digest of blob to mount from the source repository.",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "NextLink": {
        "name": "nextBlobUuidLink",
        "in": "path",
        "description": "Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) )",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "NoUploadCache": {
        "name": "_nouploadcache",
        "in": "query",
        "description": "Acquired from NextLink",
        "schema": {
          "type": "boolean"
        }
      },
      "QueryDigest": {
        "name": "digest",
        "in": "query",
        "description": "filter by digest",
        "schema": {
          "type": "string"
        }
      },
      "QueryLast": {
        "name": "last",
        "in": "query",
        "description": "Query parameter for the last item in previous query. Result set will include values lexically after last.",
        "schema": {
          "type": "string"
        }
      },
      "QueryNum": {
        "name": "n",
        "in": "query",
        "description": "query parameter for max number of items",
        "schema": {
          "type": "integer"
        }
      },
      "QueryOrderBy": {
        "name": "orderby",
        "in": "query",
        "description": "orderby query parameter",
        "schema": {
          "type": "string"
        }
      },
      "Range": {
        "name": "Range",
        "in": "header",
        "description": "Format : bytes=<start>-<end>,  HTTP Range header specifying blob chunk.",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "State": {
        "name": "_state",
        "in": "query",
        "description": "Acquired from NextLink",
        "schema": {
          "type": "string"
        }
      },
      "TagReference": {
        "name": "reference",
        "in": "path",
        "description": "Tag name",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Url": {
        "name": "url",
        "in": "path",
        "description": "Registry login URL",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Uuid": {
        "name": "uuid",
        "in": "path",
        "description": "A uuid identifying the upload.",
        "required": true,
        "schema": {
          "type": "string"
        }
      }
    },
    "requestBodies": {
      "ManifestBody": {
        "description": "Manifest body, can take v1 or v2 values depending on accept header",
        "content": {
          "*/*": {
            "schema": {
              "$ref": "#/components/schemas/Manifest"
            }
          }
        },
        "required": true
      },
      "RawData": {
        "description": "Raw data of blob",
        "content": {
          "*/*": {
            "schema": {
              "type": "object",
              "format": "file"
            }
          }
        },
        "required": true
      },
      "RawDataOptional": {
        "description": "Optional raw data of blob",
        "content": {
          "*/*": {
            "schema": {
              "type": "object",
              "format": "file"
            }
          }
        },
        "required": false
      },
      "RepoValue": {
        "description": "Repository attribute value",
        "content": {
          "*/*": {
            "schema": {
              "$ref": "#/components/schemas/ChangeableAttributes"
            }
          }
        },
        "required": false
      }
    },
    "securitySchemes": {
      "registry_auth": {
        "type": "http",
        "scheme": "basic"
      },
      "registry_oauth2": {
        "type": "apiKey",
        "name": "Authorization",
        "in": "header"
      }
    }
  }
}