Red Hat Quay API reference


Red Hat Quay 3

Red Hat Quay API reference

Red Hat OpenShift Documentation Team

Abstract

Red Hat Quay API reference

Preface

The Red Hat Quay application programming interface (API) provides a comprehensive, RESTful interface for managing and automating tasks within Red Hat Quay. Designed around the OAuth 2.0 protocol, this API enables secure, fine-grained access to Red Hat Quay resources, and allows administrators and users to perform such actions as creating repositories, managing images, setting permissions, and more.

Red Hat Quay follows Semantic Versioning (SemVer) principles, ensuring predictable API stability across releases, such as:

  • Major releases: Introduce new capabilities. Might include breaking changes to API compatibility. For example, the API of Red Hat Quay 2.0 differs from Red Hat Quay 3.0.
  • Minor releases: Add new functionality in a backward-compatible manner. For example, a 3.y release adds functionality to the version 3. release.
  • Patch releases: Deliver bug fixes and improvements while preserving backward compatibility with minor releases, such as 3.y.z.

The following guide describes the Red Hat Quay API in more detail, and provides details on the following topics:

  • API endpoint structure, including supported HTTP methods
  • Request and response schemas for each endpoint
  • Required and optional parameters
  • Authentication and authorization requirements
  • Common error codes and troubleshooting information

For a more guided approach, including token overview, management strategies, understanding API endpoints, and more, refer to the Red Hat Quay API guide.

Chapter 1. Authorization

oauth2_implicit

Scopes

The following scopes are used to control access to the API endpoints:

Expand
ScopeDescription

repo:read

This application will be able to view and pull all repositories visible to the granting user or robot account

repo:write

This application will be able to view, push and pull to all repositories to which the granting user or robot account has write access

repo:admin

This application will have administrator access to all repositories to which the granting user or robot account has access

repo:create

This application will be able to create repositories in to any namespaces that the granting user or robot account is allowed to create repositories

user:read

This application will be able to read user information such as username and email address.

org:admin

This application will be able to administer your organizations including creating robots, creating teams, adjusting team membership, and changing billing settings. You should have absolute trust in the requesting application before granting this permission.

super:user

This application will be able to administer your installation including managing users, managing organizations and other features found in the superuser panel. You should have absolute trust in the requesting application before granting this permission.

user:admin

This application will be able to administer your account including creating robots and granting them permissions to your repositories. You should have absolute trust in the requesting application before granting this permission.

Chapter 2. appspecifictokens

Manages app specific tokens for the current user.

2.1. createAppToken

Create a new app specific token for user.

POST /api/v1/user/apptoken

Authorizations: oauth2_implicit (user:admin)

Request body schema (application/json)

Description of a new token.

Expand
NameDescriptionSchema

title
required

Friendly name to help identify the token

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
 $ curl -X POST \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "MyAppToken"
  }' \
  "http://quay-server.example.com/api/v1/user/apptoken"

2.2. listAppTokens

Lists the app specific tokens for the user.

GET /api/v1/user/apptoken

Authorizations: oauth2_implicit (user:admin)

Query parameters
Expand
TypeNameDescriptionSchema

query

expiring
optional

If true, only returns those tokens expiring soon

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <access_token>" \
  "http://quay-server.example.com/api/v1/user/apptoken"

2.3. getAppToken

Returns a specific app token for the user.

GET /api/v1/user/apptoken/{token_uuid}

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

token_uuid
required

The uuid of the app specific token

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <access_token>" \
  "http://quay-server.example.com/api/v1/user/apptoken/<token_uuid>"

2.4. revokeAppToken

Revokes a specific app token for the user.

DELETE /api/v1/user/apptoken/{token_uuid}

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

token_uuid
required

The uuid of the app specific token

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE \
  -H "Authorization: Bearer <access_token>" \
  "http://quay-server.example.com/api/v1/user/apptoken/<token_uuid>"

Chapter 3. build

Create, list, cancel and get status/logs of repository builds.

3.1. getRepoBuildStatus

Return the status for the builds specified by the build uuids.

GET /api/v1/repository/{repository}/build/{build_uuid}/status

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

build_uuid
required

The UUID of the build

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

3.2. getRepoBuildLogs

Return the build logs for the build specified by the build uuid.

GET /api/v1/repository/{repository}/build/{build_uuid}/logs

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

build_uuid
required

The UUID of the build

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

3.3. getRepoBuild

Returns information about a build.

GET /api/v1/repository/{repository}/build/{build_uuid}

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

build_uuid
required

The UUID of the build

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

3.4. cancelRepoBuild

Cancels a repository build.

DELETE /api/v1/repository/{repository}/build/{build_uuid}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

build_uuid
required

The UUID of the build

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

3.5. requestRepoBuild

Request that a repository be built and pushed from the specified input.

POST /api/v1/repository/{repository}/build/

Authorizations: oauth2_implicit (repo:write)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

Description of a new repository build.

Expand
NameDescriptionSchema

file_id
optional

The file id that was generated when the build spec was uploaded

string

archive_url
optional

The URL of the .tar.gz to build. Must start with "http" or "https".

string

subdirectory
optional

Subdirectory in which the Dockerfile can be found. You can only specify this or dockerfile_path

string

dockerfile_path
optional

Path to a dockerfile. You can only specify this or subdirectory.

string

context
optional

Pass in the context for the dockerfile. This is optional.

string

pull_robot
optional

Username of a Quay robot account to use as pull credentials

string

tags
optional

The tags to which the built images will be pushed. If none specified, "latest" is used.

array of string
non-empty unique

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

3.6. getRepoBuilds

Get the list of repository builds.

GET /api/v1/repository/{repository}/build/

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Query parameters
Expand
TypeNameDescriptionSchema

query

since
optional

Returns all builds since the given unix timecode

integer

query

limit
optional

The maximum number of builds to return

integer

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Chapter 4. discovery

API discovery information.

4.1. discovery

List all of the API endpoints available in the swagger API format.

GET /api/v1/discovery

Authorizations: 

Query parameters
Expand
TypeNameDescriptionSchema

query

internal
optional

Whether to include internal APIs.

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/discovery?query=true" \
    -H "Authorization: Bearer <access_token>"

Chapter 5. error

Error details API.

5.1. getErrorDescription

Get a detailed description of the error.

GET /api/v1/error/{error_type}

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

error_type
required

The error code identifying the type of error.

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

ApiErrorDescription

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/error/<error_type>" \
    -H "Authorization: Bearer <access_token>"

Chapter 6. globalmessages

Messages API.

6.1. createGlobalMessage

Create a message.

POST /api/v1/messages

Authorizations: oauth2_implicit (super:user)

Request body schema (application/json)

Create a new message

Expand
NameDescriptionSchema

message
required

A single message

object

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/messages" \
    -H "Authorization: Bearer <access_token>" \
    -H "Content-Type: application/json" \
    -d '{
        "message": {
            "content": "Hi",
            "media_type": "text/plain",
            "severity": "info"
        }
    }'

6.2. getGlobalMessages

Return a super users messages.

GET /api/v1/messages

Authorizations: 

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/messages" \
    -H "Authorization: Bearer <access_token>"

6.3. deleteGlobalMessage

Delete a message.

DELETE /api/v1/message/{uuid}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

uuid
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://<quay-server.example.com>/api/v1/message/<uuid>" \
    -H "Authorization: Bearer <access_token>"

Chapter 7. logs

Access usage logs for organizations or repositories.

7.1. getAggregateUserLogs

Returns the aggregated logs for the current user.

GET /api/v1/user/aggregatelogs

Authorizations: oauth2_implicit (user:admin)

Query parameters
Expand
TypeNameDescriptionSchema

query

performer
optional

Username for which to filter logs.

string

query

endtime
optional

Latest time for logs. Format: "%m/%d/%Y" in UTC.

string

query

starttime
optional

Earliest time for logs. Format: "%m/%d/%Y" in UTC.

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  "<quay-server.example.com>/api/v1/user/aggregatelogs?performer=<username>&starttime=<MM/DD/YYYY>&endtime=<MM/DD/YYYY>"

7.2. exportUserLogs

Returns the aggregated logs for the current user.

POST /api/v1/user/exportlogs

Authorizations: oauth2_implicit (user:admin)

Query parameters
Expand
TypeNameDescriptionSchema

query

endtime
optional

Latest time for logs. Format: "%m/%d/%Y" in UTC.

string

query

starttime
optional

Earliest time for logs. Format: "%m/%d/%Y" in UTC.

string

Request body schema (application/json)

Configuration for an export logs operation

Expand
NameDescriptionSchema

callback_url
optional

The callback URL to invoke with a link to the exported logs

string

callback_email
optional

The e-mail address at which to e-mail a link to the exported logs

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "starttime": "<MM/DD/YYYY>",
        "endtime": "<MM/DD/YYYY>",
        "callback_email": "your.email@example.com"
      }' \
  "http://<quay-server.example.com>/api/v1/user/exportlogs"

7.3. listUserLogs

List the logs for the current user.

GET /api/v1/user/logs

Authorizations: oauth2_implicit (user:admin)

Query parameters
Expand
TypeNameDescriptionSchema

query

next_page
optional

The page token for the next page

string

query

performer
optional

Username for which to filter logs.

string

query

endtime
optional

Latest time for logs. Format: "%m/%d/%Y" in UTC.

string

query

starttime
optional

Earliest time for logs. Format: "%m/%d/%Y" in UTC.

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET   -H "Authorization: Bearer <bearer_token>"   -H "Accept: application/json"   "<quay-server.example.com>/api/v1/user/logs"

7.4. getAggregateOrgLogs

Gets the aggregated logs for the specified organization.

GET /api/v1/organization/{orgname}/aggregatelogs

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Query parameters
Expand
TypeNameDescriptionSchema

query

performer
optional

Username for which to filter logs.

string

query

endtime
optional

Latest time for logs. Format: "%m/%d/%Y" in UTC.

string

query

starttime
optional

Earliest time for logs. Format: "%m/%d/%Y" in UTC.

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  "<quay-server.example.com>/api/v1/organization/{orgname}/aggregatelogs"

7.5. exportOrgLogs

Exports the logs for the specified organization.

POST /api/v1/organization/{orgname}/exportlogs

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Query parameters
Expand
TypeNameDescriptionSchema

query

endtime
optional

Latest time for logs. Format: "%m/%d/%Y" in UTC.

string

query

starttime
optional

Earliest time for logs. Format: "%m/%d/%Y" in UTC.

string

Request body schema (application/json)

Configuration for an export logs operation

Expand
NameDescriptionSchema

callback_url
optional

The callback URL to invoke with a link to the exported logs

string

callback_email
optional

The e-mail address at which to e-mail a link to the exported logs

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "starttime": "<MM/DD/YYYY>",
        "endtime": "<MM/DD/YYYY>",
        "callback_email": "org.logs@example.com"
      }' \
  "http://<quay-server.example.com>/api/v1/organization/{orgname}/exportlogs"

7.6. listOrgLogs

List the logs for the specified organization.

GET /api/v1/organization/{orgname}/logs

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Query parameters
Expand
TypeNameDescriptionSchema

