You can use the Project Quay REST API, which is based on the OAuth 2.0 protocol, to manage repositories, images, permissions, and other registry resources. This reference documents endpoints, request and response schemas, authentication requirements, and error codes.

Project 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 Project Quay 2.0 differs from Project 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 Project 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

Authorization

oauth2_implicit

Scopes

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

Scope Description

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.

appspecifictokens

Manages app specific tokens for the current user.

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.

Name Description Schema

title

required

Friendly name to help identify the token

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"

listAppTokens

Lists the app specific tokens for the user.

GET /api/v1/user/apptoken

Authorizations: oauth2_implicit (user:admin)

Query parameters

Type Name Description Schema

query

expiring

optional

If true, only returns those tokens expiring soon

boolean

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getAppToken

Returns a specific app token for the user.

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

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

token_uuid

required

The uuid of the app specific token

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

revokeAppToken

Revokes a specific app token for the user.

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

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

token_uuid

required

The uuid of the app specific token

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

build

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

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

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

getRepoBuild

Returns information about a build.

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

Authorizations: oauth2_implicit (repo:read)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

cancelRepoBuild

Cancels a repository build.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

Type Name Description Schema

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.

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

getRepoBuilds

Get the list of repository builds.

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

Authorizations: oauth2_implicit (repo:read)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Query parameters

Type Name Description Schema

query

since

optional

Returns all builds since the given unix timecode

integer

query

limit

optional

The maximum number of builds to return

integer

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

discovery

API discovery information.

discovery

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

GET /api/v1/discovery

Authorizations: 

Query parameters

Type Name Description Schema

query

internal

optional

Whether to include internal APIs.

boolean

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

renewBootstrapToken

Rotate the programmatic bootstrap OAuth token.

POST /api/v1/bootstrap/renew

Renew the bootstrap token and write the new token value to BOOTSTRAP_TOKEN_PATH or the configured Kubernetes Secret. The previous bootstrap token is invalidated immediately. The response does not include the new token value; read it from the configured storage location after renewal.

This endpoint is available only when FEATURE_PROGRAMMATIC_BOOTSTRAP is true.

Authorizations: Bearer token (bootstrap token)

Request body

No request body.

Responses

HTTP Code Description Schema

200

Successful renewal

{"status": "rotated"}

401

Invalid, missing, or expired bootstrap token

403

Unauthorized access

Note

When the bootstrap token is expired, renewal is accepted only from localhost. On Kubernetes and OpenShift Container Platform, use port forwarding and ensure the request includes the X-Quay-Bootstrap-Renewal-Location: local header set by the ingress layer.

Example command

$ curl -X POST "https://<quay-server.example.com>/api/v1/bootstrap/renew" \
  -H "Authorization: Bearer <bootstrap_token>"
Example response
{"status": "rotated"}

error

Error details API.

getErrorDescription

Get a detailed description of the error.

GET /api/v1/error/{error_type}

Authorizations: 

Path parameters

Type Name Description Schema

path

error_type

required

The error code identifying the type of error.

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

globalmessages

Messages API.

createGlobalMessage

Create a message.

POST /api/v1/messages

Authorizations: oauth2_implicit (super:user)

Request body schema (application/json)

Create a new message

Name Description Schema

message

required

A single message

object

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"
        }
    }'

getGlobalMessages

Return a super users messages.

GET /api/v1/messages

Authorizations: 

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

deleteGlobalMessage

Delete a message.

DELETE /api/v1/message/{uuid}

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

uuid

required

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

logs

Access usage logs for organizations or repositories.

getAggregateUserLogs

Returns the aggregated logs for the current user.

GET /api/v1/user/aggregatelogs

Authorizations: oauth2_implicit (user:admin)

Query parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

exportUserLogs

Returns the aggregated logs for the current user.

POST /api/v1/user/exportlogs

Authorizations: oauth2_implicit (user:admin)

Query parameters

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"

listUserLogs

List the logs for the current user.

GET /api/v1/user/logs

Authorizations: oauth2_implicit (user:admin)

Query parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getAggregateOrgLogs

Gets the aggregated logs for the specified organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Query parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

exportOrgLogs

Exports the logs for the specified organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Query parameters

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"

listOrgLogs

List the logs for the specified organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Query parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getAggregateRepoLogs

Returns the aggregated logs for the specified repository.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Query parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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""

exportRepoLogs

Queues an export of the logs for the specified repository.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Query parameters

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"

listRepoLogs

List the logs for the specified repository.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Query parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

manifest

Manage the manifests of a repository.

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

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>

deleteManifestLabel

Deletes an existing label from a manifest.

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

Authorizations: oauth2_implicit (repo:write)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

addManifestLabel

Adds a new label into the tag manifest.

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

Authorizations: oauth2_implicit (repo:write)

Path parameters

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

listManifestLabels

List Manifest Labels.

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

Authorizations: oauth2_implicit (repo:read)

Path parameters

Type Name Description Schema

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

Type Name Description Schema

query

filter

optional

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

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

getRepoManifest

Get Repo Manifest.

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

Authorizations: oauth2_implicit (repo:read)

Path parameters

Type Name Description Schema

path

repository

required

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

string

path

manifestref

required

The digest of the manifest

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>

mirror

Mirror.

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

Type Name Description Schema

path

repository

required

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

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

path

repository

required

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

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getRepoMirrorConfig

Return the Mirror configuration for a given Repository.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

changeRepoMirrorConfig

Allow users to modifying the repository’s mirroring configuration.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Request body schema (application/json)

