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 |
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 |
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 |
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 |
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
|
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 |
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 |
|
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 |
Example command
$ curl -X POST "https://<quay-server.example.com>/api/v1/bootstrap/renew" \
-H "Authorization: Bearer <bootstrap_token>"
{"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
namespacequery 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 |
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.
{
"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. |
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 ( |
string |
sync_interval required |
Seconds between syncs (minimum 60) |
integer |
sync_start_date required |
Initial sync time (ISO 8601 format, e.g. |
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 |
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 |
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 |
string |
method required |
The notification delivery method. Options include |
string |
config required |
JSON configuration for the notification method. Configuration varies by method
type. For the |
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 |
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 |
string |
method required |
The notification delivery method. Options include |
string |
config required |
JSON configuration for the notification method. Configuration varies by method
type. For the |
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 |
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 |
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 |
string |
expiration optional |
Token lifetime in seconds. Defaults to approximately 10 years when omitted. |
integer |
{
"name": "ci-job-token",
"scope": "repo:read,repo:write",
"expiration": 2592000
}
Responses
| HTTP Code | Description | Schema |
|---|---|---|
200 |
Successful creation |
OAuth application token object including |
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
}'
{
"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 |
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>"
{
"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 |
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 |
| Name | Description | Schema |
|---|---|---|
issuer required |
Issuer URL of the external OIDC provider for this federation entry |
string |
subject required |
Subject ( |
string |
audiences optional |
List of acceptable token audience ( |
array of strings |
[
{
"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"
}
]'
search
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 |
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 |
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
$ curl -X GET \
"https://quay-server.example.com/api/v1/superuser/apptokens" \
-H "Authorization: Bearer <superuser_access_token>" \
-H "Accept: application/json"
$ 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.
{
"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 |
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 |
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 |
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 |