query

next_page
optional

The page token for the next page

string

query

performer
optional

Username for which to filter logs.

string

query

endtime
optional

Latest time for logs. Format: "%m/%d/%Y" in UTC.

string

query

starttime
optional

Earliest time for logs. Format: "%m/%d/%Y" in UTC.

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  "http://<quay-server.example.com>/api/v1/organization/{orgname}/logs"

7.7. getAggregateRepoLogs

Returns the aggregated logs for the specified repository.

GET /api/v1/repository/{repository}/aggregatelogs

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Query parameters
Expand
TypeNameDescriptionSchema

query

endtime
optional

Latest time for logs. Format: "%m/%d/%Y" in UTC.

string

query

starttime
optional

Earliest time for logs. Format: "%m/%d/%Y" in UTC.

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  "<quay-server.example.com>/api/v1/repository/<repository_name>/<namespace>/aggregatelogs?starttime=2024-01-01&endtime=2024-06-18""

7.8. exportRepoLogs

Queues an export of the logs for the specified repository.

POST /api/v1/repository/{repository}/exportlogs

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Query parameters
Expand
TypeNameDescriptionSchema

query

endtime
optional

Latest time for logs. Format: "%m/%d/%Y" in UTC.

string

query

starttime
optional

Earliest time for logs. Format: "%m/%d/%Y" in UTC.

string

Request body schema (application/json)

Configuration for an export logs operation

Expand
NameDescriptionSchema

callback_url
optional

The callback URL to invoke with a link to the exported logs

string

callback_email
optional

The e-mail address at which to e-mail a link to the exported logs

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "starttime": "2024-01-01",
        "endtime": "2024-06-18",
        "callback_url": "http://your-callback-url.example.com"
      }' \
  "http://<quay-server.example.com>/api/v1/repository/{repository}/exportlogs"

7.9. listRepoLogs

List the logs for the specified repository.

GET /api/v1/repository/{repository}/logs

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Query parameters
Expand
TypeNameDescriptionSchema

query

next_page
optional

The page token for the next page

string

query

endtime
optional

Latest time for logs. Format: "%m/%d/%Y" in UTC.

string

query

starttime
optional

Earliest time for logs. Format: "%m/%d/%Y" in UTC.

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  "http://<quay-server.example.com>/api/v1/repository/{repository}/logs"

Chapter 8. manifest

Manage the manifests of a repository.

8.1. getManifestLabel

Retrieves the label with the specific ID under the manifest.

GET /api/v1/repository/{repository}/manifest/{manifestref}/labels/{labelid}

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

manifestref
required

The digest of the manifest

string

path

labelid
required

The ID of the label

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>/labels/<label_id>

8.2. deleteManifestLabel

Deletes an existing label from a manifest.

DELETE /api/v1/repository/{repository}/manifest/{manifestref}/labels/{labelid}

Authorizations: oauth2_implicit (repo:write)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

manifestref
required

The digest of the manifest

string

path

labelid
required

The ID of the label

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE \
  -H "Authorization: Bearer <bearer_token>" \
  https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>/labels/<labelid>

8.3. addManifestLabel

Adds a new label into the tag manifest.

POST /api/v1/repository/{repository}/manifest/{manifestref}/labels

Authorizations: oauth2_implicit (repo:write)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

manifestref
required

The digest of the manifest

string

Request body schema (application/json)

Adds a label to a manifest

Expand
NameDescriptionSchema

key
required

The key for the label

string

value
required

The value for the label

string

media_type
required

The media type for this label

 
Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  --data '{
    "key": "<key>",
    "value": "<value>",
    "media_type": "<media_type>"
  }' \
  https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>/labels

8.4. listManifestLabels

GET /api/v1/repository/{repository}/manifest/{manifestref}/labels

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

manifestref
required

The digest of the manifest

string

Query parameters
Expand
TypeNameDescriptionSchema

query

filter
optional

If specified, only labels matching the given prefix will be returned

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>/labels

8.5. getRepoManifest

GET /api/v1/repository/{repository}/manifest/{manifestref}

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

manifestref
required

The digest of the manifest

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>

Chapter 9. mirror

9.1. syncCancel

Update the sync_status for a given Repository’s mirroring configuration.

POST /api/v1/repository/{repository}/mirror/sync-cancel

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror/sync-cancel" \

9.2. syncNow

Update the sync_status for a given Repository’s mirroring configuration.

POST /api/v1/repository/{repository}/mirror/sync-now

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror/sync-now" \
     -H "Authorization: Bearer <access_token>"

9.3. getRepoMirrorConfig

Return the Mirror configuration for a given Repository.

GET /api/v1/repository/{repository}/mirror

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

ViewMirrorConfig

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \
     -H "Authorization: Bearer <access_token>"

9.4. changeRepoMirrorConfig

Allow users to modifying the repository’s mirroring configuration.

PUT /api/v1/repository/{repository}/mirror

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

Update the repository mirroring configuration.

Expand
NameDescriptionSchema

is_enabled
optional

Used to enable or disable synchronizations.

boolean

external_reference
optional

Location of the external repository.

string

external_registry_username
optional

Username used to authenticate with external registry.

 

external_registry_password
optional

Password used to authenticate with external registry.

 

sync_start_date
optional

Determines the next time this repository is ready for synchronization.

string

sync_interval
optional

Number of seconds after next_start_date to begin synchronizing.

integer

robot_username
optional

Username of robot which will be used for image pushes.

string

root_rule
optional

A list of glob-patterns used to determine which tags should be synchronized.

object

external_registry_config
optional

 

object

skopeo_timeout_interval
required

Number of seconds mirroring job will run before timing out.

Integer

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \
    -H "Authorization: Bearer <access_token>" \
    -H "Content-Type: application/json" \
    -d '{
        "is_enabled": <false>, 
1

        "external_reference": "<external_reference>",
        "external_registry_username": "<external_registry_username>",
        "external_registry_password": "<external_registry_password>",
        "sync_start_date": "<sync_start_date>",
        "sync_interval": <sync_interval>,
        "robot_username": "<robot_username>",
        "skopeo_timeout_interval": 600,
        "root_rule": {
            "rule": "<rule>",
            "rule_type": "<rule_type>"
        }
    }'
1
Disables automatic synchronization.

9.5. createRepoMirrorConfig

Create a RepoMirrorConfig for a given Repository.

POST /api/v1/repository/{repository}/mirror

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

Create the repository mirroring configuration.

Expand
NameDescriptionSchema

is_enabled
optional

Used to enable or disable synchronizations.

boolean

external_reference
required

Location of the external repository.

string

external_registry_username
optional

Username used to authenticate with external registry.

 

external_registry_password
optional

Password used to authenticate with external registry.

 

sync_start_date
required

Determines the next time this repository is ready for synchronization.

string

sync_interval
required

Number of seconds after next_start_date to begin synchronizing.

integer

robot_username
required

Username of robot which will be used for image pushes.

string

root_rule
required

A list of glob-patterns used to determine which tags should be synchronized.

object

external_registry_config
optional

 

object

skopeo_timeout_interval
required

Number of seconds mirroring job will run before timing out.

Integer

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \
    -H "Authorization: Bearer <access_token>" \
    -H "Content-Type: application/json" \
    -d '{
        "is_enabled": <is_enabled>,
        "external_reference": "<external_reference>",
        "external_registry_username": "<external_registry_username>",
        "external_registry_password": "<external_registry_password>",
        "sync_start_date": "<sync_start_date>",
        "sync_interval": <sync_interval>,
        "robot_username": "<robot_username>",
        "skopeo_timeout_interval": 600,
        "root_rule": {
            "rule": "<rule>",
            "rule_type": "<rule_type>"
        }
    }'

Chapter 10. org_mirror

Organization-level repository mirroring API endpoints.

Enables users to configure a single mirroring task to replicate all repositories from a source namespace (e.g., Harbor project, Quay organization) into a target Quay organization.

10.1. createOrgMirrorConfig

Create organization mirror configuration.

POST /api/v1/organization/{orgname}/mirror

Authorizations: oauth2_implicit (org:admin)

Request body schema (application/json)

Create organization mirror configuration

Expand
NameDescriptionSchema

external_registry_type
required

Type of source registry (e.g. quay, harbor)

string

external_registry_url
required

URL of the source registry

string

external_namespace
required

Source namespace/project name

string

robot_username
required

Robot account for creating repos (format: orgname+robotname)

string

visibility
required

Visibility for created repositories (public or private)

string

sync_interval
required

Seconds between syncs (minimum 60)

integer

sync_start_date
required

Initial sync time (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)

string

is_enabled
optional

Enable or disable mirroring

boolean

external_registry_username
optional

Username for source registry authentication

 

external_registry_password
optional

Password for source registry authentication

 

external_registry_config
optional

TLS and proxy settings

object

repository_filters
optional

Glob patterns for filtering repositories

array of string

skopeo_timeout
optional

Timeout for Skopeo operations in seconds

integer

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"external_registry_type": "quay", "external_registry_url": "https://quay.example.com", "external_namespace": "<source_namespace>", "robot_username": "<orgname>+<robotname>", "visibility": "private", "sync_interval": 3600, "sync_start_date": "2025-01-01T00:00:00Z", "is_enabled": true}' \
  https://<quay-server.example.com>/api/v1/organization/<orgname>/mirror

10.2. getOrgMirrorConfig

Get the organization-level mirror configuration.

GET /api/v1/organization/{orgname}/mirror

Authorizations: oauth2_implicit (org:admin)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/organization/<orgname>/mirror

10.3. listOrgMirrorRepositories

List all discovered repositories from source namespace.

Query Parameters:
    page (int): Page number, default 1
    limit (int): Items per page, default 100, max 500
Returns:
    JSON object with:
        - repositories: List of repository objects
        - page: Current page number
        - limit: Items per page
        - total: Total number of matching repositories
        - has_next: Whether there are more pages
GET /api/v1/organization/{orgname}/mirror/repositories

Authorizations: oauth2_implicit (org:admin)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  "https://<quay-server.example.com>/api/v1/organization/<orgname>/mirror/repositories?page=1&limit=100"

10.4. syncOrgMirrorNow

Trigger immediate discovery and sync for the organization.

Sets sync_status to SYNC_NOW and sync_start_date to now for
immediate pickup by the repomirrorworker.
Returns 204 on success, 404 if config not found or already syncing.
POST /api/v1/organization/{orgname}/mirror/sync-now

Authorizations: oauth2_implicit (org:admin)

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/organization/<orgname>/mirror/sync-now

10.5. updateOrgMirrorConfig

Update organization mirror configuration.

PUT /api/v1/organization/{orgname}/mirror

Authorizations: oauth2_implicit (org:admin)

Request body schema (application/json)

Update organization mirror configuration

Expand
NameDescriptionSchema

is_enabled
optional

 

boolean

external_registry_url
optional

 

string

external_namespace
optional

 

string

robot_username
optional

 

string

visibility
optional

 

string

sync_interval
optional

 

integer

sync_start_date
optional

 

string

external_registry_username
optional

  