Update the repository mirroring configuration.

Name Description Schema

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

HTTP Code Description Schema

201

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>,
        "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>"
        }
    }'

createRepoMirrorConfig

Create a RepoMirrorConfig for a given Repository.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Request body schema (application/json)

Create the repository mirroring configuration.

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"
        }
    }'

getRepositoryMirrorHealth

Return health status for repository mirroring operations.

GET /api/v1/repository/mirror/health

Authorizations: oauth2_implicit (super:user for global queries; organization membership or user administration for namespace-scoped queries)

Returns HTTP 200 when mirroring is healthy and HTTP 503 when unhealthy.

This endpoint requires a fresh login. A validated OAuth or SSO token satisfies the check. A password-based browser session must be within FRESH_LOGIN_TIMEOUT (default: 10m). Robot accounts cannot call this endpoint.

Access control:

  • Without the namespace query parameter, the caller must be a superuser with full access, or a global read-only superuser.

  • With namespace, organization members can query their organization. For a user namespace, the caller must be that user or have user-admin permission. Superusers can query any namespace.

For a global summary without per-repository samples, superusers can also call GET /api/v1/superuser/mirror/health. See getSuperUserRepositoryMirrorHealth.

Query parameters

Type Name Description Schema

query

namespace

optional

Filter the health check to a specific namespace

string

query

detailed

optional

Include per-repository breakdown

boolean

query

limit

optional

Maximum repositories in the detailed response when detailed=true (default: 100, max: 1000)

integer

query

offset

optional

Offset into the sorted mirror list for paginated details (default: 0)

integer

Responses

HTTP Code Description Schema

200

Mirroring is healthy

object

401

Session required

403

Unauthorized access

404

Namespace not found

503

Mirroring is unhealthy

object

Example commands

Query health for a namespace that you can administer. Include detailed=true for a per-repository breakdown:

$ curl -X GET "https://<quay-server.example.com>/api/v1/repository/mirror/health?namespace=<orgname>&detailed=true" \
     -H "Authorization: Bearer <access_token>"

Query global mirror health as a superuser with full access:

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

Substitute an OAuth access token that includes the super:user scope for global queries. For namespace-scoped queries, use a token or fresh login session for an organization member or namespace administrator.

Example output
{
  "healthy": true,
  "workers": {
    "active": 1,
    "configured": 1,
    "status": "healthy"
  },
  "repositories": {
    "total": 0,
    "syncing": 0,
    "completed": 0,
    "failed": 0,
    "never_run": 0,
    "details": [],
    "pagination": {
      "limit": 100,
      "offset": 0,
      "has_more": false
    }
  },
  "tags_pending": 0,
  "last_check": "2026-07-16T20:11:54.820064Z",
  "issues": []
}

For metric names, example Prometheus queries, and health determination logic, see Monitoring repository mirroring.

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.

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

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

getOrgMirrorConfig

Get the organization-level mirror configuration.

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

Authorizations: oauth2_implicit (org:admin)

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

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

Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

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

HTTP Code Description Schema

200

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

deleteOrgMirrorConfig

Delete organization mirror configuration.

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

Authorizations: oauth2_implicit (org:admin)

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

capabilities

Registry capabilities API endpoint.

getRegistryCapabilities

Get registry capabilities.

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

GET /api/v1/registry/capabilities

Authorizations: 

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

namespacequota

Namespacequota.

listUserQuota

List User Quota.

GET /api/v1/user/quota

Authorizations: oauth2_implicit (user:admin)

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getOrganizationQuotaLimit

Get Organization Quota Limit.

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

Authorizations: 

Path parameters

Type Name Description Schema

path

quota_id

required

string

path

limit_id

required

string

path

orgname

required

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

changeOrganizationQuotaLimit

Change Organization Quota Limit.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

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

Name Description Schema

type

optional

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

string

threshold_percent

optional

Quota threshold, in percent of quota

integer

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>
         }'

deleteOrganizationQuotaLimit

Delete Organization Quota Limit.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

quota_id

required

string

path

limit_id

required

string

path

orgname

required

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

createOrganizationQuotaLimit

Create Organization Quota Limit.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

quota_id

required

string

path

orgname

required

string

Request body schema (application/json)

Description of a new organization quota limit

Name Description Schema

type

required

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

string

threshold_percent

required

Quota threshold, in percent of quota

integer

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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",
           "threshold_percent": 90
         }'

listOrganizationQuotaLimit

List Organization Quota Limit.

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

Authorizations: 

Path parameters

Type Name Description Schema

path

quota_id

required

string

path

orgname

required

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getUserQuotaLimit

Get User Quota Limit.

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

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

quota_id

required

string

path

limit_id

required

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

listUserQuotaLimit

List User Quota Limit.

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

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

quota_id

required

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getOrganizationQuota

Get Organization Quota.

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

Authorizations: 

Path parameters

Type Name Description Schema

path

quota_id

required

string

path

orgname

required

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

changeOrganizationQuota

Change Organization Quota.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

quota_id

required

string

path

orgname

required

string

Request body schema (application/json)

Description of a new organization quota

Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>
     }'

deleteOrganizationQuota

Delete Organization Quota.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

quota_id

required

string

path

orgname

required

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

createOrganizationQuota

Create a new organization quota.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

orgname

required

string

Request body schema (application/json)

Description of a new organization quota

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"
     }'

listOrganizationQuota

List Organization Quota.

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

Authorizations: 

Path parameters