external_registry_password
optional

  

external_registry_config
optional

 

object

repository_filters
optional

 

array of string

skopeo_timeout
optional

 

integer

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"is_enabled": true, "sync_interval": 7200}' \
  https://<quay-server.example.com>/api/v1/organization/<orgname>/mirror

10.6. verifyOrgMirrorConnection

Verify connection to source registry.

Tests connectivity, authentication, and TLS configuration without
triggering a full sync operation. Useful for validating configuration
before enabling mirroring.
Returns:
    JSON object with:
        - success: Boolean indicating if connection was successful
        - message: Human-readable status message
POST /api/v1/organization/{orgname}/mirror/verify

Authorizations: oauth2_implicit (org:admin)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/organization/<orgname>/mirror/verify

10.7. cancelOrgMirrorSync

Cancel ongoing discovery or sync operation.

Transitions the config to CANCEL status from any state except already CANCEL.
The worker detects the CANCEL status and propagates it to associated repository
syncs during tag processing. Repo status changes are applied when the worker
picks up the cancellation request, not immediately.
Returns 204 on success, 404 if config not found, 400 if already cancelled.
POST /api/v1/organization/{orgname}/mirror/sync-cancel

Authorizations: oauth2_implicit (org:admin)

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/organization/<orgname>/mirror/sync-cancel

10.8. deleteOrgMirrorConfig

Delete organization mirror configuration.

DELETE /api/v1/organization/{orgname}/mirror

Authorizations: oauth2_implicit (org:admin)

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/organization/<orgname>/mirror

Chapter 11. capabilities

Registry capabilities API endpoint.

11.1. getRegistryCapabilities

Get registry capabilities.

Returns information about supported registry features including sparse manifest support and required architectures.

GET /api/v1/registry/capabilities

Authorizations: 

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  "https://quay-server.example.com/api/v1/registry/capabilities" \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json"

Chapter 12. namespacequota

12.1. listUserQuota

GET /api/v1/user/quota

Authorizations: oauth2_implicit (user:admin)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota" \
  -H "Authorization: Bearer <access_token>"

12.2. getOrganizationQuotaLimit

GET /api/v1/organization/{orgname}/quota/{quota_id}/limit/{limit_id}

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

quota_id
required

 

string

path

limit_id
required

 

string

path

orgname
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit/<limit_id>" \
     -H "Authorization: Bearer <access_token>"

12.3. changeOrganizationQuotaLimit

PUT /api/v1/organization/{orgname}/quota/{quota_id}/limit/{limit_id}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

quota_id
required

 

string

path

limit_id
required

 

string

path

orgname
required

 

string

Request body schema (application/json)

Description of changing organization quota limit

Expand
NameDescriptionSchema

type
optional

Type of quota limit: "Warning" or "Reject"

string

threshold_percent
optional

Quota threshold, in percent of quota

integer

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit/<limit_id>" \
     -H "Authorization: Bearer <access_token>" \
     -H "Content-Type: application/json" \
     -d '{
           "type": "<type>",
           "threshold_percent": <threshold_percent>
         }'

12.4. deleteOrganizationQuotaLimit

DELETE /api/v1/organization/{orgname}/quota/{quota_id}/limit/{limit_id}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

quota_id
required

 

string

path

limit_id
required

 

string

path

orgname
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit/<limit_id>" \
     -H "Authorization: Bearer <access_token>"

12.5. createOrganizationQuotaLimit

POST /api/v1/organization/{orgname}/quota/{quota_id}/limit

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

quota_id
required

 

string

path

orgname
required

 

string

Request body schema (application/json)

Description of a new organization quota limit

Expand
NameDescriptionSchema

type
required

Type of quota limit: "Warning" or "Reject"

string

threshold_percent
required

Quota threshold, in percent of quota

integer

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit" \
     -H "Authorization: Bearer <access_token>" \
     -H "Content-Type: application/json" \
     -d '{
           "limit_bytes": 21474836480,
           "type": "Reject", 
1

           "threshold_percent": 90 
2

         }'

12.6. listOrganizationQuotaLimit

GET /api/v1/organization/{orgname}/quota/{quota_id}/limit

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

quota_id
required

 

string

path

orgname
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit" \
     -H "Authorization: Bearer <access_token>"

12.7. getUserQuotaLimit

GET /api/v1/user/quota/{quota_id}/limit/{limit_id}

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

quota_id
required

 

string

path

limit_id
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota/{quota_id}/limit/{limit_id}" \
  -H "Authorization: Bearer <access_token>"

12.8. listUserQuotaLimit

GET /api/v1/user/quota/{quota_id}/limit

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

quota_id
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota/{quota_id}/limit" \
  -H "Authorization: Bearer <access_token>"

12.9. getOrganizationQuota

GET /api/v1/organization/{orgname}/quota/{quota_id}

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

quota_id
required

 

string

path

orgname
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>" \
     -H "Authorization: Bearer <access_token>"S

12.10. changeOrganizationQuota

PUT /api/v1/organization/{orgname}/quota/{quota_id}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

quota_id
required

 

string

path

orgname
required

 

string

Request body schema (application/json)

Description of a new organization quota

Expand
NameDescriptionSchema

limit_bytes
optional

Number of bytes the organization is allowed

integer

limits
optional

Human readable storage capacity of the organization. Accepts SI units like Mi, Gi, or Ti, as well as non-standard units like GB or MB. Must be mutually exclusive with limit_bytes.

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>" \
     -H "Authorization: Bearer <access_token>" \
     -H "Content-Type: application/json" \
     -d '{
         "limit_bytes": <limit_in_bytes>
     }'

12.11. deleteOrganizationQuota

DELETE /api/v1/organization/{orgname}/quota/{quota_id}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

quota_id
required

 

string

path

orgname
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>" \
     -H "Authorization: Bearer <access_token>"

12.12. createOrganizationQuota

Create a new organization quota.

POST /api/v1/organization/{orgname}/quota

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

 

string

Request body schema (application/json)

Description of a new organization quota

Expand
NameDescriptionSchema

limit_bytes
required

Number of bytes the organization is allowed

integer

limits
optional

Human readable storage capacity of the organization. Accepts SI units like Mi, Gi, or Ti, as well as non-standard units like GB or MB. Must be mutually exclusive with limit_bytes.

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota" \
     -H "Authorization: Bearer <access_token>" \
     -H "Content-Type: application/json" \
     -d '{
         "limit_bytes": 10737418240,
         "limits": "10 Gi"
     }'

12.13. listOrganizationQuota

GET /api/v1/organization/{orgname}/quota

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json'  https://<quay-server.example.com>/api/v1/organization/<organization_name>/quota

12.14. getUserQuota

GET /api/v1/user/quota/{quota_id}

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

quota_id
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota/{quota_id}" \
  -H "Authorization: Bearer <access_token>"

Chapter 13. organization

Manage organizations, members and OAuth applications.

13.1. createOrganization

Create a new organization.

POST /api/v1/organization/

Authorizations: oauth2_implicit (user:admin)

Request body schema (application/json)

Description of a new organization.

Expand
NameDescriptionSchema

name
required

Organization username

string

email
optional

Organization contact email

string

recaptcha_response
optional

The (may be disabled) recaptcha response code for verification

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST   -H "Authorization: Bearer <bearer_token>" -H "Content-Type: application/json"   -d '{
    "name": "<new_organization_name>"
  }'   "https://<quay-server.example.com>/api/v1/organization/"

13.2. validateProxyCacheConfig

POST /api/v1/organization/{orgname}/validateproxycache

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

 

string

Request body schema (application/json)

Proxy cache configuration for an organization

Expand
NameDescriptionSchema

upstream_registry
required

Name of the upstream registry that is to be cached

string

Responses
Expand
HTTP CodeDescriptionSchema

202

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/organization/{orgname}/validateproxycache" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
        "upstream_registry": "<upstream_registry>"
        "upstream_registry_username": "your_robot_account_username"
        "upstream_registry_password": "your_robot_account_password"
      }'

13.3. getOrganizationCollaborators

List outside collaborators of the specified organization.

GET /api/v1/organization/{orgname}/collaborators

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/{orgname}/collaborators" \
  -H "Authorization: Bearer <access_token>"

13.4. getOrganizationApplication

Retrieves the application with the specified client_id under the specified organization.

GET /api/v1/organization/{orgname}/applications/{client_id}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

client_id
required

The OAuth client ID

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/applications/<client_id>" \
  -H "Authorization: Bearer <access_token>"

13.5. updateOrganizationApplication

Updates an application under this organization.

PUT /api/v1/organization/{orgname}/applications/{client_id}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

client_id
required

The OAuth client ID

string

path

orgname
required

The name of the organization

string

Request body schema (application/json)

Description of an updated application.

Expand
NameDescriptionSchema

name
required

The name of the application

string

redirect_uri
required

The URI for the application’s OAuth redirect

string

application_uri
required

The URI for the application’s homepage

string

description
optional

The human-readable description for the application

string

avatar_email
optional

The e-mail address of the avatar to use for the application

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT "https://quay-server.example.com/api/v1/organization/test/applications/12345" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "Updated Application Name",
        "redirect_uri": "https://example.com/oauth/callback",
        "application_uri": "https://example.com",
        "description": "Updated description for the application",
        "avatar_email": "avatar@example.com"
      }'

13.6. deleteOrganizationApplication

Deletes the application under this organization.

DELETE /api/v1/organization/{orgname}/applications/{client_id}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

client_id
required

The OAuth client ID

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/{orgname}/applications/{client_id}" \
  -H "Authorization: Bearer <access_token>"

13.7. createOrganizationApplication

Creates a new application under this organization.

POST /api/v1/organization/{orgname}/applications

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Request body schema (application/json)

Description of a new organization application.

Expand
NameDescriptionSchema

name
required

The name of the application

string

redirect_uri
optional

The URI for the application’s OAuth redirect

string

application_uri
optional

The URI for the application’s homepage

string

description
optional

The human-readable description for the application

string

avatar_email
optional

The e-mail address of the avatar to use for the application

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/organization/<orgname>/applications" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "<app_name>",
        "redirect_uri": "<redirect_uri>",
        "application_uri": "<application_uri>",
        "description": "<app_description>",
        "avatar_email": "<avatar_email>"
      }'

13.8. getOrganizationApplications

List the applications for the specified organization.

GET /api/v1/organization/{orgname}/applications

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/applications" \
  -H "Authorization: Bearer <access_token>"

13.9. getProxyCacheConfig

Retrieves the proxy cache configuration of the organization.

GET /api/v1/organization/{orgname}/proxycache

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/{orgname}/proxycache" \
  -H "Authorization: Bearer <access_token>"

13.10. deleteProxyCacheConfig

Delete proxy cache configuration for the organization.

DELETE /api/v1/organization/{orgname}/proxycache

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/{orgname}/proxycache" \
  -H "Authorization: Bearer <access_token>"

13.11. createProxyCacheConfig

Creates proxy cache configuration for the organization.

POST /api/v1/organization/{orgname}/proxycache

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Request body schema (application/json)

Proxy cache configuration for an organization