Type Name Description Schema

path

orgname

required

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

getUserQuota

Get User Quota.

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

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

quota_id

required

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

namespacenotification

List, create, and manage namespace-level quota notifications.

createOrgNotification

Create Org Notification.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Request body schema (application/json)

Create a notification for an organization namespace

Name Description Schema

event

required

The event that triggers this notification. Options include quota_warning and quota_error. Warning-type quota limits trigger quota_warning notifications. Reject-type limits trigger quota_error notifications. Deleting a quota configuration automatically removes all associated quota_warning and quota_error notification rules for that namespace to prevent orphaned settings. Recreating a quota requires setting up new notification rules.

string

method

required

The notification delivery method. Options include email, slack, webhook, quay_notification, flowdock, and hipchat.

string

config

required

JSON configuration for the notification method. Configuration varies by method type. For the email method at the organization level, providing an empty object ("config": {}) is valid because recipient routing is handled server-side. Notifications are automatically routed to the organization’s contact_email if configured; otherwise, they are sent to all organization administrators. Unlike repository-level email notifications, no explicit email address is required in config.

object

eventConfig

required

JSON configuration for filtering which events trigger the notification.

object

title

optional

Optional user-friendly title for the notification.

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X POST \
-H "Authorization: Bearer <bearer_token>" \
-H "Content-Type: application/json" \
--data '{
    "event": "quota_warning",
    "method": "email",
    "config": {},
    "eventConfig": {}
}' \
https://<quay-server.example.com>/api/v1/organization/<orgname>/notifications

listOrgNotifications

List Org Notifications.

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

Authorizations: oauth2_implicit (org:admin or global read-only superuser)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

Example output

{
"notifications": [
    {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "title": "Quota Warning Alert",
    "event": "quota_warning",
    "method": "email",
    "config": {},
    "event_config": {},
    "number_of_failures": 0
    }
]
}

getOrgNotification

Get Org Notification.

GET /api/v1/organization/{orgname}/notifications/{uuid}

Authorizations: oauth2_implicit (org:admin or global read-only superuser)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

path

uuid

required

The UUID of the notification

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

Example output

{
"notifications": [
    {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "title": "Quota Warning Alert",
    "event": "quota_warning",
    "method": "email",
    "config": {},
    "event_config": {},
    "number_of_failures": 0
    }
]
}

deleteOrgNotification

Delete Org Notification.

DELETE /api/v1/organization/{orgname}/notifications/{uuid}

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

path

uuid

required

The uuid of the notification

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X DELETE \
-H "Authorization: Bearer <bearer_token>" \
https://<quay-server.example.com>/api/v1/organization/<orgname>/notifications/<uuid>

testOrgNotification

Test Org Notification.

POST /api/v1/organization/{orgname}/notifications/{uuid}/test

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

path

uuid

required

The uuid of the notification

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X POST \
-H "Authorization: Bearer <bearer_token>" \
https://<quay-server.example.com>/api/v1/organization/<orgname>/notifications/<uuid>/test

Example output

{}
Note

For email notifications, if an organization contact email is set, the test notification is routed to that address. Otherwise, email notifications default to all organization administrators. For other methods such as Slack or webhook, routing follows the notification config.

resetOrgNotificationFailures

Reset Org Notification Failures.

POST /api/v1/organization/{orgname}/notifications/{uuid}

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

path

uuid

required

The uuid of the notification

string

Responses

HTTP Code Description Schema

204

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X POST \
-H "Authorization: Bearer <bearer_token>" \
https://<quay-server.example.com>/api/v1/organization/<orgname>/notifications/<uuid>

createUserNotification

Create User Notification.

POST /api/v1/user/namespacenotifications

Authorizations: oauth2_implicit (user:admin)

Request body schema (application/json)

Create a notification for a user namespace

Name Description Schema

event

required

The event that triggers this notification. Options include quota_warning and quota_error. Warning-type quota limits trigger quota_warning notifications. Reject-type limits trigger quota_error notifications. Deleting a quota configuration automatically removes all associated quota_warning and quota_error notification rules for that namespace to prevent orphaned settings. Recreating a quota requires setting up new notification rules.

string

method

required

The notification delivery method. Options include email, slack, webhook, quay_notification, flowdock, and hipchat.

string

config

required

JSON configuration for the notification method. Configuration varies by method type. For the email method on a user namespace, providing an empty object ("config": {}) is valid because recipient routing is handled server-side and notifications are sent to the user account email address.

object

eventConfig

required

JSON configuration for filtering which events trigger the notification.

object

title

optional

Optional user-friendly title for the notification.

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X POST \
-H "Authorization: Bearer <bearer_token>" \
-H "Content-Type: application/json" \
--data '{
    "event": "quota_warning",
    "method": "email",
    "config": {},
    "eventConfig": {}
}' \
https://<quay-server.example.com>/api/v1/user/namespacenotifications

listUserNotifications

List User Notifications.

GET /api/v1/user/namespacenotifications

Authorizations: oauth2_implicit (user:admin)

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

Example output

{
"notifications": [
    {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "title": "Quota Warning Alert",
    "event": "quota_warning",
    "method": "email",
    "config": {},
    "event_config": {},
    "number_of_failures": 0
    }
]
}

getUserNamespaceNotification

Get User Namespace Notification.

GET /api/v1/user/namespacenotifications/{uuid}

Authorizations: oauth2_implicit (org:admin or global read-only superuser)

Path parameters

Type Name Description Schema

path

uuid

required

The UUID of the notification

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X GET \
-H "Authorization: Bearer <bearer_token>" \
-H "Accept: application/json" \
https://<quay-server.example.com>/api/v1/user/namespacenotifications/<uuid>

Example output

{
"notifications": [
    {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "title": "Quota Warning Alert",
    "event": "quota_warning",
    "method": "email",
    "config": {},
    "event_config": {},
    "number_of_failures": 0
    }
]
}

deleteUserNotification

Delete User Notification.

DELETE /api/v1/user/namespacenotifications/{uuid}

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

uuid

required

The uuid of the notification

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X DELETE \
-H "Authorization: Bearer <bearer_token>" \
https://<quay-server.example.com>/api/v1/user/namespacenotifications/<uuid>

testUserNamespaceNotification

Test User Namespace Notification.

POST /api/v1/user/namespacenotifications/{uuid}/test

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

uuid

required

The uuid of the notification

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

Example output

{}
Note

For email notifications, the test notification is routed to the user account email address. For other methods such as Slack or webhook, routing follows the notification config.

resetUserNamespaceNotificationFailures

Reset User Namespace Notification Failures.

POST /api/v1/user/namespacenotifications/{uuid}

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

path

uuid

required

The uuid of the notification

string

Responses

HTTP Code Description Schema

204

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X POST \
-H "Authorization: Bearer <bearer_token>" \
https://<quay-server.example.com>/api/v1/user/namespacenotifications/{uuid}

organization

Manage organizations, members and OAuth applications.

createOrganization

Create a new organization.

POST /api/v1/organization/

Authorizations: oauth2_implicit (user:admin)

Request body schema (application/json)

Description of a new organization.

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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/"

validateProxyCacheConfig

Validate Proxy Cache Config.

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

Authorizations: 

Path parameters

Type Name Description Schema

path

orgname

required

string

Request body schema (application/json)

Proxy cache configuration for an organization

Name Description Schema

upstream_registry

required

Name of the upstream registry that is to be cached

string

Responses

HTTP Code Description Schema

202

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"
      }'

getOrganizationCollaborators

List outside collaborators of the specified organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

path

client_id

required

The OAuth client ID

string

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

updateOrganizationApplication

Updates an application under this organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

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.

Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"
      }'

deleteOrganizationApplication

Deletes the application under this organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

client_id

required

The OAuth client ID

string

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

createOrganizationApplication

Creates a new application under this organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Request body schema (application/json)

Description of a new organization application.

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"
      }'

createOrganizationApplicationToken

Create a new OAuth API token for the specified organization application.

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

Create a scoped OAuth API token for automation workflows. The bearer token secret is returned only in this response.

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

path

client_id

required

The OAuth client ID of the organization application

string

Request body schema (application/json)

Name Description Schema

name

required

User-facing token name. Leading and trailing whitespace is trimmed before storage.

string

scope

required

Space- or comma-separated OAuth scope string, for example repo:read repo:write

string

expiration

optional

Token lifetime in seconds. Defaults to approximately 10 years when omitted.

integer

Example request body
{
  "name": "ci-job-token",
  "scope": "repo:read,repo:write",
  "expiration": 2592000
}

Responses

HTTP Code Description Schema

200

Successful creation

OAuth application token object including token

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X POST "https://<quay-server.example.com>/api/v1/organization/<orgname>/applications/<client_id>/tokens" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ci-job-token",
    "scope": "repo:read repo:write",
    "expiration": 2592000
  }'
Example response
{
  "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "ci-job-token",
  "scope": "repo:read repo:write",
  "expires_at": "2026-08-14T10:00:00Z",
  "created": "2026-07-15T10:00:00Z",
  "created_by": "quayadmin",
  "last_accessed": null,
  "token": "string..."
}

listOrganizationApplicationTokens

List OAuth API tokens for the specified organization application.

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

Return token metadata for the specified application. The bearer token secret is not included in list responses.

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

path

client_id

required

The OAuth client ID of the organization application

string

Query parameters

Name Description Schema

next_page

optional

Pagination token from a previous response

string

Responses

HTTP Code Description Schema

200

Successful invocation

Object with tokens array and optional next_page

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/applications/<client_id>/tokens" \
  -H "Authorization: Bearer <access_token>"
Example response
{
  "tokens": [
    {
      "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "name": "ci-job-token",
      "scope": "repo:read repo:write",
      "expires_at": "2026-08-14T10:00:00Z",
      "created": "2026-07-15T10:00:00Z",
      "created_by": "quayadmin",
      "last_accessed": null
    }
  ],
  "next_page": null
}

deleteOrganizationApplicationToken

Revoke a specific OAuth API token for the specified organization application.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

path

client_id

required

The OAuth client ID of the organization application

string

path

token_uuid

required

The UUID of the OAuth API token

string

Responses

HTTP Code Description Schema

204

Successful revocation

No content

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getOrganizationApplications

List the applications for the specified organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getProxyCacheConfig

Retrieves the proxy cache configuration of the organization.

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

Authorizations: 

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

deleteProxyCacheConfig

Delete proxy cache configuration for the organization.

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

Authorizations: 

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

createProxyCacheConfig

Creates proxy cache configuration for the organization.

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

Authorizations: 

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Request body schema (application/json)

Proxy cache configuration for an organization

Name Description Schema

upstream_registry

required

Name of the upstream registry that is to be cached

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"
      }'

getOrganizationMember

Retrieves the details of a member of the organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

membername

required

The username of the organization member

string

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

path