Expand
NameDescriptionSchema

upstream_registry
required

Name of the upstream registry that is to be cached

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/organization/<orgname>/proxycache" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
        "upstream_registry": "<upstream_registry>"
        "upstream_registry_username": "your_robot_account_username"
        "upstream_registry_password": "your_robot_account_password"
      }'

13.12. getOrganizationMember

Retrieves the details of a member of the organization.

GET /api/v1/organization/{orgname}/members/{membername}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

membername
required

The username of the organization member

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/members/<membername>" \
  -H "Authorization: Bearer <access_token>"

13.13. removeOrganizationMember

Removes a member from an organization, revoking all its repository priviledges and removing it from all teams in the organization.

DELETE /api/v1/organization/{orgname}/members/{membername}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

membername
required

The username of the organization member

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/<orgname>/members/<membername>" \
  -H "Authorization: Bearer <access_token>"

13.14. getOrganizationMembers

List the human members of the specified organization.

GET /api/v1/organization/{orgname}/members

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/members" \
  -H "Authorization: Bearer <access_token>"

13.15. getOrganization

Get the details for the specified organization.

GET /api/v1/organization/{orgname}

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  "<quay-server.example.com>/api/v1/organization/<organization_name>"

13.16. changeOrganizationDetails

Change the details for the specified organization.

PUT /api/v1/organization/{orgname}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Request body schema (application/json)

Description of updates for an existing organization

Expand
NameDescriptionSchema

email
optional

Organization contact email

string

invoice_email
optional

Whether the organization desires to receive emails for invoices

boolean

invoice_email_address
optional

The email address at which to receive invoices

 

tag_expiration_s
optional

The number of seconds for tag expiration

integer

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT \
  -H "Authorization: Bearer <bearer_token>" \
  "<quay-server.example.com>/api/v1/organization/<organization_name>"

13.17. deleteAdminedOrganization

Deletes the specified organization.

DELETE /api/v1/organization/{orgname}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  "<quay-server.example.com>/api/v1/organization/<organization_name>"

13.18. getApplicationInformation

Get information on the specified application.

GET /api/v1/app/{client_id}

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

client_id
required

The OAuth client ID

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/app/<client_id>" \
  -H "Authorization: Bearer <access_token>"

Chapter 14. permission

Manage repository permissions.

14.1. getUserTransitivePermission

Get the fetch the permission for the specified user.

GET /api/v1/repository/{repository}/permissions/user/{username}/transitive

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

username
required

The username of the user to which the permissions apply

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <access_token>" \
  "https://quay-server.example.com/api/v1/repository/<repository_path>/permissions/user/<username>/transitive"

14.2. getUserPermissions

Get the permission for the specified user.

GET /api/v1/repository/{repository}/permissions/user/{username}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

username
required

The username of the user to which the permission applies

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <access_token>" \
  "https://quay-server.example.com/api/v1/repository/<repository_path>/permissions/user/<username>"

14.3. changeUserPermissions

Update the perimssions for an existing repository.

PUT /api/v1/repository/{repository}/permissions/user/{username}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

username
required

The username of the user to which the permission applies

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

Description of a user permission.

Expand
NameDescriptionSchema

role
required

Role to use for the user

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -d '{"role": "admin"}' \
  https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository>/permissions/user/<username>

14.4. deleteUserPermissions

Delete the permission for the user.

DELETE /api/v1/repository/{repository}/permissions/user/{username}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

username
required

The username of the user to which the permission applies

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository>/permissions/user/<username>

14.5. getTeamPermissions

Fetch the permission for the specified team.

GET /api/v1/repository/{repository}/permissions/team/{teamname}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

teamname
required

The name of the team to which the permission applies

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <access_token>" \
  "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/permissions/team/<teamname>"

14.6. changeTeamPermissions

Update the existing team permission.

PUT /api/v1/repository/{repository}/permissions/team/{teamname}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

teamname
required

The name of the team to which the permission applies

string

Request body schema (application/json)

Description of a team permission.

Expand
NameDescriptionSchema

role
required

Role to use for the team

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

$ curl -X PUT \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"role": "<role>"}' \
  "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/permissions/team/<teamname>"

14.7. deleteTeamPermissions

Delete the permission for the specified team.

DELETE /api/v1/repository/{repository}/permissions/team/{teamname}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

teamname
required

The name of the team to which the permission applies

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE \
  -H "Authorization: Bearer <access_token>" \
  "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/permissions/team/<teamname>"

14.8. listRepoTeamPermissions

List all team permission.

GET /api/v1/repository/{repository}/permissions/team/

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <access_token>" \
  "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/permissions/team/"

14.9. listRepoUserPermissions

List all user permissions.

GET /api/v1/repository/{repository}/permissions/user/

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository>/permissions/user/<username>/

Chapter 15. policy

15.1. createOrganizationAutoPrunePolicy

Creates an auto-prune policy for the organization

POST /api/v1/organization/{orgname}/autoprunepolicy/

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Request body schema (application/json)

The policy configuration that is to be applied to the user namespace

Expand
NameDescriptionSchema

method
required

The method to use for pruning tags (number_of_tags, creation_date)

string

value
required

The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days))

 

tagPattern
optional

Tags only matching this pattern will be pruned

string

tagPatternMatches
optional

Determine whether pruned tags should or should not match the tagPattern

boolean

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "number_of_tags", "value": 10}' http://<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/

15.2. listOrganizationAutoPrunePolicies

Lists the auto-prune policies for the organization

GET /api/v1/organization/{orgname}/autoprunepolicy/

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/organization/example_org/autoprunepolicy/" \
  -H "Authorization: Bearer <your_access_token>"

15.3. getOrganizationAutoPrunePolicy

Fetches the auto-prune policy for the organization

GET /api/v1/organization/{orgname}/autoprunepolicy/{policy_uuid}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

policy_uuid
required

The unique ID of the policy

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/<policy_uuid>

15.4. deleteOrganizationAutoPrunePolicy

Deletes the auto-prune policy for the organization

DELETE /api/v1/organization/{orgname}/autoprunepolicy/{policy_uuid}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

policy_uuid
required

The unique ID of the policy

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://quay-server.example.com/api/v1/organization/example_org/autoprunepolicy/example_policy_uuid" \
  -H "Authorization: Bearer <your_access_token>"

15.5. updateOrganizationAutoPrunePolicy

Updates the auto-prune policy for the organization

PUT /api/v1/organization/{orgname}/autoprunepolicy/{policy_uuid}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

policy_uuid
required

The unique ID of the policy

string

path

orgname
required

The name of the organization

string

Request body schema (application/json)

The policy configuration that is to be applied to the user namespace

Expand
NameDescriptionSchema

method
required

The method to use for pruning tags (number_of_tags, creation_date)

string

value
required

The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days))

 

tagPattern
optional

Tags only matching this pattern will be pruned

string

tagPatternMatches
optional

Determine whether pruned tags should or should not match the tagPattern

boolean

Responses
Expand
HTTP CodeDescriptionSchema

204

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT   -H "Authorization: Bearer <bearer_token>"   -H "Content-Type: application/json"   -d '{
    "method": "creation_date",
    "value": "4d",
    "tagPattern": "^v*",
    "tagPatternMatches": true
  }'   "<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/<uuid>"

15.6. createRepositoryAutoPrunePolicy

Creates an auto-prune policy for the repository

POST /api/v1/repository/{repository}/autoprunepolicy/

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

The policy configuration that is to be applied to the user namespace

Expand
NameDescriptionSchema

method
required

The method to use for pruning tags (number_of_tags, creation_date)

string

value
required

The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days))

 

tagPattern
optional

Tags only matching this pattern will be pruned

string

tagPatternMatches
optional

Determine whether pruned tags should or should not match the tagPattern

boolean

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "number_of_tags","value": 2}' http://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/

15.7. listRepositoryAutoPrunePolicies

Lists the auto-prune policies for the repository

GET /api/v1/repository/{repository}/autoprunepolicy/

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/autoprunepolicy/" \
  -H "Authorization: Bearer <your_access_token>"

15.8. getRepositoryAutoPrunePolicy

Fetches the auto-prune policy for the repository

GET /api/v1/repository/{repository}/autoprunepolicy/{policy_uuid}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

policy_uuid
required

The unique ID of the policy

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/autoprunepolicy/123e4567-e89b-12d3-a456-426614174000" \
  -H "Authorization: Bearer <your_access_token>"

15.9. deleteRepositoryAutoPrunePolicy

Deletes the auto-prune policy for the repository

DELETE /api/v1/repository/{repository}/autoprunepolicy/{policy_uuid}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

policy_uuid
required

The unique ID of the policy

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/autoprunepolicy/123e4567-e89b-12d3-a456-426614174000" \
  -H "Authorization: Bearer <your_access_token>"

15.10. updateRepositoryAutoPrunePolicy

Updates the auto-prune policy for the repository

PUT /api/v1/repository/{repository}/autoprunepolicy/{policy_uuid}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

policy_uuid
required

The unique ID of the policy

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

The policy configuration that is to be applied to the user namespace

Expand
NameDescriptionSchema

method
required

The method to use for pruning tags (number_of_tags, creation_date)

string

value
required

The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days))

 

tagPattern
optional

Tags only matching this pattern will be pruned

string

tagPatternMatches
optional

Determine whether pruned tags should or should not match the tagPattern

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "number_of_tags",
    "value": "5",
    "tagPattern": "^test.*",
    "tagPatternMatches": true
  }' \
  "https://quay-server.example.com/api/v1/repository/<namespace>/<repo_name>/autoprunepolicy/<uuid>"

15.11. createUserAutoPrunePolicy

Creates the auto-prune policy for the currently logged in user

POST /api/v1/user/autoprunepolicy/

Authorizations: oauth2_implicit (user:admin)

Request body schema (application/json)

The policy configuration that is to be applied to the user namespace

Expand
NameDescriptionSchema

method
required

The method to use for pruning tags (number_of_tags, creation_date)

string

value
required

The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days))

 

tagPattern
optional

Tags only matching this pattern will be pruned

string

tagPatternMatches
optional

Determine whether pruned tags should or should not match the tagPattern

boolean

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://quay-server.example.com/api/v1/user/autoprunepolicy/" \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "number_of_tags",
    "value": 10,
    "tagPattern": "v*",
    "tagPatternMatches": true
  }'

15.12. listUserAutoPrunePolicies

Lists the auto-prune policies for the currently logged in user

GET /api/v1/user/autoprunepolicy/

Authorizations: oauth2_implicit (user:admin)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/user/autoprunepolicy/" \
  -H "Authorization: Bearer <your_access_token>"

15.13. getUserAutoPrunePolicy

Fetches the auto-prune policy for the currently logged in user

GET /api/v1/user/autoprunepolicy/{policy_uuid}

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

policy_uuid
required

The unique ID of the policy

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/user/autoprunepolicy/{policy_uuid}" \
  -H "Authorization: Bearer <your_access_token>"

15.14. deleteUserAutoPrunePolicy

Deletes the auto-prune policy for the currently logged in user

DELETE /api/v1/user/autoprunepolicy/{policy_uuid}

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

policy_uuid
required

The unique ID of the policy

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://quay-server.example.com/api/v1/user/autoprunepolicy/<policy_uuid>" \
  -H "Authorization: Bearer <your_access_token>"

15.15. updateUserAutoPrunePolicy

Updates the auto-prune policy for the currently logged in user

PUT /api/v1/user/autoprunepolicy/{policy_uuid}

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

policy_uuid
required

The unique ID of the policy

string

Request body schema (application/json)

The policy configuration that is to be applied to the user namespace

Expand
NameDescriptionSchema

method
required

The method to use for pruning tags (number_of_tags, creation_date)

string

value
required

The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days))

 

tagPattern
optional

Tags only matching this pattern will be pruned

string

tagPatternMatches
optional

Determine whether pruned tags should or should not match the tagPattern

boolean

Responses
Expand
HTTP CodeDescriptionSchema

204

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT "https://quay-server.example.com/api/v1/user/autoprunepolicy/<policy_uuid>" \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "number_of_tags",
    "value": "10",
    "tagPattern": ".*-old",
    "tagPatternMatches": true
  }'

Chapter 16. prototype

Manage default permissions added to repositories.

16.1. updateOrganizationPrototypePermission

Update the role of an existing permission prototype.

PUT /api/v1/organization/{orgname}/prototypes/{prototypeid}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

prototypeid
required

The ID of the prototype

string

path

orgname
required

The name of the organization

string

Request body schema (application/json)

Description of a the new prototype role

Expand
NameDescriptionSchema

role
optional

Role that should be applied to the permission

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  --data '{
    "role": "write"
  }' \
  https://<quay-server.example.com>/api/v1/organization/<organization_name>/prototypes/<prototypeid>

16.2. deleteOrganizationPrototypePermission

Delete an existing permission prototype.

DELETE /api/v1/organization/{orgname}/prototypes/{prototypeid}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

prototypeid
required

The ID of the prototype

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
curl -X DELETE \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/organization/<organization_name>/prototypes/<prototype_id>

16.3. createOrganizationPrototypePermission

Create a new permission prototype.

POST /api/v1/organization/{orgname}/prototypes

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Request body schema (application/json)

Description of a new prototype

Expand
NameDescriptionSchema

role
required

Role that should be applied to the delegate

string

activating_user
optional

Repository creating user to whom the rule should apply

object

delegate
required

Information about the user or team to which the rule grants access

object

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST   -H "Authorization: Bearer <bearer_token>"   -H "Content-Type: application/json"   --data '{
    "role": "<admin_read_or_write>",
    "delegate": {
      "name": "<username>",
      "kind": "user"
    },
    "activating_user": {
      "name": "<robot_name>"
    }
  }'   https://<quay-server.example.com>/api/v1/organization/<organization_name>/prototypes

16.4. getOrganizationPrototypePermissions

List the existing prototypes for this organization.

GET /api/v1/organization/{orgname}/prototypes

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/organization/<organization_name>/prototypes

Chapter 17. referrers

List v2 API referrers

17.1. getReferrers

List v2 API referrers of an image digest.

GET /v2/{organization_name}/{repository_name}/referrers/{digest}
Request body schema (application/json)

Referrers of an image digest.

Expand

Type

Name

Description

Schema

path

orgname
required

The name of the organization

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

referrers
required

Looks up the OCI referrers of a manifest under a repository.

string

Chapter 18. repository

List, create and manage repositories.

18.1. createRepo

Create a new repository.

POST /api/v1/repository

Authorizations: oauth2_implicit (repo:create)

Request body schema (application/json)

Description of a new repository

Expand
NameDescriptionSchema

repository
required

Repository name

string

visibility
required

Visibility which the repository will start with

string

namespace
optional

Namespace in which the repository should be created. If omitted, the username of the caller is used

string

description
required

Markdown encoded description for the repository

string

repo_kind
optional

The kind of repository

 
Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "repository": "<new_repository_name>",
    "visibility": "<public>",
    "description": "<This is a description of the new repository>."
  }' \
  "https://quay-server.example.com/api/v1/repository"

18.2. listRepos

Fetch the list of repositories visible to the current user under a variety of situations.

GET /api/v1/repository

Authorizations: oauth2_implicit (repo:read)

Query parameters
Expand
TypeNameDescriptionSchema

query

next_page
optional

The page token for the next page

string

query

repo_kind
optional

The kind of repositories to return

string

query

popularity
optional

Whether to include the repository’s popularity metric.

boolean

query

last_modified
optional

Whether to include when the repository was last modified.

boolean

query

public
required

Adds any repositories visible to the user by virtue of being public

boolean

query

starred
required

Filters the repositories returned to those starred by the user

boolean

query

namespace
required

Filters the repositories returned to this namespace

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  "https://quay-server.example.com/api/v1/repository?public=true&starred=false&namespace=<NAMESPACE>"

18.3. changeRepoVisibility

Change the visibility of a repository.

POST /api/v1/repository/{repository}/changevisibility

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

Change the visibility for the repository.

Expand
NameDescriptionSchema

visibility
required

Visibility which the repository will start with

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example Command
$ curl -X POST \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
        "visibility": "private"
      }' \
  "https://quay-server.example.com/api/v1/repository/<NAMESPACE>/<REPO_NAME>/changevisibility"

18.4. changeRepoState

Change the state of a repository.

PUT /api/v1/repository/{repository}/changestate

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

Change the state of the repository.

Expand
NameDescriptionSchema

state
required

Determines whether pushes are allowed.

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command

18.5. getRepo

Fetch the specified repository.

GET /api/v1/repository/{repository}

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Query parameters
Expand
TypeNameDescriptionSchema

query

includeTags
optional

Whether to include repository tags

boolean

query

includeStats
optional

Whether to include action statistics

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET -H "Authorization: Bearer <bearer_token>" "<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>"

18.6. updateRepo

Update the description in the specified repository.

PUT /api/v1/repository/{repository}

Authorizations: oauth2_implicit (repo:write)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

Fields which can be updated in a repository.

Expand
NameDescriptionSchema

description
required

Markdown encoded description for the repository

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -d '{
        "description": "This is an updated description for the repository."
      }' \
  "https://quay-server.example.com/api/v1/repository/<NAMESPACE>/<REPOSITORY>"

18.7. deleteRepository

Delete a repository.

DELETE /api/v1/repository/{repository}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE   -H "Authorization: Bearer <bearer_token>" "<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>"

Chapter 19. repositorynotification

List, create and manage repository events/notifications.

19.1. testRepoNotification

Queues a test notification for this repository.

POST /api/v1/repository/{repository}/notification/{uuid}/test

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

uuid
required

The UUID of the notification

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  https://<quay-server.example.com>/api/v1/repository/<repository>/notification/<uuid>/test

19.2. getRepoNotification

Get information for the specified notification.

GET /api/v1/repository/{repository}/notification/{uuid}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

uuid
required

The UUID of the notification

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  https://<quay-server.example.com>/api/v1/repository/<repository>/notification/<uuid>

19.3. deleteRepoNotification

Deletes the specified notification.

DELETE /api/v1/repository/{repository}/notification/{uuid}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

uuid
required

The UUID of the notification

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE \
  -H "Authorization: Bearer <bearer_token>" \
  https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>/notification/<uuid>

19.4. resetRepositoryNotificationFailures

Resets repository notification to 0 failures.

POST /api/v1/repository/{repository}/notification/{uuid}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

uuid
required

The UUID of the notification

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  https://<quay-server.example.com>/api/v1/repository/<repository>/notification/<uuid>

19.5. createRepoNotification

POST /api/v1/repository/{repository}/notification/

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

Information for creating a notification on a repository

Expand
NameDescriptionSchema

event
required

The event on which the notification will respond

string

method
required

The method of notification (such as email or web callback)

string

config
required

JSON config information for the specific method of notification

object

eventConfig
required

JSON config information for the specific event of notification

object

title
optional

The human-readable title of the notification

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  --data '{
    "event": "<event>",
    "method": "<method>",
    "config": {
      "<config_key>": "<config_value>"
    },
    "eventConfig": {
      "<eventConfig_key>": "<eventConfig_value>"
    }
  }' \
  https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>/notification/

19.6. listRepoNotifications

List the notifications for the specified repository.

GET /api/v1/repository/{repository}/notification/

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET  -H "Authorization: Bearer <bearer_token>"   -H "Accept: application/json"  https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>/notification

Chapter 20. robot

Manage user and organization robot accounts.

20.1. getUserRobots

List the available robots for the user.

GET /api/v1/user/robots

Authorizations: oauth2_implicit (user:admin)

Query parameters
Expand
TypeNameDescriptionSchema

query

limit
optional

If specified, the number of robots to return.

integer

query

token
optional

If false, the robot’s token is not returned.

boolean

query

permissions
optional

Whether to include repositories and teams in which the robots have permission.

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/user/robots?limit=10&token=false&permissions=true" \
  -H "Authorization: Bearer <your_access_token>"

20.2. getOrgRobotPermissions

Returns the list of repository permissions for the org’s robot.

GET /api/v1/organization/{orgname}/robots/{robot_shortname}/permissions

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

robot_shortname
required

The short name for the robot, without any user or organization prefix

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  "https://quay-server.example.com/api/v1/organization/<ORGNAME>/robots/<ROBOT_SHORTNAME>/permissions"

20.3. regenerateOrgRobotToken

Regenerates the token for an organization robot.

POST /api/v1/organization/{orgname}/robots/{robot_shortname}/regenerate

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

robot_shortname
required

The short name for the robot, without any user or organization prefix

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  "<quay-server.example.com>/api/v1/organization/<orgname>/robots/<robot_shortname>/regenerate"

20.4. getUserRobotPermissions

Returns the list of repository permissions for the user’s robot.

GET /api/v1/user/robots/{robot_shortname}/permissions

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

robot_shortname
required

The short name for the robot, without any user or organization prefix

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  "https://quay-server.example.com/api/v1/user/robots/<ROBOT_SHORTNAME>/permissions"

20.5. regenerateUserRobotToken

Regenerates the token for a user’s robot.

POST /api/v1/user/robots/{robot_shortname}/regenerate

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

robot_shortname
required

The short name for the robot, without any user or organization prefix

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>/regenerate"

20.6. getOrgRobot

Returns the organization’s robot with the specified name.

GET /api/v1/organization/{orgname}/robots/{robot_shortname}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

robot_shortname
required

The short name for the robot, without any user or organization prefix

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  "https://quay-server.example.com/api/v1/organization/<ORGNAME>/robots/<ROBOT_SHORTNAME>"

20.7. createOrgRobot

Create a new robot in the organization.

PUT /api/v1/organization/{orgname}/robots/{robot_shortname}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

robot_shortname
required

The short name for the robot, without any user or organization prefix

string

path

orgname
required

The name of the organization

string

Request body schema (application/json)

Optional data for creating a robot

Expand
NameDescriptionSchema

description
optional

Optional text description for the robot

string

unstructured_metadata
optional

Optional unstructured metadata for the robot