membername

required

The username of the organization member

string

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getOrganizationMembers

List the human members of the specified organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getOrganization

Get the details for the specified organization.

GET /api/v1/organization/{orgname}

Authorizations: 

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

changeOrganizationDetails

Change the details for the specified organization.

PUT /api/v1/organization/{orgname}

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Request body schema (application/json)

Description of updates for an existing organization

Name Description Schema

name

optional

The new name for the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

deleteAdminedOrganization

Deletes the specified organization.

DELETE /api/v1/organization/{orgname}

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getApplicationInformation

Get information on the specified application.

GET /api/v1/app/{client_id}

Authorizations: 

Path parameters

Type Name Description Schema

path

client_id

required

The OAuth client ID

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

permission

Manage repository permissions.

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

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getUserPermissions

Get the permission for the specified user.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

changeUserPermissions

Update the perimssions for an existing repository.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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.

Name Description Schema

role

required

Role to use for the user

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>

deleteUserPermissions

Delete the permission for the user.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>

getTeamPermissions

Fetch the permission for the specified team.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

changeTeamPermissions

Update the existing team permission.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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.

Name Description Schema

role

required

Role to use for the team

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

$ 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>"

deleteTeamPermissions

Delete the permission for the specified team.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

listRepoTeamPermissions

List all team permission.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

listRepoUserPermissions

List all user permissions.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>/

policy

Policy.

createOrganizationAutoPrunePolicy

Creates an auto-prune policy for the organization

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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/

listOrganizationAutoPrunePolicies

Lists the auto-prune policies for the organization

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getOrganizationAutoPrunePolicy

Fetches the auto-prune policy for the organization

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

policy_uuid

required

The unique ID of the policy

string

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

deleteOrganizationAutoPrunePolicy

Deletes the auto-prune policy for the organization

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

policy_uuid

required

The unique ID of the policy

string

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

updateOrganizationAutoPrunePolicy

Updates the auto-prune policy for the organization

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

204

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

createRepositoryAutoPrunePolicy

Creates an auto-prune policy for the repository

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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/

listRepositoryAutoPrunePolicies

Lists the auto-prune policies for the repository

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getRepositoryAutoPrunePolicy

Fetches the auto-prune policy for the repository

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

deleteRepositoryAutoPrunePolicy

Deletes the auto-prune policy for the repository

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

updateRepositoryAutoPrunePolicy

Updates the auto-prune policy for the repository

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

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

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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
  }'

listUserAutoPrunePolicies

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

GET /api/v1/user/autoprunepolicy/

Authorizations: oauth2_implicit (user:admin)

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

path

policy_uuid

required

The unique ID of the policy

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

path

policy_uuid

required

The unique ID of the policy

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

204

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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
  }'

prototype

Manage default permissions added to repositories.

updateOrganizationPrototypePermission

Update the role of an existing permission prototype.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

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

Name Description Schema

role

optional

Role that should be applied to the permission

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>

deleteOrganizationPrototypePermission

Delete an existing permission prototype.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

prototypeid

required

The ID of the prototype

string

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>

createOrganizationPrototypePermission

Create a new permission prototype.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Request body schema (application/json)

Description of a new prototype

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

getOrganizationPrototypePermissions

List the existing prototypes for this organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

referrers

List v2 API referrers

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.

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

repository

List, create and manage repositories.

createRepo

Create a new repository.

POST /api/v1/repository

Authorizations: oauth2_implicit (repo:create)

Request body schema (application/json)

Description of a new repository

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"

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

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

changeRepoVisibility

Change the visibility of a repository.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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.

Name Description Schema

visibility

required

Visibility which the repository will start with

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"

changeRepoState

Change the state of a repository.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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.

Name Description Schema

state

required

Determines whether pushes are allowed.

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

getRepo

Fetch the specified repository.

GET /api/v1/repository/{repository}

Authorizations: oauth2_implicit (repo:read)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Query parameters

Type Name Description Schema

query

includeTags

optional

Whether to include repository tags

boolean

query

includeStats

optional

Whether to include action statistics

boolean

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

updateRepo

Update the description in the specified repository.

PUT /api/v1/repository/{repository}

Authorizations: oauth2_implicit (repo:write)

Path parameters

Type Name Description Schema

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.

Name Description Schema

description

required

Markdown encoded description for the repository

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

deleteRepository

Delete a repository.

DELETE /api/v1/repository/{repository}

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

repositorynotification

List, create and manage repository events/notifications.

testRepoNotification

Queues a test notification for this repository.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

path

uuid

required

The UUID of the notification

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getRepoNotification

Get information for the specified notification.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

path

uuid

required

The UUID of the notification

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

deleteRepoNotification

Deletes the specified notification.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

path

uuid

required

The UUID of the notification

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

resetRepositoryNotificationFailures

Resets repository notification to 0 failures.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

path

uuid

required

The UUID of the notification

string

Responses

HTTP Code Description Schema

204

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

createRepoNotification

Create Repo Notification.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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/

listRepoNotifications

List the notifications for the specified repository.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

robot

Manage user and organization robot accounts.

getUserRobots

List the available robots for the user.

GET /api/v1/user/robots

Authorizations: oauth2_implicit (user:admin)

Query parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

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

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

regenerateOrgRobotToken

Regenerates the token for an organization robot.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

path

robot_shortname

required

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

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

regenerateUserRobotToken

Regenerates the token for a user’s robot.

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

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

robot_shortname

required

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

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

createOrgRobot