object

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT   -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/organization/<organization_name>/robots/<robot_name>"

20.8. deleteOrgRobot

Delete an existing organization robot.

DELETE /api/v1/organization/{orgname}/robots/{robot_shortname}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

robot_shortname
required

The short name for the robot, without any user or organization prefix

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
curl -X DELETE \
  -H "Authorization: Bearer <bearer_token>" \
  "<quay-server.example.com>/api/v1/organization/<organization_name>/robots/<robot_shortname>"

20.9. getOrgRobots

List the organization’s robots.

GET /api/v1/organization/{orgname}/robots

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname
required

The name of the organization

string

Query parameters
Expand
TypeNameDescriptionSchema

query

limit
optional

If specified, the number of robots to return.

integer

query

token
optional

If false, the robot’s token is not returned.

boolean

query

permissions
optional

Whether to include repositories and teams in which the robots have permission.

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/organization/<organization_name>/robots"

20.10. getUserRobot

Returns the user’s robot with the specified name.

GET /api/v1/user/robots/{robot_shortname}

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

robot_shortname
required

The short name for the robot, without any user or organization prefix

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>"

20.11. createUserRobot

Create a new user robot with the specified name.

PUT /api/v1/user/robots/{robot_shortname}

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

robot_shortname
required

The short name for the robot, without any user or organization prefix

string

Request body schema (application/json)

Optional data for creating a robot

Expand
NameDescriptionSchema

description
optional

Optional text description for the robot

string

unstructured_metadata
optional

Optional unstructured metadata for the robot

object

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT   -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/user/robots/<robot_name>"

20.12. deleteUserRobot

Delete an existing robot.

DELETE /api/v1/user/robots/{robot_shortname}

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

robot_shortname
required

The short name for the robot, without any user or organization prefix

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE \
  -H "Authorization: Bearer <bearer_token>" \
  "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>"

20.13. Auth Federated Robot Token

Return an expiring robot token using the robot identity federation mechanism.

GET oauth2/federation/robot/token

Authorizations: oauth2_implicit (robot:auth)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful authentication and token generation

{ "token": "string" }

401

Unauthorized: missing or invalid authentication

{ "error": "string" }

Request Body
Expand
TypeNameDescriptionSchema

body

auth_result
required

The result of the authentication process, containing information about the robot identity.

{ "missing": "boolean", "error_message": "string", "context": { "robot": "RobotObject" } }

Example command
$ curl -X GET "https://quay-server.example.com/oauth2/federation/robot/token" \
  -H "Authorization: Bearer <your_access_token>"

20.14. createOrgRobotFederation

Create a federation configuration for the specified organization robot.

POST /api/v1/organization/{orgname}/robots/{robot_shortname}/federation

Retrieve the federation configuration for the specified organization robot.

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

orgname + robot_shortnamerequired

The name of the organization and the short name for the robot, without any user or organization prefix

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

Example command
$ curl -X POST "https://quay-server.example.com/api/v1/organization/{orgname}/robots/{robot_shortname}/federation" \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json"

Chapter 22. secscan

List and manage repository vulnerabilities and other security information.

22.1. getRepoManifestSecurity

GET /api/v1/repository/{repository}/manifest/{manifestref}/security

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

manifestref
required

The digest of the manifest

string

Query parameters
Expand
TypeNameDescriptionSchema

query

vulnerabilities
optional

Include vulnerabilities informations

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/manifest/<manifest_digest>/security?vulnerabilities=<true_or_false>"

Chapter 23. superuser

Superuser API.

23.1. getConfigDump

Returns the full configuration dump of the Quay instance.

GET /api/v1/superuser/config

Authorizations: oauth2_implicit (super:user)

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Response structure

The JSON response includes the following top-level keys:

Expand
NameDescriptionSchema
 

All config.yaml and defaulted parameters used by the Flask app that are part of the defined schema.

object

 

Any parameters from config.yaml or defaults that are not defined in the schema.

object

 

All environment variables available to the Flask app.

object

 

The complete config schema (CONFIG_SCHEMA) defining expected keys and types.

object

Example command
$ curl -X GET -H "Authorization: Bearer <bearer_token>"
"https://<quay-server.example.com>/api/v1/superuser/config" | jq -r .config

23.2. createInstallUser

Creates a new user.

POST /api/v1/superuser/users/

Authorizations: oauth2_implicit (super:user)

Request body schema (application/json)

Data for creating a user

Expand
NameDescriptionSchema

username
required

The username of the user being created

string

email
optional

The email address of the user being created

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST -H "Authorization: Bearer <bearer_token>" -H "Content-Type: application/json" -d '{
  "username": "newuser",
  "email": "newuser@example.com"
}' "https://<quay-server.example.com>/api/v1/superuser/users/"

23.3. changeInstallUser

Updates information about the specified user.

PUT /api/v1/superuser/users/{username}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

username
required

The username of the user being managed

string

Request body schema (application/json)

Description of updates for a user

Expand
NameDescriptionSchema

password
optional

The new password for the user

string

email
optional

The new e-mail address for the user

string

enabled
optional

Whether the user is enabled

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT "https://<quay-server.example.com>/api/v1/superuser/users/<username>" \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "password": "<N3wP@ssw0rd!>",
    "email": "<updated-email@example.com>",
    "enabled": true
  }'

23.4. deleteInstallUser

Deletes a user.

DELETE /api/v1/superuser/users/{username}

Authorizations: oauth2_implicit (super:user)

Request body schema (application/json)

Data for deleting a user

Expand
NameDescriptionSchema

username
required

The username of the user being deleted

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/superuser/users/{username}"

23.5. listAllUsers

Returns a list of all users in the system.

GET /api/v1/superuser/users/

Authorizations: oauth2_implicit (super:user)

Query parameters
Expand
TypeNameDescriptionSchema

query

next_page
optional

The page token for the next page

string

query

limit
optional

Limit to the number of results to return per page. Max 100.

integer

query

disabled
optional

If false, only enabled users will be returned.

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/superuser/users/"

23.6. listAllLogs

List the usage logs for the current system.

GET /api/v1/superuser/logs

Authorizations: oauth2_implicit (super:user)

Query parameters
Expand
TypeNameDescriptionSchema

query

next_page
optional

The page token for the next page

string

query

page
optional

The page number for the logs

integer

query

endtime
optional

Latest time to which to get logs (%m/%d/%Y %Z)

string

query

starttime
optional

Earliest time from which to get logs (%m/%d/%Y %Z)

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  "https://<quay_server>/api/v1/superuser/logs?starttime=<start_time>&endtime=<end_time>&page=<page_number>&next_page=<next_page_token>"

23.7. listAllOrganizations

List the organizations for the current system.

GET /api/v1/superuser/organizations

Authorizations: oauth2_implicit (super:user)

Query parameters
Expand
TypeNameDescriptionSchema

path

name
required

The name of the organization being managed

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/superuser/organizations/"

23.8. createServiceKey

POST /api/v1/superuser/keys

Authorizations: oauth2_implicit (super:user)

Request body schema (application/json)

Description of creation of a service key

Expand
NameDescriptionSchema

service
required

The service authenticating with this key

string

name
optional

The friendly name of a service key

string

metadata
optional

The key/value pairs of this key’s metadata

object

notes
optional

If specified, the extra notes for the key

string

expiration
required

The expiration date as a unix timestamp

 
Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -d '{
        "service": "<service_name>",
        "expiration": <unix_timestamp>
      }' \
  "<quay_server>/api/v1/superuser/keys"

23.9. listServiceKeys

GET /api/v1/superuser/keys

Authorizations: oauth2_implicit (super:user)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  "https://<quay_server>/api/v1/superuser/keys"

23.10. listAllAppTokens

Returns a list of all app specific tokens in the system.

This endpoint is for system-wide auditing by superusers and global read-only superusers.
GET /api/v1/superuser/apptokens

Authorizations: oauth2_implicit (super:user)

Query parameters
Expand
TypeNameDescriptionSchema

query

expiring
optional

If true, only returns those tokens expiring soon

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command

Example: List all app-specific tokens

$ curl -X GET \
  "https://quay-server.example.com/api/v1/superuser/apptokens" \
  -H "Authorization: Bearer <superuser_access_token>" \
  -H "Accept: application/json"

Example: List app-specific tokens expiring soon

$ curl -X GET \
  "https://quay-server.example.com/api/v1/superuser/apptokens?expiring=true" \
  -H "Authorization: Bearer <superuser_access_token>" \
  -H "Accept: application/json"

23.11. changeUserQuotaSuperUser

PUT /api/v1/superuser/organization/{namespace}/quota/{quota_id}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

namespace
required

 

string

path

quota_id
required

 

string

Request body schema (application/json)

Description of a new organization quota

Expand
NameDescriptionSchema

limit_bytes
optional

Number of bytes the organization is allowed

integer

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT "https://quay-server.example.com/api/v1/superuser/organization/<namespace>/quota/<quota_id>" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "limit_bytes": <NEW_QUOTA_LIMIT>
  }'

23.12. deleteUserQuotaSuperUser

DELETE /api/v1/superuser/organization/{namespace}/quota/{quota_id}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

namespace
required

 

string

path

quota_id
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://quay-server.example.com/api/v1/superuser/organization/<namespace>/quota/<quota_id>" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

23.13. createUserQuotaSuperUser

POST /api/v1/superuser/organization/{namespace}/quota

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

namespace
required

 

string

Request body schema (application/json)

Description of a new organization quota

Expand
NameDescriptionSchema

limit_bytes
required

Number of bytes the organization is allowed

integer

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://quay-server.example.com/api/v1/superuser/organization/<namespace>/quota" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "limit_bytes": 10737418240
  }'

23.14. listUserQuotaSuperUser

GET /api/v1/superuser/organization/{namespace}/quota

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

namespace
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/superuser/organization/<namespace>/quota" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

23.15. changeOrganizationQuotaSuperUser

PUT /api/v1/superuser/users/{namespace}/quota/{quota_id}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

namespace
required

 

string

path

quota_id
required

 

string

Request body schema (application/json)

Description of a new organization quota

Expand
NameDescriptionSchema

limit_bytes
optional

Number of bytes the organization is allowed

integer

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT "https://quay-server.example.com/api/v1/superuser/users/<username>/quota/<quota_id>" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "limit_bytes": <NEW_QUOTA_LIMIT>
  }'

23.16. deleteOrganizationQuotaSuperUser

DELETE /api/v1/superuser/users/{namespace}/quota/{quota_id}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

namespace
required

 

string

path

quota_id
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://quay-server.example.com/api/v1/superuser/users/<username>/quota/<quota_id>" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

23.17. createOrganizationQuotaSuperUser

POST /api/v1/superuser/users/{namespace}/quota

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

namespace
required

 

string

Request body schema (application/json)

Description of a new organization quota

Expand
NameDescriptionSchema

limit_bytes
optional

Number of bytes the organization is allowed

integer

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://quay-server.example.com/api/v1/superuser/users/<username>/quota" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
        "limit_bytes": <QUOTA_LIMIT>
      }'

23.18. listOrganizationQuotaSuperUser