Create a new robot in the organization.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

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

Name Description Schema

description

optional

Optional text description for the robot

string

unstructured_metadata

optional

Optional unstructured metadata for the robot

object

Responses

HTTP Code Description Schema

201

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

deleteOrgRobot

Delete an existing organization robot.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getOrgRobots

List the organization’s robots.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

orgname

required

The name of the organization

string

Query parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getUserRobot

Returns the user’s robot with the specified name.

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

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

robot_shortname

required

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

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

createUserRobot

Create a new user robot with the specified name.

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

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

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

Name Description Schema

description

optional

Optional text description for the robot

string

unstructured_metadata

optional

Optional unstructured metadata for the robot

object

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

deleteUserRobot

Delete an existing robot.

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

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

robot_shortname

required

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

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getOrgRobotFederation

Manage federation configuration for a robot account within an organization.

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

Retrieve the federation configuration for the specified organization robot.

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

orgname + robot_shortname required

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

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

createOrgRobotFederation

Create a federation configuration for the specified organization robot.

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

Create or replace the federation configuration for the specified organization robot.

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

orgname + robot_shortname required

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

string

Request body schema (application/json)

Array of federation configuration entries for the robot.

Important

In Project Quay 3.18, create and update requests persist issuer and subject only. The optional audiences field is not stored from API requests, and the Project Quay v2 UI federation modal does not provide an audiences field. When audiences is present in stored federation configuration, Project Quay validates the token audience during federated robot token exchange. When it is absent, audience validation is skipped and Project Quay logs a deprecation warning.

Name Description Schema

issuer

required

Issuer URL of the external OIDC provider for this federation entry

string

subject

required

Subject (sub claim) of the external OIDC identity authorized for this robot

string

audiences

optional

List of acceptable token audience (aud claim) values for this federation entry. Reserved for future API support; not persisted by create or update requests in Project Quay 3.18.

array of strings

Example request body
[
  {
    "issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0",
    "subject": "<user-object-id>"
  }
]

Responses

HTTP Code Description Schema

201

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

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" \
  -d '[
    {
      "issuer": "https://keycloak-auth-realm.quayadmin.org/realms/quayrealm",
      "subject": "449e14f8-9eb5-4d59-a63e-b7a77c75f770"
    }
  ]'

Conduct searches against all registry context.

conductRepoSearch

Get a list of apps and repositories that match the specified query.

GET /api/v1/find/repositories

Authorizations: 

Query parameters

Type Name Description Schema

query

includeUsage

optional

Whether to include usage metadata

boolean

query

page

optional

The page.

integer

query

query

optional

The search query.

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X GET "https://quay-server.example.com/api/v1/find/repositories?query=<repo_name>&page=1&includeUsage=true" \
  -H "Authorization: Bearer <bearer_token>"

conductSearch

Get a list of entities and resources that match the specified query.

GET /api/v1/find/all

Authorizations: oauth2_implicit (repo:read)

Query parameters

Type Name Description Schema

query

query

optional

The search query.

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X GET "https://quay-server.example.com/api/v1/find/all?query=<mysearchterm>" \
  -H "Authorization: Bearer <bearer_token>"

getMatchingEntities

Get a list of entities that match the specified prefix.

GET /api/v1/entities/{prefix}

Authorizations: 

Path parameters

Type Name Description Schema

path

prefix

required

string

Query parameters

Type Name Description Schema

query

includeOrgs

optional

Whether to include orgs names.

boolean

query

includeTeams

optional

Whether to include team names.

boolean

query

namespace

optional

Namespace to use when querying for org entities.

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X GET "https://quay-server.example.com/api/v1/entities/<prefix>?includeOrgs=<true_or_false>&includeTeams=<true_or_false>&namespace=<namespace>" \
  -H "Authorization: Bearer <bearer_token>"

secscan

List and manage repository vulnerabilities and other security information.

getRepoManifestSecurity

Get Repo Manifest Security.

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

Authorizations: oauth2_implicit (repo:read)

Path parameters

Type Name Description Schema

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

Type Name Description Schema

query

vulnerabilities

optional

Include vulnerabilities informations

boolean

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

superuser

Superuser API.

getConfigDump

Returns the full configuration dump of the Quay instance.

GET /api/v1/superuser/config

Authorizations: oauth2_implicit (super:user)

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Response structure

The JSON response includes the following top-level keys:

Name Description Schema

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

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

Name Description Schema

username

required

The username of the user being created

string

email

optional

The email address of the user being created

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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/"

changeInstallUser

Updates information about the specified user.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

username

required

The username of the user being managed

string

Request body schema (application/json)

Description of updates for a user

Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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
  }'

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

Name Description Schema

username

required

The username of the user being deleted

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

listAllUsers

Returns a list of all users in the system.

GET /api/v1/superuser/users/

Authorizations: oauth2_implicit (super:user)

Query parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

listAllLogs

List the usage logs for the current system.

GET /api/v1/superuser/logs

Authorizations: oauth2_implicit (super:user)

Query parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

listAllOrganizations

List the organizations for the current system.

GET /api/v1/superuser/organizations

Authorizations: oauth2_implicit (super:user)

Query parameters

Type Name Description Schema

path

name

required

The name of the organization being managed

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

createServiceKey

Create Service Key.

POST /api/v1/superuser/keys

Authorizations: oauth2_implicit (super:user)

Request body schema (application/json)

Description of creation of a service key

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"

listServiceKeys

List Service Keys.

GET /api/v1/superuser/keys

Authorizations: oauth2_implicit (super:user)

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

query

expiring

optional

If true, only returns those tokens expiring soon

boolean

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"

changeUserQuotaSuperUser

Change User Quota Super User.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

namespace

required

string

path

quota_id

required

string

Request body schema (application/json)

Description of a new organization quota

Name Description Schema

limit_bytes

optional

Number of bytes the organization is allowed

integer

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>
  }'

deleteUserQuotaSuperUser

Delete User Quota Super User.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

namespace

required

string

path

quota_id

required

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

createUserQuotaSuperUser

Create User Quota Super User.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

namespace

required

string

Request body schema (application/json)

Description of a new organization quota

Name Description Schema

limit_bytes

required

Number of bytes the organization is allowed

integer

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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
  }'

listUserQuotaSuperUser

List User Quota Super User.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

namespace

required

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

changeOrganizationQuotaSuperUser

Change Organization Quota Super User.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

namespace

required

string

path

quota_id

required

string

Request body schema (application/json)

Description of a new organization quota

Name Description Schema

limit_bytes

optional

Number of bytes the organization is allowed

integer

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>
  }'

deleteOrganizationQuotaSuperUser

Delete Organization Quota Super User.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

namespace

required

string

path

quota_id

required

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

createOrganizationQuotaSuperUser

Create Organization Quota Super User.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

namespace

required

string

Request body schema (application/json)

Description of a new organization quota

Name Description Schema

limit_bytes

optional

Number of bytes the organization is allowed

integer

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>
      }'

listOrganizationQuotaSuperUser

List Organization Quota Super User.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

namespace

required

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

changeOrganization

Updates information about the specified organization.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

name

required

The name of the organization being managed

string

Request body schema (application/json)

Description of updates for an existing organization

Name Description Schema

name

optional

The new name for the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

$ curl -X PUT \
  -H "Authorization: Bearer <bearer_token>" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "<new_organization_name>"
      }' \
  "https://<quay_server>/api/v1/superuser/organizations/<organization_name>"

deleteOrganization

Deletes the specified organization.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

name

required

The name of the organizaton being managed

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

approveServiceKey

Approve Service Key.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

kid

required

The unique identifier for a service key

string

Request body schema (application/json)

Information for approving service keys

Name Description Schema

notes

optional

Optional approval notes

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

deleteServiceKey

Delete Service Key.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

kid

required

The unique identifier for a service key

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

updateServiceKey

Update Service Key.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

kid

required

The unique identifier for a service key

string

Request body schema (application/json)

Description of updates for a service key

Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

getServiceKey

Get Service Key.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

kid

required

The unique identifier for a service key

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

path

build_uuid

required

The UUID of the build

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getRepoBuildSuperUser

Returns information about a build.

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

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

build_uuid

required

The UUID of the build

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

path

build_uuid

required

The UUID of the build

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getRegistrySize

Get Registry Size.

GET /api/v1/superuser/registrysize/

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

namespace

required

string

Description of a image registry size

Name Description Schema

size_bytes*

optional

Number of bytes the organization is allowed

integer

last_ran

integer

queued

boolean

running

boolean

Responses

HTTP Code Description Schema

200

CREATED

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

postRegistrySize

Post Registry Size.

POST /api/v1/superuser/registrysize/

Authorizations: oauth2_implicit (super:user)

Path parameters

Type Name Description Schema

path

namespace

required

string

Request body schema (application/json)

Description of a image registry size

Name Description Schema

last_ran

integer

queued

boolean

running

boolean

Responses

HTTP Code Description Schema

201

CREATED

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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
  }'

getSuperUserRepositoryMirrorHealth

Return a global repository mirror health summary for superusers.

GET /api/v1/superuser/mirror/health

Authorizations: oauth2_implicit (super:user)

Returns HTTP 200 when mirroring is healthy and HTTP 503 when unhealthy.

This endpoint requires a fresh login. A validated OAuth or SSO token satisfies the check. A password-based browser session must be within FRESH_LOGIN_TIMEOUT (default: 10m).

The response is a cluster-wide summary without repository-identifying issue samples. For namespace-scoped details, use GET /api/v1/repository/mirror/health?namespace=<orgname>&detailed=true. See getRepositoryMirrorHealth.

Responses

HTTP Code Description Schema

200

Mirroring is healthy

object

401

Session required

403

Unauthorized access

503

Mirroring is unhealthy

object

Example command

$ curl -X GET "https://<quay-server.example.com>/api/v1/superuser/mirror/health" \
     -H "Authorization: Bearer <access_token>"

Substitute an OAuth access token that includes the super:user scope, or use a fresh superuser login session.

Example output
{
  "healthy": true,
  "workers": {
    "active": 1,
    "configured": 1,
    "status": "healthy"
  },
  "repositories": {
    "total": 0,
    "syncing": 0,
    "completed": 0,
    "failed": 0,
    "never_run": 0
  },
  "tags_pending": 0,
  "last_check": "2026-07-16T20:11:17.064697Z",
  "issues": []
}

tag

Manage the tags of a repository.

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

Type Name Description Schema

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

Name Description Schema

manifest_digest

required

If specified, the manifest digest that should be used

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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

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

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

201

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>

deleteFullTag

Delete the specified repository tag.

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

Authorizations: oauth2_implicit (repo:write)

Path parameters

Type Name Description Schema

path

repository

required

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

string

path

tag

required

The name of the tag

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

listRepoTags

List Repo Tags.

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

Authorizations: oauth2_implicit (repo:read)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Query parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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/