GET /api/v1/superuser/users/{namespace}/quota

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

namespace
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/superuser/users/<username>/quota" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

23.19. changeOrganization

Updates information about the specified user.

PUT /api/v1/superuser/organizations/{name}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

name
required

The name of the organizaton being managed

string

Request body schema (application/json)

Description of updates for an existing organization

Expand
NameDescriptionSchema

email
optional

Organization contact email

string

invoice_email
optional

Whether the organization desires to receive emails for invoices

boolean

invoice_email_address
optional

The email address at which to receive invoices

 

tag_expiration_s
optional

The number of seconds for tag expiration

integer

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -d '{
        "email": "<contact_email>",
        "invoice_email": <boolean_value>,
        "invoice_email_address": "<invoice_email_address>",
        "tag_expiration_s": <expiration_seconds>
      }' \
  "https://<quay_server>/api/v1/superuser/organizations/<organization_name>"

23.20. deleteOrganization

Deletes the specified organization.

DELETE /api/v1/superuser/organizations/{name}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

name
required

The name of the organizaton being managed

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE \
  -H "Authorization: Bearer <bearer_token>" \
  "https://<quay_server>/api/v1/superuser/organizations/<organization_name>"

23.21. approveServiceKey

POST /api/v1/superuser/approvedkeys/{kid}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

kid
required

The unique identifier for a service key

string

Request body schema (application/json)

Information for approving service keys

Expand
NameDescriptionSchema

notes
optional

Optional approval notes

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -d '{
        "notes": "<approval_notes>"
      }' \
  "https://<quay_server>/api/v1/superuser/approvedkeys/<kid>"

23.22. deleteServiceKey

DELETE /api/v1/superuser/keys/{kid}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

kid
required

The unique identifier for a service key

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE \
  -H "Authorization: Bearer <bearer_token>" \
  "https://<quay_server>/api/v1/superuser/keys/<kid>"

23.23. updateServiceKey

PUT /api/v1/superuser/keys/{kid}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

kid
required

The unique identifier for a service key

string

Request body schema (application/json)

Description of updates for a service key

Expand
NameDescriptionSchema

name
optional

The friendly name of a service key

string

metadata
optional

The key/value pairs of this key’s metadata

object

expiration
optional

The expiration date as a unix timestamp

 
Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "<service_key_name>",
        "metadata": {"<key>": "<value>"},
        "expiration": <unix_timestamp>
      }' \
  "https://<quay_server>/api/v1/superuser/keys/<kid>"

23.24. getServiceKey

GET /api/v1/superuser/keys/{kid}

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

kid
required

The unique identifier for a service key

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  "https://<quay_server>/api/v1/superuser/keys/<kid>"

23.25. getRepoBuildStatusSuperUser

Return the status for the builds specified by the build uuids.

GET /api/v1/superuser/{build_uuid}/status

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

build_uuid
required

The UUID of the build

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/superuser/<build_uuid>/status" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

23.26. getRepoBuildSuperUser

Returns information about a build.

GET /api/v1/superuser/{build_uuid}/build

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

build_uuid
required

The UUID of the build

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/superuser/<build_uuid>/build" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

23.27. getRepoBuildLogsSuperUser

Return the build logs for the build specified by the build uuid.

GET /api/v1/superuser/{build_uuid}/logs

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

build_uuid
required

The UUID of the build

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/superuser/<build_uuid>/logs" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

23.28. getRegistrySize

GET /api/v1/superuser/registrysize/

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

namespace
required

 

string

Description of a image registry size

Expand
NameDescriptionSchema

size_bytes*
optional

Number of bytes the organization is allowed

integer

last_ran

 

integer

queued

 

boolean

running

 

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

CREATED

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  "https://<quay_server>/api/v1/superuser/registrysize/"

23.29. postRegistrySize

POST /api/v1/superuser/registrysize/

Authorizations: oauth2_implicit (super:user)

Path parameters
Expand
TypeNameDescriptionSchema

path

namespace
required

 

string

Request body schema (application/json)

Description of a image registry size

Expand
NameDescriptionSchema

last_ran

 

integer

queued

 

boolean

running

 

boolean

Responses
Expand
HTTP CodeDescriptionSchema

201

CREATED

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://quay-server.example.com/api/v1/superuser/registrysize/" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "namespace": "<namespace>",
    "last_ran": 1700000000,
    "queued": true,
    "running": false
  }'

Chapter 24. tag

Manage the tags of a repository.

24.1. restoreTag

Restores a repository tag back to a previous image in the repository.

POST /api/v1/repository/{repository}/tag/{tag}/restore

Authorizations: oauth2_implicit (repo:write)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

tag
required

The name of the tag

string

Request body schema (application/json)

Restores a tag to a specific image

Expand
NameDescriptionSchema

manifest_digest
required

If specified, the manifest digest that should be used

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  --data '{
    "manifest_digest": <manifest_digest>
  }' \
  quay-server.example.com/api/v1/repository/quayadmin/busybox/tag/test/restore

24.2. changeTag

Change which image a tag points to or create a new tag.

PUT /api/v1/repository/{repository}/tag/{tag}

Authorizations: oauth2_implicit (repo:write)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

tag
required

The name of the tag

string

Request body schema (application/json)

Makes changes to a specific tag

Expand
NameDescriptionSchema

manifest_digest
optional

(If specified) The manifest digest to which the tag should point

 

expiration
optional

(If specified) The expiration for the image

 

immutable
optional

(If specified) Whether the tag should be immutable. Write permission required to set, admin permission required to unset.

boolean

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  --data '{
    "manifest_digest": "<manifest_digest>"
    "immutable": true
  }' \
  https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>/tag/<tag>

24.3. deleteFullTag

Delete the specified repository tag.

DELETE /api/v1/repository/{repository}/tag/{tag}

Authorizations: oauth2_implicit (repo:write)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

tag
required

The name of the tag

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://quay-server.example.com/api/v1/repository/<namespace>/<repo_name>/tag/<tag_name>" \
  -H "Authorization: Bearer <your_access_token>"

24.4. listRepoTags

GET /api/v1/repository/{repository}/tag/

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Query parameters
Expand
TypeNameDescriptionSchema

query

onlyActiveTags
optional

Filter to only active tags.

boolean

query

page
optional

Page index for the results. Default 1.

integer

query

limit
optional

Limit to the number of results to return per page. Max 100.

integer

query

filter_tag_name
optional

Syntax: <op>:<name> Filters the tag names based on the operation.<op> can be 'like' or 'eq'.

string

query

specificTag
optional

Filters the tags to the specific tag.

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Accept: application/json" \
  https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>/tag/

24.5. getTagPullStatistics

Get pull statistics for a specific tag.

GET /api/v1/repository/{repository}/tag/{tag}/pull_statistics

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

path

tag
required

The name of the tag

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/repository/<organization>/<repository>/tag/<tag>/pull_statistics" -H "Authorization: <bearer_token>"   -H "Accept: application/json"

24.6. getManifestPullStatistics

Get pull statistics for a specific manifest.

GET /api/v1/repository/{repository}/manifest/{manifestref}/pull_statistics

Authorizations: oauth2_implicit (repo:read)

Path parameters
Expand
TypeNameDescriptionSchema

path

manifestref
required

The digest of the manifest

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
curl -X GET \
  "https://<quay-server.example.com>/api/v1/repository/<organization>/<repository>/manifest/sha256:<manifest>/pull_statistics" \
  -H "Authorization: <bearer_token>" \
  -H "Accept: application/json"

Chapter 25. immutability_policy

25.1. createOrgImmutabilityPolicy

POST /api/v1/organization/{orgname}/immutabilitypolicy/

Authorizations: oauth2_implicit (org:admin)

Request body schema (application/json)

The immutability policy configuration

Expand
NameDescriptionSchema

tagPattern
optional

Regex pattern to match tag names

string

tagPatternMatches
optional

If true, matching tags are immutable. If false, non-matching tags are immutable.

boolean

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/organization/<orgname>/immutabilitypolicy/" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"tagPattern": ".*", "tagPatternMatches": true}'

25.2. createRepositoryImmutabilityPolicy

POST /api/v1/repository/{repository}/immutabilitypolicy/

Authorizations: oauth2_implicit (repo:admin)

Request body schema (application/json)

The immutability policy configuration

Expand
NameDescriptionSchema

tagPattern
optional

Regex pattern to match tag names

string

tagPatternMatches
optional

If true, matching tags are immutable. If false, non-matching tags are immutable.

boolean

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/immutabilitypolicy/" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"tagPattern": ".*", "tagPatternMatches": true}'

25.3. deleteOrgImmutabilityPolicy

DELETE /api/v1/organization/{orgname}/immutabilitypolicy/{policy_uuid}

Authorizations: oauth2_implicit (org:admin)

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/<orgname>/immutabilitypolicy/<policy_uuid>" \
  -H "Authorization: Bearer <access_token>"

25.4. deleteRepositoryImmutabilityPolicy

DELETE /api/v1/repository/{repository}/immutabilitypolicy/{policy_uuid}

Authorizations: oauth2_implicit (repo:admin)

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/immutabilitypolicy/<policy_uuid>" \
  -H "Authorization: Bearer <access_token>"

25.5. getOrgImmutabilityPolicy

GET /api/v1/organization/{orgname}/immutabilitypolicy/{policy_uuid}

Authorizations: oauth2_implicit (org:admin)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/immutabilitypolicy/<policy_uuid>" \
  -H "Authorization: Bearer <access_token>"

25.6. getRepositoryImmutabilityPolicy

GET /api/v1/repository/{repository}/immutabilitypolicy/{policy_uuid}

Authorizations: oauth2_implicit (repo:admin)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/immutabilitypolicy/<policy_uuid>" \
  -H "Authorization: Bearer <access_token>"

25.7. listOrgImmutabilityPolicies

GET /api/v1/organization/{orgname}/immutabilitypolicy/

Authorizations: oauth2_implicit (org:admin)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/immutabilitypolicy/" \
  -H "Authorization: Bearer <access_token>"

25.8. listRepositoryImmutabilityPolicies

GET /api/v1/repository/{repository}/immutabilitypolicy/

Authorizations: oauth2_implicit (repo:admin)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/immutabilitypolicy/" \
  -H "Authorization: Bearer <access_token>"

25.9. updateOrgImmutabilityPolicy

PUT /api/v1/organization/{orgname}/immutabilitypolicy/{policy_uuid}

Authorizations: oauth2_implicit (org:admin)

Request body schema (application/json)

The immutability policy configuration

Expand
NameDescriptionSchema

tagPattern
optional

Regex pattern to match tag names

string

tagPatternMatches
optional

If true, matching tags are immutable. If false, non-matching tags are immutable.

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT "https://<quay-server.example.com>/api/v1/organization/<orgname>/immutabilitypolicy/<policy_uuid>" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"tagPattern": ".*", "tagPatternMatches": true}'

25.10. updateRepositoryImmutabilityPolicy

PUT /api/v1/repository/{repository}/immutabilitypolicy/{policy_uuid}

Authorizations: oauth2_implicit (repo:admin)