getTagPullStatistics

Get pull statistics for a specific tag.

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

Authorizations: oauth2_implicit (repo:read)

Path parameters

Type Name Description Schema

path

repository

required

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

string

path

tag

required

The name of the tag

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"

getManifestPullStatistics

Get pull statistics for a specific manifest.

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

Authorizations: oauth2_implicit (repo:read)

Path parameters

Type Name Description Schema

path

manifestref

required

The digest of the manifest

string

path

repository

required

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

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"

immutability_policy

Immutability policy.

createOrgImmutabilityPolicy

Create Org Immutability Policy.

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

Authorizations: oauth2_implicit (org:admin)

Request body schema (application/json)

The immutability policy configuration

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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}'

createRepositoryImmutabilityPolicy

Create Repository Immutability Policy.

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

Authorizations: oauth2_implicit (repo:admin)

Request body schema (application/json)

The immutability policy configuration

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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}'

deleteOrgImmutabilityPolicy

Delete Org Immutability Policy.

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

Authorizations: oauth2_implicit (org:admin)

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

deleteRepositoryImmutabilityPolicy

Delete Repository Immutability Policy.

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

Authorizations: oauth2_implicit (repo:admin)

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getOrgImmutabilityPolicy

Get Org Immutability Policy.

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

Authorizations: oauth2_implicit (org:admin)

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getRepositoryImmutabilityPolicy

Get Repository Immutability Policy.

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

Authorizations: oauth2_implicit (repo:admin)

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

listOrgImmutabilityPolicies

List Org Immutability Policies.

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

Authorizations: oauth2_implicit (org:admin)

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

listRepositoryImmutabilityPolicies

List Repository Immutability Policies.

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

Authorizations: oauth2_implicit (repo:admin)

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

updateOrgImmutabilityPolicy

Update Org Immutability Policy.

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

Authorizations: oauth2_implicit (org:admin)

Request body schema (application/json)

The immutability policy configuration

Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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}'

updateRepositoryImmutabilityPolicy

Update Repository Immutability Policy.

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

Authorizations: oauth2_implicit (repo:admin)

Request body schema (application/json)

The immutability policy configuration

Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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}'

team

Create, list and manage an organization’s teams.

getOrganizationTeamPermissions

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

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

Authorizations: 

Path parameters

Type Name Description Schema

path

teamname

required

The name of the team

string

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

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

Type Name Description Schema

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

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

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

Type Name Description Schema

path

teamname

required

The name of the team

string

path

orgname

required

The name of the organization

string

Query parameters

Type Name Description Schema

query

includePending

optional

Whether to include pending members

boolean

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

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

Type Name Description Schema

path

email

required

string

path

teamname

required

string

path

orgname

required

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

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

Type Name Description Schema

path

email

required

string

path

teamname

required

string

path

orgname

required

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

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

Type Name Description Schema

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

Name Description Schema

role

required

Org wide permissions that should apply to the team

string

description

optional

Markdown description for the team

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>

deleteOrganizationTeam

Delete the specified team.

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

Authorizations: oauth2_implicit (org:admin)

Path parameters

Type Name Description Schema

path

teamname

required

The name of the team

string

path

orgname

required

The name of the organization

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

trigger

Create, list and manage build triggers.

activateBuildTrigger

Activate the specified build trigger.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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)

Name Description Schema

config

required

Arbitrary json.

object

pull_robot

optional

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

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"
  }'

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

Type Name Description Schema

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

Type Name Description Schema

query

limit

optional

The maximum number of builds to return

integer

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

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

Type Name Description Schema

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

Name Description Schema

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

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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"
  }'

getBuildTrigger

Get information for the specified build trigger.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

updateBuildTrigger

Updates the specified build trigger.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

Name Description Schema

enabled

required

Whether the build trigger is enabled

boolean

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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}'

deleteBuildTrigger

Delete the specified build trigger.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

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

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

listBuildTriggers

List the triggers for the specified repository.

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

Authorizations: oauth2_implicit (repo:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

user

Manage the current user.

createStar

Star a repository.

POST /api/v1/user/starred

Authorizations: oauth2_implicit (repo:read)

Request body schema (application/json)

Name Description Schema

namespace

required

Namespace in which the repository belongs

string

repository

required

Repository name

string

Responses

HTTP Code Description Schema

201

Successful creation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"
      }'

listStarredRepos

List all starred repositories.

GET /api/v1/user/starred

Authorizations: oauth2_implicit (user:admin)

Query parameters

Type Name Description Schema

query

next_page

optional

The page token for the next page

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

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>"

getLoggedInUser

Get user information for the authenticated user.

GET /api/v1/user/

Authorizations: oauth2_implicit (user:read)

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

deleteStar

Removes a star from a repository.

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

Authorizations: oauth2_implicit (user:admin)

Path parameters

Type Name Description Schema

path

repository

required

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

string

Responses

HTTP Code Description Schema

204

Deleted

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

getUserInformation

Get user information for the specified user.

GET /api/v1/users/{username}

Authorizations: 

Path parameters

Type Name Description Schema

path

username

required

string

Responses

HTTP Code Description Schema

200

Successful invocation

400

Bad Request

401

Session required

403

Unauthorized access

404

Not found

Example command

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

Definitions

Shared schema definitions used by the API.

ApiError

Name Description Schema

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

UserView

Name Description Schema

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

ViewMirrorConfig

Name Description Schema

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

ApiErrorDescription

Name Description Schema

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

Additional resources