Request body schema (application/json)

The immutability policy configuration

Expand
NameDescriptionSchema

tagPattern
optional

Regex pattern to match tag names

string

tagPatternMatches
optional

If true, matching tags are immutable. If false, non-matching tags are immutable.

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/immutabilitypolicy/<policy_uuid>" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"tagPattern": ".*", "tagPatternMatches": true}'

Chapter 26. team

Create, list and manage an organization’s teams.

26.1. getOrganizationTeamPermissions

Returns the list of repository permissions for the org’s team.

GET /api/v1/organization/{orgname}/team/{teamname}/permissions

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

teamname
required

The name of the team

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <your_access_token>" \
  "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/permissions"

26.2. updateOrganizationTeamMember

Adds or invites a member to an existing team.

PUT /api/v1/organization/{orgname}/team/{teamname}/members/{membername}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

teamname
required

The name of the team

string

path

membername
required

The username of the team member

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT \
  -H "Authorization: Bearer <your_access_token>" \
  "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/members/<member_name>"

26.3. deleteOrganizationTeamMember

Delete a member of a team.

If the user is merely invited to join the team, then the invite is removed instead.
DELETE /api/v1/organization/{orgname}/team/{teamname}/members/{membername}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

teamname
required

The name of the team

string

path

membername
required

The username of the team member

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE \
  -H "Authorization: Bearer <your_access_token>" \
  "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/members/<member_name>"

26.4. getOrganizationTeamMembers

Retrieve the list of members for the specified team.

GET /api/v1/organization/{orgname}/team/{teamname}/members

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

teamname
required

The name of the team

string

path

orgname
required

The name of the organization

string

Query parameters
Expand
TypeNameDescriptionSchema

query

includePending
optional

Whether to include pending members

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET \
  -H "Authorization: Bearer <your_access_token>" \
  "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/members"

26.5. inviteTeamMemberEmail

Invites an email address to an existing team.

PUT /api/v1/organization/{orgname}/team/{teamname}/invite/{email}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

email
required

 

string

path

teamname
required

 

string

path

orgname
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT \
  -H "Authorization: Bearer <your_access_token>" \
  "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/invite/<email>"

26.6. deleteTeamMemberEmailInvite

Delete an invite of an email address to join a team.

DELETE /api/v1/organization/{orgname}/team/{teamname}/invite/{email}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

email
required

 

string

path

teamname
required

 

string

path

orgname
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command

+

$ curl -X DELETE \
  -H "Authorization: Bearer <your_access_token>" \
  "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/invite/<email>"

26.7. updateOrganizationTeam

Update the org-wide permission for the specified team.

Note

This API is also used to create a team.

PUT /api/v1/organization/{orgname}/team/{teamname}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

teamname
required

The name of the team

string

path

orgname
required

The name of the organization

string

Request body schema (application/json)

Description of a team

Expand
NameDescriptionSchema

role
required

Org wide permissions that should apply to the team

string

description
optional

Markdown description for the team

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -k -X PUT -H 'Accept: application/json' -H 'Content-Type: application/json' -H "Authorization: Bearer <bearer_token>"  --data '{"role": "creator"}' https://<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>

26.8. deleteOrganizationTeam

Delete the specified team.

DELETE /api/v1/organization/{orgname}/team/{teamname}

Authorizations: oauth2_implicit (org:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

teamname
required

The name of the team

string

path

orgname
required

The name of the organization

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE \
  -H "Authorization: Bearer <your_access_token>" \
  "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>"

Chapter 27. trigger

Create, list and manage build triggers.

27.1. activateBuildTrigger

Activate the specified build trigger.

POST /api/v1/repository/{repository}/trigger/{trigger_uuid}/activate

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

trigger_uuid
required

The UUID of the build trigger

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)
Expand
NameDescriptionSchema

config
required

Arbitrary json.

object

pull_robot
optional

The name of the robot that will be used to pull images.

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid/activate" \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "config": {
      "branch": "main"
    },
    "pull_robot": "example+robot"
  }'

27.2. listTriggerRecentBuilds

List the builds started by the specified trigger.

GET /api/v1/repository/{repository}/trigger/{trigger_uuid}/builds

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

trigger_uuid
required

The UUID of the build trigger

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Query parameters
Expand
TypeNameDescriptionSchema

query

limit
optional

The maximum number of builds to return

integer

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid/builds?limit=10" \
  -H "Authorization: Bearer <your_access_token>"

27.3. manuallyStartBuildTrigger

Manually start a build from the specified trigger.

POST /api/v1/repository/{repository}/trigger/{trigger_uuid}/start

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

trigger_uuid
required

The UUID of the build trigger

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

Optional run parameters for activating the build trigger

Expand
NameDescriptionSchema

branch_name
optional

(SCM only) If specified, the name of the branch to build.

string

commit_sha
optional

(Custom Only) If specified, the ref/SHA1 used to checkout a git repository.

string

refs
optional

(SCM Only) If specified, the ref to build.

 
Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid/start" \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "branch_name": "main",
    "commit_sha": "abcdef1234567890",
    "refs": "refs/heads/main"
  }'

27.4. getBuildTrigger

Get information for the specified build trigger.

GET /api/v1/repository/{repository}/trigger/{trigger_uuid}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

trigger_uuid
required

The UUID of the build trigger

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid" \
  -H "Authorization: Bearer <your_access_token>"

27.5. updateBuildTrigger

Updates the specified build trigger.

PUT /api/v1/repository/{repository}/trigger/{trigger_uuid}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

trigger_uuid
required

The UUID of the build trigger

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Request body schema (application/json)

Options for updating a build trigger

Expand
NameDescriptionSchema

enabled
required

Whether the build trigger is enabled

boolean

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X PUT "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid" \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -d '{"enabled": true}'

27.6. deleteBuildTrigger

Delete the specified build trigger.

DELETE /api/v1/repository/{repository}/trigger/{trigger_uuid}

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

trigger_uuid
required

The UUID of the build trigger

string

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid" \
  -H "Authorization: Bearer <your_access_token>"

27.7. listBuildTriggers

List the triggers for the specified repository.

GET /api/v1/repository/{repository}/trigger/

Authorizations: oauth2_implicit (repo:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/" \
  -H "Authorization: Bearer <your_access_token>"

Chapter 28. user

Manage the current user.

28.1. createStar

Star a repository.

POST /api/v1/user/starred

Authorizations: oauth2_implicit (repo:read)

Request body schema (application/json)
Expand
NameDescriptionSchema

namespace
required

Namespace in which the repository belongs

string

repository
required

Repository name

string

Responses
Expand
HTTP CodeDescriptionSchema

201

Successful creation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X POST "https://quay-server.example.com/api/v1/user/starred" \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -d '{
        "namespace": "<namespace>",
        "repository": "<repository_name>"
      }'

28.2. listStarredRepos

List all starred repositories.

GET /api/v1/user/starred

Authorizations: oauth2_implicit (user:admin)

Query parameters
Expand
TypeNameDescriptionSchema

query

next_page
optional

The page token for the next page

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/user/starred?next_page=<next_page_token>" \
  -H "Authorization: Bearer <your_access_token>"

28.3. getLoggedInUser

Get user information for the authenticated user.

GET /api/v1/user/

Authorizations: oauth2_implicit (user:read)

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

UserView

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/user/" \
  -H "Authorization: Bearer <your_access_token>"

28.4. deleteStar

Removes a star from a repository.

DELETE /api/v1/user/starred/{repository}

Authorizations: oauth2_implicit (user:admin)

Path parameters
Expand
TypeNameDescriptionSchema

path

repository
required

The full path of the repository. e.g. namespace/name

string

Responses
Expand
HTTP CodeDescriptionSchema

204

Deleted

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X DELETE "https://quay-server.example.com/api/v1/user/starred/namespace/repository-name" \
  -H "Authorization: Bearer <your_access_token>"

28.5. getUserInformation

Get user information for the specified user.

GET /api/v1/users/{username}

Authorizations: 

Path parameters
Expand
TypeNameDescriptionSchema

path

username
required

 

string

Responses
Expand
HTTP CodeDescriptionSchema

200

Successful invocation

 

400

Bad Request

ApiError

401

Session required

ApiError

403

Unauthorized access

ApiError

404

Not found

ApiError

Example command
$ curl -X GET "https://quay-server.example.com/api/v1/users/example_user" \
  -H "Authorization: Bearer <your_access_token>"

Chapter 29. Definitions

29.1. ApiError

Expand
NameDescriptionSchema

status
optional

Status code of the response.

integer

type
optional

Reference to the type of the error.

string

detail
optional

Details about the specific instance of the error.

string

title
optional

Unique error code to identify the type of error.

string

error_message
optional

Deprecated; alias for detail

string

error_type
optional

Deprecated; alias for detail

string

29.2. UserView

Expand
NameDescriptionSchema

verified
optional

Whether the user’s email address has been verified

boolean

anonymous
optional

true if this user data represents a guest user

boolean

email
optional

The user’s email address

string

avatar
optional

Avatar data representing the user’s icon

object

organizations
optional

Information about the organizations in which the user is a member

array of object

logins
optional

The list of external login providers against which the user has authenticated

array of object

can_create_repo
optional

Whether the user has permission to create repositories

boolean

preferred_namespace
optional

If true, the user’s namespace is the preferred namespace to display

boolean

29.3. ViewMirrorConfig

Expand
NameDescriptionSchema

is_enabled
optional

Used to enable or disable synchronizations.

boolean

external_reference
optional

Location of the external repository.

string

external_registry_username
optional

Username used to authenticate with external registry.

 

external_registry_password
optional

Password used to authenticate with external registry.

 

sync_start_date
optional

Determines the next time this repository is ready for synchronization.

string

sync_interval
optional

Number of seconds after next_start_date to begin synchronizing.

integer

robot_username
optional

Username of robot which will be used for image pushes.

string

root_rule
optional

A list of glob-patterns used to determine which tags should be synchronized.

object

external_registry_config
optional

 

object

29.4. ApiErrorDescription

Expand
NameDescriptionSchema

type
optional

A reference to the error type resource

string

title
optional

The title of the error. Can be used to uniquely identify the kind of error.

string

description
optional

A more detailed description of the error that may include help for fixing the issue.

string

Legal Notice

Copyright © Red Hat.
Except as otherwise noted below, the text of and illustrations in this documentation are licensed by Red Hat under the Creative Commons Attribution–Share Alike 3.0 Unported license . If you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, the Red Hat logo, JBoss, Hibernate, and RHCE are trademarks or registered trademarks of Red Hat, LLC. or its subsidiaries in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
XFS is a trademark or registered trademark of Hewlett Packard Enterprise Development LP or its subsidiaries in the United States and other countries.
The OpenStack® Word Mark and OpenStack logo are trademarks or registered trademarks of the Linux Foundation, used under license.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

Learn

Try, buy, & sell

Communities

About Red Hat Documentation

We help Red Hat users innovate and achieve their goals with our products and services with content they can trust. Explore our recent updates.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the Red Hat Blog.

About Red Hat

We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

Theme

© 2026 Red Hat
Back to top