The Project Quay application programming interface (API) provides a comprehensive, RESTful interface for managing and automating tasks within Project Quay. Designed around the OAuth 2.0 protocol, this API enables secure, fine-grained access to Project Quay resources, and allows administrators and users to perform such actions as creating repositories, managing images, setting permissions, and more.
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:
-
OAuth 2 access tokens and how they compare to traditional API tokens and Project Quay’s robot tokens
-
Generating an OAuth 2 access token
-
Best practices for token management
-
OAuth 2 access token capabilities
-
Using the Project Quay API
-
Project Quay API configuration examples
Introduction to Project Quay OAuth 2.0 tokens
The Project Quay OAuth 2 token system provides a secure, standards-based method for accessing Project Quay’s API and other relevant resources. The OAuth 2 token-based approach provides a secure method for handling authentication and authorization for complex environments. Compared to more traditional API tokens, Project Quay’s OAuth 2 token system offers the following enhancements:
-
Standards-based security, which adheres to the OAuth 2.0 protocol.
-
Revocable access by way of deleting the application in which the OAuth 2 token exists.
-
Fine-grained access control, which allows Project Quay administrators the ability to assign specific permissions to tokens.
-
Delegated access, which allows third-party applications and services to act on behalf of a user.
-
Future-proofing, which helps ensure that Project Quay remains compatible with other services, platforms, and integrations.
Project Quay primarily supports two types of tokens: OAuth 2 access tokens and robot account tokens. A third token type, an OCI referrers access token, that is required to list OCI referrers of a manifest under a repository, is also available when warranted.
The following chapters provide more details about each token type and how to generate each token type.
OAuth 2 access tokens
OAuth 2 access tokens (considered "API tokens" for Project Quay) enable user-authenticated access to the Project Quay API, suitable for applications that require user identity verification. These tokens are obtained through an OAuth 2 authorization process, where a Project Quay administrator generates a token on behalf of themselves or another user to access Project Quay API endpoints. OAuth 2 tokens authorize actions on API endpoints based on the scopes defined for the token.
Note
|
Although OAuth 2 tokens authorize actions on API endpoints based on the scopes defined for the token, access to the resources themselves is governed by Project Quay’s role-based access control (RBAC) mechanisms. Actions can be created on a resource, for example, a repository, provided that you have the proper role (Admin or Creator) to do so for that namespace. This is true even if the API token was granted the |
OAuth 2 access tokens can only be created by using the Project Quay UI; there is no way to create an OAuth 2 access token by using the CLI. When creating an OAuth 2 token, the following options can be selected for a token holder:
-
Administer Organization. When selected, allows the user to be able to administer organizations, including creating robots, creating teams, adjusting team membership, and changing billing settings.
-
Administer Repositories. When selected, provides the user administrator access to all repositories to which the granting user has access.
-
Create Repositories. When selected, provides the user the ability to create repositories in any namespaces that the granting user is allowed to create repositories.
-
View all visible repositories. When selected, provides the user the ability to view and pull all repositories visible to the granting user.
-
Read/Write to any accessible repositories. When selected, provides the user the ability to view, push and pull to all repositories to which the granting user has write access.
-
Super User Access. When selected, provides the user the ability to administer your installation including managing users, managing organizations and other features found in the superuser panel.
-
Administer User When selected, provides the user the ability to administer your account including creating robots and granting them permissions to your repositories.
-
Read User Information. When selected, provides the user the ability to read user information such as username and email address.
Token distributors should be mindful of the permissions that they are granting when generating a token on behalf of a user, and should have absolute trust in a user before granting such permissions as Administer organization, Super User Access, and Administer User. Additionally, the access token is only revealed at the time of creation; they cannot be listed from the CLI, nor can they be found on the Project Quay UI. If an access token is lost or forgotten, a new token must be created; a token cannot be recovered.
OAuth 2 access tokens are passed as a Bearer
token in the Authorization
header of an API call and, as a result, are used to provide authentication and authorization to the defined API endpoint, such as an image tag, a repository, an organization, and so on.
The API is available from the /api/v1
endpoint of your Project Quay host. For example, https://<quay-server.example.com>/api/v1
. It allows users to connect to endpoints through their browser to GET
, POST
, DELETE
, and PUT
Project Quay settings by enabling the Swagger UI. The API can be accessed by applications that make API calls and use OAuth tokens, and it sends and receives data as JSON.
With Project Quay, there is currently no way to rotate or to set an expiration time on an OAuth 2 access token, and the token lifespan is 10 years. Tokens can be deleted by deleting the applications in which they were created in the event that they are compromised, however, this deletes all tokens that were made within that specific application.
Note
|
In practice, Project Quay administrators could create a new OAuth application on the Applications page of their organization each time they wanted to create a new OAuth token for a user. This would ensure that a single application is not responsible for all OAuth tokens. As a result, in the event that a user’s token is compromised, the administrator would delete the application of the compromised token. This would help avoid disruption for other users whose tokens might be part of the same application. |
The following sections shows you how to generate and reassign an OAuth 2 access token.
Creating an OAuth 2 access token
With Project Quay, you must create an OAuth 2 access token before you can access the API endpoints of your organization. OAuth 2 access token can only be generated by using the Project Quay UI; the CLI cannot be used to generate an OAuth 2 access token.
Use the following procedure to create an OAuth2 access token.
-
You have logged in to Project Quay as an administrator.
-
You have created an OAuth 2 application.
-
On the main page, select an Organization.
-
In the navigation pane, select Applications.
-
Click the name of your application, for example, Test application.
-
In the navigation pane, select Generate Token.
-
Check the boxes for the following options:
-
Administer Organization. When selected, allows the user to be able to administer organizations, including creating robots, creating teams, adjusting team membership, and changing billing settings.
-
Administer Repositories. When selected, provides the user administrator access to all repositories to which the granting user has access.
-
Create Repositories. When selected, provides the user the ability to create repositories in any namespaces that the granting user is allowed to create repositories.
-
View all visible repositories. When selected, provides the user the ability to view and pull all repositories visible to the granting user.
-
Read/Write to any accessible repositories. When selected, provides the user the ability to view, push and pull to all repositories to which the granting user has write access.
-
Super User Access. When selected, provides the user the ability to administer your installation including managing users, managing organizations and other features found in the superuser panel.
-
Administer User When selected, provides the user the ability to administer your account including creating robots and granting them permissions to your repositories.
-
Read User Information. When selected, provides the user the ability to read user information such as username and email address.
-
-
Click Generate Access Token. You are redirected to a new page.
-
Review the permissions that you are allowing, then click Authorize Application. Confirm your decision by clicking Authorize Application.
-
You are redirected to the Access Token page. Copy and save the access token.
ImportantThis is the only opportunity to copy and save the access token. It cannot be reobtained after leaving this page.
Reassigning an OAuth access token
Organization administrators can assign OAuth API tokens to be created by other user’s with specific permissions. This allows the audit logs to be reflected accurately when the token is used by a user that has no organization administrative permissions to create an OAuth API token.
Note
|
The following procedure only works on the current Project Quay UI. It is not currently implemented in the Project Quay v2 UI. |
-
You are logged in as a user with organization administrative privileges, which allows you to assign an OAuth API token.
NoteOAuth API tokens are used for authentication and not authorization. For example, the user that you are assigning the OAuth token to must have the
Admin
team role to use administrative API endpoints. For more information, see Managing access to repositories.
-
Optional. If not already, update your Project Quay
config.yaml
file to include theFEATURE_ASSIGN_OAUTH_TOKEN: true
field:# ... FEATURE_ASSIGN_OAUTH_TOKEN: true # ...
-
Optional. Restart your Project Quay registry.
-
Log in to your Project Quay registry as an organization administrator.
-
Click the name of the organization in which you created the OAuth token for.
-
In the navigation pane, click Applications.
-
Click the proper application name.
-
In the navigation pane, click Generate Token.
-
Click Assign another user and enter the name of the user that will take over the OAuth token.
-
Check the boxes for the desired permissions that you want the new user to have. For example, if you only want the new user to be able to create repositories, click Create Repositories.
ImportantPermission control is defined by the team role within an organization and must be configured regardless of the options selected here. For example, the user that you are assigning the OAuth token to must have the
Admin
team role to use administrative API endpoints.Solely checking the Super User Access box does not actually grant the user this permission. Superusers must be configured via the
config.yaml
file and the box must be checked here. -
Click Assign token. A popup box appears that confirms authorization with the following message and shows you the approved permissions:
This will prompt user <username> to generate a token with the following permissions: repo:create
-
Click Assign token in the popup box. You are redirected to a new page that displays the following message:
Token assigned successfully
-
After reassigning an OAuth token, the assigned user must accept the token to receive the bearer token, which is required to use API endpoints. Request that the assigned user logs into the Project Quay registry.
-
After they have logged in, they must click their username under Users and Organizations.
-
In the navigation pane, they must click External Logins And Applications.
-
Under Authorized Applications, they must confirm the application by clicking Authorize Application. They are directed to a new page where they must reconfirm by clicking Authorize Application.
-
They are redirected to a new page that reveals their bearer token. They must save this bearer token, as it cannot be viewed again.
Deleting an OAuth 2 access token
Because OAuth 2 access tokens are created through the OAuth application, they cannot be rotated or renewed. In the event that a token is compromised, or you need to delete a token, you must deleted its associated application through the Project Quay UI.
Important
|
Deleting an application deletes all tokens that were made within that specific application. Use with caution. |
-
You have created an OAuth 2 access token.
-
On the Project Quay UI, click the name of the organization hosting the application. Then, in the navigation pane, click Applications.
-
Click the application name, for example, Test application.
-
In the navigation pane, click Delete Application. You are redirected to a new page. Click Delete application and confirm your decision.
Robot account tokens
Robot account tokens are password-type credentials used to access a Project Quay registry via normal Docker v2 endpoints; these are defined as tokens on the UI because the password itself is encrypted.
Robot account tokens are persistent tokens designed for automation and continuous integration workflows. By default, Project Quay’s robot account tokens do not expire and do not require user interaction, which makes robot accounts ideal for non-interactive use cases.
Robot account tokens are automatically generated at the time of a robot’s creation and are non-user specific; that is, they are connected to the user and organization namespace where where they are created. for example, a robot named project_tools+<robot_name>
is associated with the project_tools
namespace.
Robot account tokens provide access without needing a user’s personal credentials. How the robot account is configured, for example, with one of READ
, WRITE
, or ADMIN
permissions, ultimately defines the actions that the robot account can take.
Because robot account tokens are persistent and do not expire by default, they are ideal for automated workflows that require consistent access to Project Quay without manual renewal. Despite this, robot account tokens can be easily re-generated by using the the UI. They can also be regenerated by using the proper API endpoint via the CLI. To enhance the security of your Project Quay deployment, administrators should regularly refresh robot account tokens. Additionally, with the keyless authentication with robot accounts feature, robot account tokens can be exchanged for external OIDC tokens and leveraged so that they only last one hour, enhancing the security of your registry.
When a namespace gets deleted, or when the robot account is deleted itself, they are garbage collected when the collector is scheduled to run.
The following section shows you how to use the API to re-generate a robot account token for organization robots and user robots.
Regenerating a robot account token by using the Project Quay UI
Use the following procedure to regenerate a robot account token by using the Project Quay UI.
-
You have logged into Project Quay.
-
Click the name of an Organization.
-
In the navigation pane, click Robot accounts.
-
Click the name of your robot account, for example, testorg3+test.
-
Click Regenerate token in the popup box.
Regenerating a robot account token by using the Project Quay API
Use the following procedure to regenerate a robot account token using the Project Quay API.
-
You have Created an OAuth access token.
-
You have set
BROWSER_API_CALLS_XHR_ONLY: false
in yourconfig.yaml
file.
-
Enter the following command to regenerate a robot account token for an organization using the
POST /api/v1/organization/{orgname}/robots/{robot_shortname}/regenerate
endpoint:$ curl -X POST \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/organization/<orgname>/robots/<robot_shortname>/regenerate"
Example output{"name": "test-org+test", "created": "Fri, 10 May 2024 17:46:02 -0000", "last_accessed": null, "description": "", "token": "<example_secret>"}
-
Enter the following command to regenerate a robot account token for the current user with the
POST /api/v1/user/robots/{robot_shortname}/regenerate
endpoint:$ curl -X POST \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>/regenerate"
Example output
{"name": "quayadmin+test", "created": "Fri, 10 May 2024 14:12:11 -0000", "last_accessed": null, "description": "", "token": "<example_secret>"}
OCI referrers OAuth access token
In some cases, depending on the features that your Project Quay deployment is configured to use, you might need to leverage an OCI referrers OAuth access token. OCI referrers OAuth access tokens are used to list OCI referrers of a manifest under a repository, and uses a curl
command to make a GET
request to the Project Quay v2/auth
endpoint.
These tokens are obtained via basic HTTP authentication, wherein the user provides a username and password encoded in Base64 to authenticate directly with the v2/auth
API endpoint. As such, they are based directly on the user’s credentials aod do not follow the same detailed authorization flow as OAuth 2, but still allow a user to authorize API requests.
OCI referrers OAuth access tokens do not offer scope-based permissions and do not expire. They are solely used to list OCI referrers of a manifest under a repository.
Additional resource
Creating an OCI referrers OAuth access token
This OCI referrers OAuth access token is used to list OCI referrers of a manifest under a repository.
-
Update your
config.yaml
file to include theFEATURE_REFERRERS_API: true
field. For example:# ... FEATURE_REFERRERS_API: true # ...
-
Enter the following command to Base64 encode your credentials:
$ echo -n '<username>:<password>' | base64
Example outputabcdeWFkbWluOjE5ODlraWROZXQxIQ==
-
Enter the following command to use the base64 encoded string and modify the URL endpoint to your Project Quay server:
$ curl --location '<quay-server.example.com>/v2/auth?service=<quay-server.example.com>&scope=repository:quay/listocireferrs:pull,push' --header 'Authorization: Basic <base64_username:password_encode_token>' -k | jq
Example output{ "token": "<example_secret> }
Enabling and using the Project Quay API
By leveraging the Project Quay API, you can streamline container registry management, automate tasks, and integrate Project Quay’s functionalities into your existing workflow. This can improve efficiency, offer enhanced flexibility (by way of repository management, user management, user permissions, image management, and so on), increase the stability of your organization, repository, or overall deployment, and more.
The following sections explain how to enable and use the Project Quay API.
Configuring Project Quay to accept API calls
Prior to using the Project Quay API, you must disable BROWSER_API_CALLS_XHR_ONLY
in your config.yaml
file. This allows you to avoid such errors as API calls must be invoked with an X-Requested-With header if called from a browser
.
-
In your Project Quay
config.yaml
file, setBROWSER_API_CALLS_XHR_ONLY
tofalse
. For example:# ... BROWSER_API_CALLS_XHR_ONLY: false # ...
-
Restart your Project Quay deployment.
Using the Project Quay API
After you have created an application and generated an OAuth 2 access token with the desired settings, you can pass in the access token to GET
, PUT
, POST
, or DELETE
settings by using the API from the CLI. Generally, a Project Quay API command looks similar to the following example:
$ curl -X GET -H "Authorization: Bearer <your_access_token>" (1)
https://<quay-server.example.com>/api/v1/<example>/<endpoint>/ (2)
-
The OAuth 2 access token that was generated through the Project Quay UI.
-
The URL of your Project Quay deployment and the desired API endpoint.
All Project Quay APIs are documented in the Application Programming Interface (API) chapter. Understanding how they are documented is crucial to successful invocation. Take, for example, the following entry for the createAppToken
API endpoint:
*createAppToken* (1)
Create a new app specific token for user. (2)
*POST /api/v1/user/apptoken* (3)
**Authorizations: **oauth2_implicit (**user:admin**) (4)
Request body schema (application/json)
*Path parameters* (5)
Name: **title**
Description: Friendly name to help identify the token.
Schema: string
*Responses* (6)
|HTTP Code|Description |Schema
|201 |Successful creation |
|400 |Bad Request |<<_apierror,ApiError>>
|401 |Session required |<<_apierror,ApiError>>
|403 |Unauthorized access |<<_apierror,ApiError>>
|404 |Not found |<<_apierror,ApiError>>
|===
-
The name of the API endpoint.
-
A brief description of the API endpoint.
-
The API endpoint used for invocation.
-
The authorizations required to use the API endpoint.
-
The available paths to be used with the API endpoint. In this example,
title
is the only path to be used with thePOST /api/v1/user/apptoken
endpoint. -
The API responses for this endpoint.
In order to use an API endpoint, you pass in your access token and then include the appropriate fields depending on your needs. The following procedure shows you how to use the POST /api/v1/user/apptoken
endpoint.
-
You have access to the Project Quay API, which entails having already created an OAuth 2 access token.
-
You have set
BROWSER_API_CALLS_XHR_ONLY: false
in yourconfig.yaml
file.
-
Create a user application by entering the
POST /api/v1/user/apptoken
API call:$ curl -X POST \ -H "Authorization: Bearer <access_token>" (1) -H "Content-Type: application/json" \ -d '{ "title": "MyAppToken" (2) }' \ "http://quay-server.example.com/api/v1/user/apptoken" (3)
-
The Oauth access token.
-
The name of your application token.
-
The URL of your Project Quay deployment appended with the
/api/v1/user/apptoken
endpoint.Example output{"token": {"uuid": "6b5aa827-cee5-4fbe-a434-4b7b8a245ca7", "title": "MyAppToken", "last_accessed": null, "created": "Wed, 08 Jan 2025 19:32:48 -0000", "expiration": null, "token_code": "K2YQB1YO0ABYV5OBUYOMF9MCUABN12Y608Q9RHFXBI8K7IE8TYCI4WEEXSVH1AXWKZCKGUVA57PSA8N48PWED9F27PXATFUVUD9QDNCE9GOT9Q8ACYPIN0HL"}}
-
-
On the Project Quay UI, click your username in the navigation pane → Account Settings. The name of your application appears under the Docker CLI and other Application Tokens heading. For example:
Automating Project Quay processes by using the API
With the API, Project Quay administrators and users with access to the API can automate repetitive tasks such as repository management or image pruning. The following example shows you how you might use a Python script and a cron job to to automate image pruning.
-
You have access to the Project Quay API, which entails having already created an OAuth 2 access token.
-
You have set
BROWSER_API_CALLS_XHR_ONLY: false
in yourconfig.yaml
file. -
You have installed the Python
requests
library using. -
You have enabled cron jobs on your machine.
-
Create a Python script that executes an API command. The following example is used to prune images using the
DELETE /api/v1/repository/{repository}/tag/{tag}
API endpoint.example.py fileimport requests (1) # Hard-coded values API_BASE_URL = "http://<quay-server.example.com>/api/v1" (2) ACCESS_TOKEN = "<access_token>" (3) NAMESPACE = "<namespace_name>" (4) REPO_NAME = "<repository_name>" (5) TAG = "<tag_name>" (6) def delete_image_tag(): # Construct the full API URL for deleting the tag url = f"{API_BASE_URL}/repository/{NAMESPACE}/{REPO_NAME}/tag/{TAG}" headers = { "Authorization": f"Bearer {ACCESS_TOKEN}", "Content-Type": "application/json" } # Send the DELETE request to the API response = requests.delete(url, headers=headers) # Check the response and print appropriate messages if response.status_code == 200: print("Tag deleted successfully") else: print("Failed to delete tag:", response.json()) # Execute the function delete_image_tag()
-
Includes the
import
library in your Python code. -
The URL of your registry appended with
/api/v1
. -
Your OAuth 2 access token.
-
The namespace that holds the image tag.
-
The repository that holds the image tag.
-
The tag name of the image.
-
-
Save the script as
prune_images.py
. -
Create a cron job that automatically runs the script:
-
Open the crontab editor by running the following command:
$ crontab -e
-
In the editor, add the cron job for running the script. The following example runs the script every minute:
* * * * * sudo python /path/to/prune_images.py >> /var/log/prune_images.log 2>&1
-
Project Quay API examples
The remainder of this chapter provides Project Quay API examples for the features in which they are available.
Managing a user application by using the API
Project Quay users can create, list information about, and delete a user application that can be used as an alternative to using your password for Docker, Podman, or other service providers. User application tokens work like your username and password, but are encrypted and do not provide any information to third parties regarding who is accessing Project Quay.
Note
|
After creation via the CLI, the user application token is listed under User Settings of the Project Quay UI. Note that this differs from an application token that is created under user settings, and should be considered a different application entirely. |
Use the following procedure to create a user application token.
-
You have created an OAuth 2 access token.
-
Create a user application by entering the
POST /api/v1/user/apptoken
API call:$ 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"
Example output{"token": {"uuid": "6b5aa827-cee5-4fbe-a434-4b7b8a245ca7", "title": "MyAppToken", "last_accessed": null, "created": "Wed, 08 Jan 2025 19:32:48 -0000", "expiration": null, "token_code": "K2YQB1YO0ABYV5OBUYOMF9MCUABN12Y608Q9RHFXBI8K7IE8TYCI4WEEXSVH1AXWKZCKGUVA57PSA8N48PWED9F27PXATFUVUD9QDNCE9GOT9Q8ACYPIN0HL"}}
-
You can obtain information about your application, including when the application expires, by using the
GET /api/v1/user/apptoken
command. For example:$ curl -X GET \ -H "Authorization: Bearer <access_token>" \ "http://quay-server.example.com/api/v1/user/apptoken"
{"tokens": [{"uuid": "6b5aa827-cee5-4fbe-a434-4b7b8a245ca7", "title": "MyAppToken", "last_accessed": null, "created": "Wed, 08 Jan 2025 19:32:48 -0000", "expiration": null}], "only_expiring": null}
-
You can obtain information about a specific user application by entering the
GET /api/v1/user/apptoken/{token_uuid}
command:$ curl -X GET \ -H "Authorization: Bearer <access_token>" \ "http://quay-server.example.com/api/v1/user/apptoken/<token_uuid>"
Example output{"token": {"uuid": "6b5aa827-cee5-4fbe-a434-4b7b8a245ca7", "title": "MyAppToken", "last_accessed": null, "created": "Wed, 08 Jan 2025 19:32:48 -0000", "expiration": null, "token_code": "K2YQB1YO0ABYV5OBUYOMF9MCUABN12Y608Q9RHFXBI8K7IE8TYCI4WEEXSVH1AXWKZCKGUVA57PSA8N48PWED9F27PXATFUVUD9QDNCE9GOT9Q8ACYPIN0HL"}}
-
You can delete or revoke a user application token by using the
DELETE /api/v1/user/apptoken/{token_uuid}
endpoint:$ curl -X DELETE \ -H "Authorization: Bearer <access_token>" \ "http://quay-server.example.com/api/v1/user/apptoken/<token_uuid>"
This command does not return output in the CLI. You can return a list of tokens by entering one of the aforementioned commands.
Discovering Project Quay API endpoints
Project Quay API endpoints are discoverable by using the API.
Use the following procedure to discover available API endpoints.
-
You have created an OAuth 2 access token.
-
Enter the following
GET /api/v1/discovery
command to list all of the API endpoints available in the swagger API format:$ curl -X GET "https://<quay-server.example.com>/api/v1/discovery?query=true" \ -H "Authorization: Bearer <access_token>"
Example output--- : "Manage the tags of a repository."}, {"name": "team", "description": "Create, list and manage an organization's teams."}, {"name": "trigger", "description": "Create, list and manage build triggers."}, {"name": "user", "description": "Manage the current user."}, {"name": "userfiles", "description": ""}]} ---
Obtaining Project Quay API error details
Project Quay API error details are discoverable by using the API.
Use the following procedure to discover error details.
-
You have created an OAuth 2 access token.
-
You can obtain error details of the API by entering the
GET /api/v1/error/{error_type}
endpoint. Note that you must include one of the following error codes:HTTP Code Description Schema 200
Successful invocation
400
Bad Request
401
Session required
403
Unauthorized access
404
Not found
$ curl -X GET "https://<quay-server.example.com>/api/v1/error/<error_type>" \ -H "Authorization: Bearer <access_token>"
Example outputcurl: (7) Failed to connect to quay-server.example.com port 443 after 0 ms: Couldn't connect to server
Global messages
Global messages can be created, obtained, or deleted by using the Project Quay API. Use the following procedure to create, obtain, or delete a global message.
-
You have created an OAuth 2 access token.
-
Create a message by using the
POST /api/v1/message
endpoint:$ 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" } }'
This command does not return output.
-
Use the
GET /api/v1/messages
command to return the list of global messages:$ curl -X GET "https://<quay-server.example.com>/api/v1/messages" \ -H "Authorization: Bearer <access_token>"
Example output{"messages": [{"uuid": "ecababd4-3451-4458-b5db-801684137444", "content": "Hi", "severity": "info", "media_type": "text/plain"}]}
-
Delete the global message by using the
DELETE /api/v1/message/{uuid}
endpoint:$ curl -X DELETE "https://<quay-server.example.com>/api/v1/message/<uuid>" \ -H "Authorization: Bearer <access_token>"
This command does not return output.
Viewing usage logs by using the API
Logs can be viewed by Organization or repository by using the API. They can also be aggregated (grouped), or listed with more detailed. Logs can also be viewed by user, a specific date range, or by page.
Viewing aggregated logs
Aggregated logs can be viewed by Organization, repository, a specific user, or the current user. You can also pass in optional commands like performer
, starttime/endtime
, and next_page
to filter results.
-
You have Created an OAuth access token.
-
You have set
BROWSER_API_CALLS_XHR_ONLY: false
in yourconfig.yaml
file.
-
Use the
GET /api/v1/user/aggregatelogs
API endpoint to return the aggregated (or grouped) logs for the current user:$ curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ "https://<quay-server.example.com>/api/v1/user/aggregatelogs"
Example output{"aggregated": [{"kind": "create_tag", "count": 1, "datetime": "Tue, 18 Jun 2024 00:00:00 -0000"}, {"kind": "manifest_label_add", "count": 1, "datetime": "Tue, 18 Jun 2024 00:00:00 -0000"}, {"kind": "push_repo", "count": 2, "datetime": "Tue, 18 Jun 2024 00:00:00 -0000"}, {"kind": "revert_tag", "count": 1, "datetime": "Tue, 18 Jun 2024 00:00:00 -0000"}]}
You can also pass in the
performer
andstarttime/endtime
queries to obtain aggregated logs for a specific user between a specific time period. For example:$ 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>"
-
Aggregated logs can also be viewed by Organization by using the
GET /api/v1/organization/{orgname}/aggregatelogs
. For example:$ curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ "<quay-server.example.com>/api/v1/organization/{orgname}/aggregatelogs"
-
Aggregated logs can also be viewed by repository by using the
GET /api/v1/repository/{repository}/aggregatelogs
command. The following example includes thestarttime/endtime
fields:$ 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""
Viewing detailed logs
Detailed logs can be viewed by Organization, repository, a specific user, or the current user. You can also pass in optional fields like performer
, starttime/endtime
, and next_page
to filter results.
-
Use the
GET /api/v1/user/logs
API endpoint to return a list of log entries for a user. For example:$ curl -X GET -H "Authorization: Bearer <bearer_token>" -H "Accept: application/json" "<quay-server.example.com>/api/v1/user/logs"
You can also pass in the
performer
andstartime/endtime
queries to obtain logs for a specific user between a specific time period. For example:$ curl -X GET -H "Authorization: Bearer <bearer_token>" -H "Accept: application/json" "http://quay-server.example.com/api/v1/user/logs?performer=quayuser&starttime=01/01/2024&endtime=06/18/2024"
Example output--- {"start_time": "Mon, 01 Jan 2024 00:00:00 -0000", "end_time": "Wed, 19 Jun 2024 00:00:00 -0000", "logs": [{"kind": "revert_tag", "metadata": {"username": "quayuser", "repo": "busybox", "tag": "test-two", "manifest_digest": "sha256:57583a1b9c0a7509d3417387b4f43acf80d08cdcf5266ac87987be3f8f919d5d"}, "ip": "192.168.1.131", "datetime": "Tue, 18 Jun 2024 18:59:13 -0000", "performer": {"kind": "user", "name": "quayuser", "is_robot": false, "avatar": {"name": "quayuser", "hash": "b28d563a6dc76b4431fc7b0524bbff6b810387dac86d9303874871839859c7cc", "color": "#17becf", "kind": "user"}}}, {"kind": "push_repo", "metadata": {"repo": "busybox", "namespace": "quayuser", "user-agent": "containers/5.30.1 (github.com/containers/image)", "tag": "test-two", "username": "quayuser", } ---
-
Use the
GET /api/v1/organization/{orgname}/logs
endpoint to return logs for a specified organization:$ curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ "http://<quay-server.example.com>/api/v1/organization/{orgname}/logs"
-
Use the
GET /api/v1/repository/{repository}/logs
endpoint to return logs for a specified repository:$ curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ "http://<quay-server.example.com>/api/v1/repository/{repository}/logs"
Exporting logs by using the API
Detailed logs can be exported to a callback URL or to an email address.
-
You have Created an OAuth access token.
-
You have set
BROWSER_API_CALLS_XHR_ONLY: false
in yourconfig.yaml
file.
-
Use the
POST /api/v1/user/exportlogs
endpoint to export logs for the current user:$ 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"
Example output{"export_id": "6a0b9ea9-444c-4a19-9db8-113201c38cd4"}
-
Use the
POST /api/v1/organization/{orgname}/exportlogs
endpoint to export logs for an Organization:$ 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"
-
Use the
POST /api/v1/repository/{repository}/exportlogs
endpoint to export logs for a repository:$ 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"
Adding and managing labels by using the API
Project Quay administrators can add and manage labels for tags with the API by using the following procedure.
-
You have Created an OAuth access token.
-
You have set
BROWSER_API_CALLS_XHR_ONLY: false
in yourconfig.yaml
file.
-
Use the
GET /api/v1/repository/{repository}/manifest/{manifestref}
command to retrieve the details of a specific manifest in a repository:$ curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>
-
Use the
GET /api/v1/repository/{repository}/manifest/{manifestref}/labels
command to retrieve a list of labels for a specific manifest:$ curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>/labels
Example output{"labels": [{"id": "e9f717d2-c1dd-4626-802d-733a029d17ad", "key": "org.opencontainers.image.url", "value": "https://github.com/docker-library/busybox", "source_type": "manifest", "media_type": "text/plain"}, {"id": "2d34ec64-4051-43ad-ae06-d5f81003576a", "key": "org.opencontainers.image.version", "value": "1.36.1-glibc", "source_type": "manifest", "media_type": "text/plain"}]}
-
Use the
GET /api/v1/repository/{repository}/manifest/{manifestref}/labels/{labelid}
command to obtain information about a specific manifest:$ 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>
Example output{"id": "e9f717d2-c1dd-4626-802d-733a029d17ad", "key": "org.opencontainers.image.url", "value": "https://github.com/docker-library/busybox", "source_type": "manifest", "media_type": "text/plain"}
-
You can add an additional label to a manifest in a given repository with the
POST /api/v1/repository/{repository}/manifest/{manifestref}/labels
command. For example:$ 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
Example output{"label": {"id": "346593fd-18c8-49db-854f-4cb1fb76ff9c", "key": "example-key", "value": "example-value", "source_type": "api", "media_type": "text/plain"}}
-
You can delete a label using the
DELETE /api/v1/repository/{repository}/manifest/{manifestref}/labels/{labelid}
command:$ curl -X DELETE \ -H "Authorization: Bearer <bearer_token>" \ https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>/labels/<labelid>
This command does not return output in the CLI. You can use one of the commands above to ensure that it was successfully removed.
Using the API to mirror a repository
Project Quay administrators can mirror external repositories by using the API.
-
You have set
FEATURE_REPO_MIRROR: true
in yourconfig.yaml
file.
-
Create a new repository mirror configuration by using the
POST /api/v1/repository/{repository}/mirror
endpoint:$ 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>", "root_rule": { "rule": "<rule>", "rule_type": "<rule_type>" } }'
-
You can return information about the mirror configuration by using the
GET /api/v1/repository/{repository}/mirror
endpoint:$ curl -X GET "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \ -H "Authorization: Bearer <access_token>"
Example output{"is_enabled": true, "mirror_type": "PULL", "external_reference": "https://quay.io/repository/argoproj/argocd", "external_registry_username": null, "external_registry_config": {}, "sync_interval": 86400, "sync_start_date": "2025-01-15T12:00:00Z", "sync_expiration_date": null, "sync_retries_remaining": 3, "sync_status": "NEVER_RUN", "root_rule": {"rule_kind": "tag_glob_csv", "rule_value": ["*.latest*"]}, "robot_username": "quayadmin+mirror_robot"}
-
You can use the
POST /api/v1/repository/{repository}/mirror/sync-now
endpoint to sync the repositories. For example:$ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror/sync-now" \ -H "Authorization: Bearer <access_token>"
This command does not return output in the CLI.
-
Alternatively, you can cancel the sync with the
POST /api/v1/repository/{repository}/mirror/sync-cancel
endpoint.For example:$ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror/sync-cancel" \
This command does not return output in the CLI.
-
After creating a mirror configuration, you can make changes with the
PUT /api/v1/repository/{repository}/mirror
command. For example, you might choose to disable automatic synchronizations:$ curl -X PUT "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{ "is_enabled": <false>, (1) "external_reference": "<external_reference>", "external_registry_username": "<external_registry_username>", "external_registry_password": "<external_registry_password>", "sync_start_date": "<sync_start_date>", "sync_interval": <sync_interval>, "robot_username": "<robot_username>", "root_rule": { "rule": "<rule>", "rule_type": "<rule_type>" } }'
-
Disables automatic synchronization.
-
Establishing quota with the Project Quay API
You can establish quota for an organization or users, and tailor quota policies to suit the needs of your registry.
The following sections show you how to establish quota for an organization, a user, and then how to modify those settings.
Managing organization quota with the Project Quay API
When an organization is first created, it does not have an established quota. You can use the API to check, create, change, or delete quota limitations for an organization.
-
You have generated an OAuth access token.
-
To set a quota for an organization, you can use the
POST /api/v1/organization/{orgname}/quota
endpoint:$ 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" }'
Example output"Created"
-
Use the
GET /api/v1/organization/{orgname}/quota
command to return information about the policy, including the ID number, which is required for other organization quota endpoints. For example:$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota | jq
Example output[{"id": 1, "limit_bytes": 10737418240, "limit": "10.0 GiB", "default_config": false, "limits": [], "default_config_exists": false}]
After you obtain the ID number, you can use the
GET /api/v1/organization/{orgname}/quota/{quota_id}
command to list the quota policy. For example:$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>" \ -H "Authorization: Bearer <access_token>"
Example output{"id": 1, "limit_bytes": 10737418240, "limit": "10.0 GiB", "default_config": false, "limits": [], "default_config_exists": false}
-
You can use the
PUT /api/v1/organization/{orgname}/quota/{quota_id}
command to modify the existing quota limitation. Note that this requires the policy ID. For example:$ 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> }'
Example output{"id": 1, "limit_bytes": 21474836480, "limit": "20.0 GiB", "default_config": false, "limits": [], "default_config_exists": false}
-
An organization’s quota can be deleted with the
DELETE /api/v1/organization/{orgname}/quota/{quota_id}
command. For example:$ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>" \ -H "Authorization: Bearer <access_token>"
This command does not return output.
Setting quota limits for an organization with the Project Quay API
You can set specific quota limits for an organization so that, when exceeded, a warning is returned, or the pushed image is denied altogether.
-
Use the
POST /api/v1/organization/{orgname}/quota/{quota_id}/limit
command to create a quota policy that rejects images if they exceeded the allotted quota. For example:$ curl -X POST "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit" \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{ "limit_bytes": 21474836480, "type": "Reject", (1) "threshold_percent": 90 (2) }'
-
One of
Reject
orWarning
. -
Quota threshold, in percent of quota.
Example output"Created"
-
-
Use the
GET /api/v1/organization/{orgname}/quota/{quota_id}/limit
to obtain the ID of the quota limit. For example:$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit" \ -H "Authorization: Bearer <access_token>"
Example output[{"id": 2, "type": "Reject", "limit_percent": 90}]
-
Update the policy with the
PUT /api/v1/organization/{orgname}/quota/{quota_id}/limit/{limit_id}
endpoint. For example:$ 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> }'
Example output{"id": 3, "limit_bytes": 10737418240, "limit": "10.0 GiB", "default_config": false, "limits": [{"id": 2, "type": "Warning", "limit_percent": 80}], "default_config_exists": false}
-
You can delete the quota limit with the
DELETE /api/v1/organization/{orgname}/quota/{quota_id}/limit/{limit_id}
endpoint:$ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit/<limit_id>" \ -H "Authorization: Bearer <access_token>"
This command does not return output.
Obtaining quota limits for the user with the Project Quay API
You can specify quota and limitations for users so that, when exceeded, a warning is returned, or the pushed image is denied altogether. Quota limits for users must be set on the Project Quay UI. The following APIs can be used to view the quota limits for the user that is logged in.
-
Use the
GET /api/v1/user/quota
command to return information about the quota limitations:$ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota" \ -H "Authorization: Bearer <access_token>"
Example output[{"id": 4, "limit_bytes": 2199023255552, "limit": "2.0 TiB", "default_config": false, "limits": [], "default_config_exists": false}]
-
After you have received the quota ID, you can pass it in with the
GET /api/v1/user/quota/{quota_id}
endpoint to return information about the limitation:$ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota/{quota_id}" \ -H "Authorization: Bearer <access_token>"
Example output{"id": 4, "limit_bytes": 2199023255552, "limit": "2.0 TiB", "default_config": false, "limits": [], "default_config_exists": false}
-
The limitations can be viewed by using the
GET /api/v1/user/quota/{quota_id}/limit
endpoint. For example:$ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota/{quota_id}/limit" \ -H "Authorization: Bearer <access_token>"
Example output[{"id": 3, "type": "Reject", "limit_percent": 100}]
-
Additional information about the entire policy can be returned using the
GET /api/v1/user/quota/{quota_id}/limit/{limit_id}
endpoint:$ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota/{quota_id}/limit/{limit_id}" \ -H "Authorization: Bearer <access_token>"
Example output{"id": 4, "limit_bytes": 2199023255552, "limit": "2.0 TiB", "default_config": false, "limits": [{"id": 3, "type": "Reject", "limit_percent": 100}], "default_config_exists": false}
Establishing quota with the Project Quay API
Organizations can be created and managed through API endpoints. With the Project Quay API, you can create organizations, view organization information, create proxy caches for an organization, edit users with access to the organization, change organization details, delete organizations, and more.
Creating an organization by using the Project Quay API
Use the following procedure to create a new organization using the Project Quay API.
-
You have Created an OAuth access token.
-
You have set
BROWSER_API_CALLS_XHR_ONLY: false
in yourconfig.yaml
file.
-
Enter the following command to create a new organization using the
POST /api/v1/organization/
endpoint:$ 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/"
Example output
"Created"
-
After creation, organization details can be changed, such as adding an email address, with the
PUT /api/v1/organization/{orgname}
command. For example:$ curl -X PUT "https://<quay-server.example.com>/api/v1/organization/<orgname>" \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{ "email": "<org_email>", "invoice_email": <true/false>, "invoice_email_address": "<billing_email>" }'
Example output{"name": "test", "email": "new-contact@test-org.com", "avatar": {"name": "test", "hash": "a15d479002b20f211568fd4419e76686d2b88a4980a5b4c4bc10420776c5f6fe", "color": "#aec7e8", "kind": "user"}, "is_admin": true, "is_member": true, "teams": {"owners": {"name": "owners", "description": "", "role": "admin", "avatar": {"name": "owners", "hash": "6f0e3a8c0eb46e8834b43b03374ece43a030621d92a7437beb48f871e90f8d90", "color": "#c7c7c7", "kind": "team"}, "can_view": true, "repo_count": 0, "member_count": 1, "is_synced": false}}, "ordered_teams": ["owners"], "invoice_email": true, "invoice_email_address": "billing@test-org.com", "tag_expiration_s": 1209600, "is_free_account": true, "quotas": [{"id": 2, "limit_bytes": 10737418240, "limits": [{"id": 1, "type": "Reject", "limit_percent": 90}]}], "quota_report": {"quota_bytes": 0, "configured_quota": 10737418240, "running_backfill": "complete", "backfill_status": "complete"}}
Deleting an organization by using the Project Quay API
Use the following procedure to delete an organization using the Project Quay API.
-
You have Created an OAuth access token.
-
You have set
BROWSER_API_CALLS_XHR_ONLY: false
in yourconfig.yaml
file.
-
Enter the following command to delete an organization using the
DELETE /api/v1/organization/{orgname}
endpoint:$ curl -X DELETE \ -H "Authorization: Bearer <bearer_token>" \ "https://<quay-server.example.com>/api/v1/organization/<organization_name>"
-
The CLI does not return information when deleting an organization from the CLI. To confirm deletion, you can check the Project Quay UI, or you can enter the
GET /api/v1/organization/{orgname}
command to see if details are returned for the deleted organization:$ curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/organization/<organization_name>"
Example output
{"detail": "Not Found", "error_message": "Not Found", "error_type": "not_found", "title": "not_found", "type": "http://<quay-server.example.com>/api/v1/error/not_found", "status": 404}
Retrieving organization member information by using the API
Information about organization members can be retrieved by using the Project Quay API.
-
Use the
GET /api/v1/organization/{orgname}/members
to return a list of organization members:$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/members" \ -H "Authorization: Bearer <access_token>"
Example output{"members": [{"name": "quayadmin", "kind": "user", "avatar": {"name": "quayadmin", "hash": "6d640d802fe23b93779b987c187a4b7a4d8fbcbd4febe7009bdff58d84498fba", "color": "#f7b6d2", "kind": "user"}, "teams": [{"name": "owners", "avatar": {"name": "owners", "hash": "6f0e3a8c0eb46e8834b43b03374ece43a030621d92a7437beb48f871e90f8d90", "color": "#c7c7c7", "kind": "team"}}], "repositories": ["testrepo"]}, {"name": "testuser", "kind": "user", "avatar": {"name": "testuser", "hash": "f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a", "color": "#6b6ecf", "kind": "user"}, "teams": [{"name": "owners", "avatar": {"name": "owners", "hash": "6f0e3a8c0eb46e8834b43b03374ece43a030621d92a7437beb48f871e90f8d90", "color": "#c7c7c7", "kind": "team"}}], "repositories": []}]}
-
You can use the
GET /api/v1/organization/{orgname}/collaborators
to return a list of organization collaborators:$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/{orgname}/collaborators" \ -H "Authorization: Bearer <access_token>"
Example output{"collaborators": [user-test]}
-
Use the
GET /api/v1/organization/{orgname}/members/{membername}
endpoint to obtain more specific information about a user:$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/members/<membername>" \ -H "Authorization: Bearer <access_token>"
Example output{"name": "quayadmin", "kind": "user", "avatar": {"name": "quayadmin", "hash": "6d640d802fe23b93779b987c187a4b7a4d8fbcbd4febe7009bdff58d84498fba", "color": "#f7b6d2", "kind": "user"}, "teams": [{"name": "owners", "avatar": {"name": "owners", "hash": "6f0e3a8c0eb46e8834b43b03374ece43a030621d92a7437beb48f871e90f8d90", "color": "#c7c7c7", "kind": "team"}}], "repositories": ["testrepo"]}
-
Use the
DELETE /api/v1/organization/{orgname}/members/{membername}
endpoint to delete a team member.$ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/<orgname>/members/<membername>" \ -H "Authorization: Bearer <access_token>"
This command does not return output.
Creating an organization application by using the Project Quay API
Organization applications can be created by using the Project Quay UI.
Note
|
Organization applications can be created by using the UI, however OAuth 2 access tokens must be created on the UI. |
-
Use the
POST /api/v1/organization/{orgname}/applications
endpoint to create a new application for your organization. For example:$ 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>" }'
Example output{"name": "new-application", "description": "", "application_uri": "", "client_id": "E6GJSHOZMFBVNHTHNB53", "client_secret": "SANSWCWSGLVAUQ60L4Q4CEO3C1QAYGEXZK2VKJNI", "redirect_uri": "", "avatar_email": null}
-
Use the
GET /api/v1/organization/{orgname}/applications
endpoint to return a list of all organization applications. For example:$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/applications" \ -H "Authorization: Bearer <access_token>"
Example output{"applications": [{"name": "test", "description": "", "application_uri": "", "client_id": "MCJ61D8KQBFS2DXM56S2", "client_secret": "J5G7CCX5QCA8Q5XZLWGI7USJPSM4M5MQHJED46CF", "redirect_uri": "", "avatar_email": null}, {"name": "new-token", "description": "", "application_uri": "", "client_id": "IG58PX2REEY9O08IZFZE", "client_secret": "2LWTWO89KH26P2CO4TWFM7PGCX4V4SUZES2CIZMR", "redirect_uri": "", "avatar_email": null}, {"name": "second-token", "description": "", "application_uri": "", "client_id": "6XBK7QY7ACSCN5XBM3GS", "client_secret": "AVKBOUXTFO3MXBBK5UJD5QCQRN2FWL3O0XPZZT78", "redirect_uri": "", "avatar_email": null}, {"name": "new-application", "description": "", "application_uri": "", "client_id": "E6GJSHOZMFBVNHTHNB53", "client_secret": "SANSWCWSGLVAUQ60L4Q4CEO3C1QAYGEXZK2VKJNI", "redirect_uri": "", "avatar_email": null}]}
Applications can also be returned for a specific client using the
GET /api/v1/organization/{orgname}/applications/{client_id}
endpoint. For example:$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/applications/<client_id>" \ -H "Authorization: Bearer <access_token>"
Example output{"name": "test", "description": "", "application_uri": "", "client_id": "MCJ61D8KQBFS2DXM56S2", "client_secret": "J5G7CCX5QCA8Q5XZLWGI7USJPSM4M5MQHJED46CF", "redirect_uri": "", "avatar_email": null}
-
After creation, organization applications can be updated, for example, if you want to add a redirect URI or a new description, using the
PUT /api/v1/organization/{orgname}/applications/{client_id}
endpoint:$ curl -X PUT "https://quay-server.example.com/api/v1/organization/test/applications/12345" \ -H "Authorization: Bearer wplKtAuAX6DzAJwtB3X77nc18RFj2TKE5gTEk5K2" \ -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" }'
-
After creation, application information can be returned by using the
GET /api/v1/app/{client_id}
endpoint:$ curl -X GET "https://<quay-server.example.com>/api/v1/app/<client_id>" \ -H "Authorization: Bearer <access_token>"
Example output{"name": "new-application3", "description": "", "uri": "", "avatar": {"name": "new-application3", "hash": "a15d479002b20f211568fd4419e76686d2b88a4980a5b4c4bc10420776c5f6fe", "color": "#aec7e8", "kind": "app"}, "organization": {"name": "test", "email": "new-contact@test-org.com", "avatar": {"name": "test", "hash": "a15d479002b20f211568fd4419e76686d2b88a4980a5b4c4bc10420776c5f6fe", "color": "#aec7e8", "kind": "user"}, "is_admin": true, "is_member": true, "teams": {}, "ordered_teams": [], "invoice_email": true, "invoice_email_address": "billing@test-org.com", "tag_expiration_s": 1209600, "is_free_account": true, "quotas": [{"id": 2, "limit_bytes": 10737418240, "limits": [{"id": 1, "type": "Reject", "limit_percent": 90}]}], "quota_report": {"quota_bytes": 0, "configured_quota": 10737418240, "running_backfill": "complete", "backfill_status": "complete"}}}
-
Organization applications can be deleted with the
DELETE /api/v1/organization/{orgname}/applications/{client_id}
endpoint. For example:$ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/{orgname}/applications/{client_id}" \ -H "Authorization: Bearer <access_token>"
This command does not return output.
Configuring a proxy cache for an organization by using the Project Quay API
Proxy caching for an organization can be configured by using the Project Quay API.
-
Use the
POST /api/v1/organization/{orgname}/proxycache
endpoint to create a proxy cache configuration for the organization.$ 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>" }'
-
Use the
POST /api/v1/organization/{orgname}/validateproxycache
endpoint to validate the proxy configuration:$ 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>" }'
-
Use the
GET /api/v1/organization/{orgname}/proxycache
endpoint to obtain information about the proxcy cache. For example:$ curl -X GET "https://<quay-server.example.com>/api/v1/organization/{orgname}/proxycache" \ -H "Authorization: Bearer <access_token>"
Example output{"upstream_registry": "quay.io", "expiration_s": 86400, "insecure": false}
-
Use the
DELETE /api/v1/organization/{orgname}/proxycache
endpoint to$ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/{orgname}/proxycache" \ -H "Authorization: Bearer <access_token>"
Example output"Deleted"
Managing team members and repository permissions by using the API
Use the following procedures to add a member to a team (by direct invite or by email), or to remove a member from a team.
-
You have Created an OAuth access token.
-
You have set
BROWSER_API_CALLS_XHR_ONLY: false
in yourconfig.yaml
file.
-
Enter the
PUT /api/v1/organization/{orgname}/team/{teamname}/members/{membername}
command to add or invite a member to an existing team:$ curl -X PUT \ -H "Authorization: Bearer <your_access_token>" \ "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/members/<member_name>"
Example output{"name": "testuser", "kind": "user", "is_robot": false, "avatar": {"name": "testuser", "hash": "d51d17303dc3271ac3266fb332d7df919bab882bbfc7199d2017a4daac8979f0", "color": "#5254a3", "kind": "user"}, "invited": false}
-
Enter the
DELETE /api/v1/organization/{orgname}/team/{teamname}/members/{membername}
command to remove a member of a team:$ curl -X DELETE \ -H "Authorization: Bearer <your_access_token>" \ "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/members/<member_name>"
This command does not an output in the CLI. To ensure that a member has been deleted, you can enter the
GET /api/v1/organization/{orgname}/team/{teamname}/members
command and ensure that the member is not returned in the output.$ curl -X GET \ -H "Authorization: Bearer <your_access_token>" \ "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/members"
Example output{"name": "owners", "members": [{"name": "quayadmin", "kind": "user", "is_robot": false, "avatar": {"name": "quayadmin", "hash": "b28d563a6dc76b4431fc7b0524bbff6b810387dac86d9303874871839859c7cc", "color": "#17becf", "kind": "user"}, "invited": false}, {"name": "test-org+test", "kind": "user", "is_robot": true, "avatar": {"name": "test-org+test", "hash": "aa85264436fe9839e7160bf349100a9b71403a5e9ec684d5b5e9571f6c821370", "color": "#8c564b", "kind": "robot"}, "invited": false}], "can_edit": true}
-
You can enter the
PUT /api/v1/organization/{orgname}/team/{teamname}/invite/{email}
command to invite a user, by email address, to an existing team:$ curl -X PUT \ -H "Authorization: Bearer <your_access_token>" \ "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/invite/<email>"
-
You can enter the
DELETE /api/v1/organization/{orgname}/team/{teamname}/invite/{email}
command to delete the invite of an email address to join a team. For example:$ curl -X DELETE \ -H "Authorization: Bearer <your_access_token>" \ "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/invite/<email>"
Project Quay Application Programming Interface (API)
This API allows you to perform many of the operations required to work with Project Quay repositories, users, and organizations.
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 |
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 |
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 |
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 |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
build_uuid |
The UUID of the build |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
getRepoBuildLogs
Return the build logs for the build specified by the build uuid.
GET /api/v1/repository/{repository}/build/{build_uuid}/logs
Authorizations: oauth2_implicit (repo:read)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
path |
build_uuid |
The UUID of the build |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
getRepoBuild
Returns information about a build.
GET /api/v1/repository/{repository}/build/{build_uuid}
Authorizations: oauth2_implicit (repo:read)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
path |
build_uuid |
The UUID of the build |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
cancelRepoBuild
Cancels a repository build.
DELETE /api/v1/repository/{repository}/build/{build_uuid}
Authorizations: oauth2_implicit (repo:admin)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
path |
build_uuid |
The UUID of the build |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
204 |
Deleted |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
requestRepoBuild
Request that a repository be built and pushed from the specified input.
POST /api/v1/repository/{repository}/build/
Authorizations: oauth2_implicit (repo:write)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
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 |
The file id that was generated when the build spec was uploaded |
string |
archive_url |
The URL of the .tar.gz to build. Must start with "http" or "https". |
string |
subdirectory |
Subdirectory in which the Dockerfile can be found. You can only specify this or dockerfile_path |
string |
dockerfile_path |
Path to a dockerfile. You can only specify this or subdirectory. |
string |
context |
Pass in the context for the dockerfile. This is optional. |
string |
pull_robot |
Username of a Quay robot account to use as pull credentials |
string |
tags |
The tags to which the built images will be pushed. If none specified, "latest" is used. |
array of string |
Responses
HTTP Code | Description | Schema |
---|---|---|
201 |
Successful creation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
getRepoBuilds
Get the list of repository builds.
GET /api/v1/repository/{repository}/build/
Authorizations: oauth2_implicit (repo:read)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
since |
Returns all builds since the given unix timecode |
integer |
query |
limit |
The maximum number of builds to return |
integer |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
discovery
API discovery information.
discovery
List all of the API endpoints available in the swagger API format.
GET /api/v1/discovery
Authorizations:
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
internal |
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>"
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 |
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 |
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 |
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 |
Username for which to filter logs. |
string |
query |
endtime |
Latest time for logs. Format: "%m/%d/%Y" in UTC. |
string |
query |
starttime |
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 |
Latest time for logs. Format: "%m/%d/%Y" in UTC. |
string |
query |
starttime |
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 |
The callback URL to invoke with a link to the exported logs |
string |
callback_email |
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 |
The page token for the next page |
string |
query |
performer |
Username for which to filter logs. |
string |
query |
endtime |
Latest time for logs. Format: "%m/%d/%Y" in UTC. |
string |
query |
starttime |
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 |
The name of the organization |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
performer |
Username for which to filter logs. |
string |
query |
endtime |
Latest time for logs. Format: "%m/%d/%Y" in UTC. |
string |
query |
starttime |
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 |
The name of the organization |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
endtime |
Latest time for logs. Format: "%m/%d/%Y" in UTC. |
string |
query |
starttime |
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 |
The callback URL to invoke with a link to the exported logs |
string |
callback_email |
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 |
The name of the organization |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
next_page |
The page token for the next page |
string |
query |
performer |
Username for which to filter logs. |
string |
query |
endtime |
Latest time for logs. Format: "%m/%d/%Y" in UTC. |
string |
query |
starttime |
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 |
The full path of the repository. e.g. namespace/name |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
endtime |
Latest time for logs. Format: "%m/%d/%Y" in UTC. |
string |
query |
starttime |
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 |
The full path of the repository. e.g. namespace/name |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
endtime |
Latest time for logs. Format: "%m/%d/%Y" in UTC. |
string |
query |
starttime |
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 |
The callback URL to invoke with a link to the exported logs |
string |
callback_email |
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 |
The full path of the repository. e.g. namespace/name |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
next_page |
The page token for the next page |
string |
query |
endtime |
Latest time for logs. Format: "%m/%d/%Y" in UTC. |
string |
query |
starttime |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
manifestref |
The digest of the manifest |
string |
path |
labelid |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
manifestref |
The digest of the manifest |
string |
path |
labelid |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
manifestref |
The digest of the manifest |
string |
Request body schema (application/json)
Adds a label to a manifest
Name | Description | Schema |
---|---|---|
key |
The key for the label |
string |
value |
The value for the label |
string |
media_type |
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
GET /api/v1/repository/{repository}/manifest/{manifestref}/labels
Authorizations: oauth2_implicit (repo:read)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
path |
manifestref |
The digest of the manifest |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
filter |
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 /api/v1/repository/{repository}/manifest/{manifestref}
Authorizations: oauth2_implicit (repo:read)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
path |
manifestref |
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
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 |
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 |
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 |
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 |
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 |
Used to enable or disable synchronizations. |
boolean |
external_reference |
Location of the external repository. |
string |
external_registry_username |
Username used to authenticate with external registry. |
|
external_registry_password |
Password used to authenticate with external registry. |
|
sync_start_date |
Determines the next time this repository is ready for synchronization. |
string |
sync_interval |
Number of seconds after next_start_date to begin synchronizing. |
integer |
robot_username |
Username of robot which will be used for image pushes. |
string |
root_rule |
A list of glob-patterns used to determine which tags should be synchronized. |
object |
external_registry_config |
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 "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{
"is_enabled": <false>, (1)
"external_reference": "<external_reference>",
"external_registry_username": "<external_registry_username>",
"external_registry_password": "<external_registry_password>",
"sync_start_date": "<sync_start_date>",
"sync_interval": <sync_interval>,
"robot_username": "<robot_username>",
"root_rule": {
"rule": "<rule>",
"rule_type": "<rule_type>"
}
}'
-
Disables automatic synchronization.
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 |
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 |
Used to enable or disable synchronizations. |
boolean |
external_reference |
Location of the external repository. |
string |
external_registry_username |
Username used to authenticate with external registry. |
|
external_registry_password |
Password used to authenticate with external registry. |
|
sync_start_date |
Determines the next time this repository is ready for synchronization. |
string |
sync_interval |
Number of seconds after next_start_date to begin synchronizing. |
integer |
robot_username |
Username of robot which will be used for image pushes. |
string |
root_rule |
A list of glob-patterns used to determine which tags should be synchronized. |
object |
external_registry_config |
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/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>",
"root_rule": {
"rule": "<rule>",
"rule_type": "<rule_type>"
}
}'
namespacequota
listUserQuota
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 |
getOrganizationQuotaLimit
GET /api/v1/organization/{orgname}/quota/{quota_id}/limit/{limit_id}
Authorizations:
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
quota_id |
string |
|
path |
limit_id |
string |
|
path |
orgname |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
changeOrganizationQuotaLimit
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 |
string |
|
path |
limit_id |
string |
|
path |
orgname |
string |
Request body schema (application/json)
Description of changing organization quota limit
Name | Description | Schema |
---|---|---|
type |
Type of quota limit: "Warning" or "Reject" |
string |
threshold_percent |
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 |
deleteOrganizationQuotaLimit
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 |
string |
|
path |
limit_id |
string |
|
path |
orgname |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
204 |
Deleted |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
createOrganizationQuotaLimit
POST /api/v1/organization/{orgname}/quota/{quota_id}/limit
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
quota_id |
string |
|
path |
orgname |
string |
Request body schema (application/json)
Description of a new organization quota limit
Name | Description | Schema |
---|---|---|
type |
Type of quota limit: "Warning" or "Reject" |
string |
threshold_percent |
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 |
listOrganizationQuotaLimit
GET /api/v1/organization/{orgname}/quota/{quota_id}/limit
Authorizations:
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
quota_id |
string |
|
path |
orgname |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
getUserQuotaLimit
GET /api/v1/user/quota/{quota_id}/limit/{limit_id}
Authorizations: oauth2_implicit (user:admin)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
quota_id |
string |
|
path |
limit_id |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
listUserQuotaLimit
GET /api/v1/user/quota/{quota_id}/limit
Authorizations: oauth2_implicit (user:admin)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
quota_id |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
getOrganizationQuota
GET /api/v1/organization/{orgname}/quota/{quota_id}
Authorizations:
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
quota_id |
string |
|
path |
orgname |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
changeOrganizationQuota
PUT /api/v1/organization/{orgname}/quota/{quota_id}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
quota_id |
string |
|
path |
orgname |
string |
Request body schema (application/json)
Description of a new organization quota
Name | Description | Schema |
---|---|---|
limit_bytes |
Number of bytes the organization is allowed |
integer |
limits |
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 |
deleteOrganizationQuota
DELETE /api/v1/organization/{orgname}/quota/{quota_id}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
quota_id |
string |
|
path |
orgname |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
204 |
Deleted |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
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 |
string |
Request body schema (application/json)
Description of a new organization quota
Name | Description | Schema |
---|---|---|
limit_bytes |
Number of bytes the organization is allowed |
integer |
limits |
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 |
listOrganizationQuota
GET /api/v1/organization/{orgname}/quota
Authorizations:
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
orgname |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
getUserQuota
GET /api/v1/user/quota/{quota_id}
Authorizations: oauth2_implicit (user:admin)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
quota_id |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
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 |
Organization username |
string |
email |
Organization contact email |
string |
recaptcha_response |
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
POST /api/v1/organization/{orgname}/validateproxycache
Authorizations:
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
orgname |
string |
Request body schema (application/json)
Proxy cache configuration for an organization
Name | Description | Schema |
---|---|---|
upstream_registry |
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 |
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 |
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 |
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 |
The OAuth client ID |
string |
path |
orgname |
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 |
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 |
The OAuth client ID |
string |
path |
orgname |
The name of the organization |
string |
Request body schema (application/json)
Description of an updated application.
Name | Description | Schema |
---|---|---|
name |
The name of the application |
string |
redirect_uri |
The URI for the application’s OAuth redirect |
string |
application_uri |
The URI for the application’s homepage |
string |
description |
The human-readable description for the application |
string |
avatar_email |
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 |
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 |
The OAuth client ID |
string |
path |
orgname |
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 |
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 |
The name of the organization |
string |
Request body schema (application/json)
Description of a new organization application.
Name | Description | Schema |
---|---|---|
name |
The name of the application |
string |
redirect_uri |
The URI for the application’s OAuth redirect |
string |
application_uri |
The URI for the application’s homepage |
string |
description |
The human-readable description for the application |
string |
avatar_email |
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 |
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 |
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 |
getProxyCacheConfig
Retrieves the proxy cache configuration of the organization.
GET /api/v1/organization/{orgname}/proxycache
Authorizations:
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
orgname |
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 |
deleteProxyCacheConfig
Delete proxy cache configuration for the organization.
DELETE /api/v1/organization/{orgname}/proxycache
Authorizations:
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
orgname |
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 |
createProxyCacheConfig
Creates proxy cache configuration for the organization.
POST /api/v1/organization/{orgname}/proxycache
Authorizations:
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
orgname |
The name of the organization |
string |
Request body schema (application/json)
Proxy cache configuration for an organization
Name | Description | Schema |
---|---|---|
upstream_registry |
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 |
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 |
The username of the organization member |
string |
path |
orgname |
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 |
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 |
The username of the organization member |
string |
path |
orgname |
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 |
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 |
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 |
getOrganization
Get the details for the specified organization.
GET /api/v1/organization/{orgname}
Authorizations:
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
orgname |
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 |
The name of the organization |
string |
Request body schema (application/json)
Description of updates for an existing organization
Name | Description | Schema |
---|---|---|
email |
Organization contact email |
string |
invoice_email |
Whether the organization desires to receive emails for invoices |
boolean |
invoice_email_address |
The email address at which to receive invoices |
|
tag_expiration_s |
The number of seconds for tag expiration |
integer |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
deleteAdminedOrganization
Deletes the specified organization.
DELETE /api/v1/organization/{orgname}
Authorizations: oauth2_implicit (org:admin)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
orgname |
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 |
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 |
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 |
The username of the user to which the permissions apply |
string |
path |
repository |
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 |
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 |
The username of the user to which the permission applies |
string |
path |
repository |
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 |
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 |
The username of the user to which the permission applies |
string |
path |
repository |
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 |
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 |
The username of the user to which the permission applies |
string |
path |
repository |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
teamname |
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 |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
teamname |
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 |
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 |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
teamname |
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 |
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 |
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 |
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 |
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
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 |
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 |
The method to use for pruning tags (number_of_tags, creation_date) |
string |
value |
The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days)) |
|
tagPattern |
Tags only matching this pattern will be pruned |
string |
tagPatternMatches |
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 |
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 |
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 |
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 |
The unique ID of the policy |
string |
path |
orgname |
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 |
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 |
The unique ID of the policy |
string |
path |
orgname |
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 |
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 |
The unique ID of the policy |
string |
path |
orgname |
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 |
The method to use for pruning tags (number_of_tags, creation_date) |
string |
value |
The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days)) |
|
tagPattern |
Tags only matching this pattern will be pruned |
string |
tagPatternMatches |
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 |
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 |
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 |
The method to use for pruning tags (number_of_tags, creation_date) |
string |
value |
The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days)) |
|
tagPattern |
Tags only matching this pattern will be pruned |
string |
tagPatternMatches |
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 |
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 |
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 |
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 |
The unique ID of the policy |
string |
path |
repository |
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 |
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 |
The unique ID of the policy |
string |
path |
repository |
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 |
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 |
The unique ID of the policy |
string |
path |
repository |
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 |
The method to use for pruning tags (number_of_tags, creation_date) |
string |
value |
The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days)) |
|
tagPattern |
Tags only matching this pattern will be pruned |
string |
tagPatternMatches |
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 |
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 |
The method to use for pruning tags (number_of_tags, creation_date) |
string |
value |
The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days)) |
|
tagPattern |
Tags only matching this pattern will be pruned |
string |
tagPatternMatches |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
The method to use for pruning tags (number_of_tags, creation_date) |
string |
value |
The value to use for the pruning method (number of tags e.g. 10, time delta e.g. 7d (7 days)) |
|
tagPattern |
Tags only matching this pattern will be pruned |
string |
tagPatternMatches |
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 |
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 |
The ID of the prototype |
string |
path |
orgname |
The name of the organization |
string |
Request body schema (application/json)
Description of a the new prototype role
Name | Description | Schema |
---|---|---|
role |
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 |
The ID of the prototype |
string |
path |
orgname |
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 |
The name of the organization |
string |
Request body schema (application/json)
Description of a new prototype
Name | Description | Schema |
---|---|---|
role |
Role that should be applied to the delegate |
string |
activating_user |
Repository creating user to whom the rule should apply |
object |
delegate |
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 |
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 |
The name of the organization |
string |
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
path |
referrers |
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 |
Repository name |
string |
visibility |
Visibility which the repository will start with |
string |
namespace |
Namespace in which the repository should be created. If omitted, the username of the caller is used |
string |
description |
Markdown encoded description for the repository |
string |
repo_kind |
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 |
The page token for the next page |
string |
query |
repo_kind |
The kind of repositories to return |
string |
query |
popularity |
Whether to include the repository’s popularity metric. |
boolean |
query |
last_modified |
Whether to include when the repository was last modified. |
boolean |
query |
public |
Adds any repositories visible to the user by virtue of being public |
boolean |
query |
starred |
Filters the repositories returned to those starred by the user |
boolean |
query |
namespace |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
getRepo
Fetch the specified repository.
GET /api/v1/repository/{repository}
Authorizations: oauth2_implicit (repo:read)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
includeTags |
Whether to include repository tags |
boolean |
query |
includeStats |
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 |
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 |
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 |
deleteRepository
Delete a repository.
DELETE /api/v1/repository/{repository}
Authorizations: oauth2_implicit (repo:admin)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
uuid |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
uuid |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
uuid |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
uuid |
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 |
createRepoNotification
POST /api/v1/repository/{repository}/notification/
Authorizations: oauth2_implicit (repo:admin)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
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 |
The event on which the notification will respond |
string |
method |
The method of notification (such as email or web callback) |
string |
config |
JSON config information for the specific method of notification |
object |
eventConfig |
JSON config information for the specific event of notification |
object |
title |
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 |
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 |
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 |
If specified, the number of robots to return. |
integer |
query |
token |
If false, the robot’s token is not returned. |
boolean |
query |
permissions |
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 |
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 |
The short name for the robot, without any user or organization prefix |
string |
path |
orgname |
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 |
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 |
The short name for the robot, without any user or organization prefix |
string |
path |
orgname |
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 |
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 |
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 |
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 |
The short name for the robot, without any user or organization prefix |
string |
path |
orgname |
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 |
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 |
The short name for the robot, without any user or organization prefix |
string |
path |
orgname |
The name of the organization |
string |
Request body schema (application/json)
Optional data for creating a robot
Name | Description | Schema |
---|---|---|
description |
Optional text description for the robot |
string |
unstructured_metadata |
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 |
The short name for the robot, without any user or organization prefix |
string |
path |
orgname |
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 |
The name of the organization |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
limit |
If specified, the number of robots to return. |
integer |
query |
token |
If false, the robot’s token is not returned. |
boolean |
query |
permissions |
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 |
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 |
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 text description for the robot |
string |
unstructured_metadata |
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 |
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>"
Auth Federated Robot Token
Return an expiring robot token using the robot identity federation mechanism.
GET oauth2/federation/robot/token
Authorizations: oauth2_implicit (robot:auth)
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful authentication and token generation |
{ "token": "string" } |
401 |
Unauthorized: missing or invalid authentication |
{ "error": "string" } |
Request Body
Type | Name | Description | Schema |
---|---|---|---|
body |
auth_result |
The result of the authentication process, containing information about the robot identity. |
{ "missing": "boolean", "error_message": "string", "context": { "robot": "RobotObject" } } |
createOrgRobotFederation
Create a federation configuration for the specified organization robot.
POST /api/v1/organization/{orgname}/robots/{robot_shortname}/federation
Retrieve the federation configuration for the specified organization robot.
Authorizations: oauth2_implicit (user:admin)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
orgname + robot_shortname required |
The name of the organization and the short name for the robot, without any user or organization prefix |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
201 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
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 |
Whether to include usage metadata |
boolean |
query |
page |
The page. |
integer |
query |
query |
The search query. |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
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 |
The search query. |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
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 |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
includeOrgs |
Whether to include orgs names. |
boolean |
query |
includeTeams |
Whether to include team names. |
boolean |
query |
namespace |
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 |
secscan
List and manage repository vulnerabilities and other security information.
getRepoManifestSecurity
GET /api/v1/repository/{repository}/manifest/{manifestref}/security
Authorizations: oauth2_implicit (repo:read)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
path |
manifestref |
The digest of the manifest |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
vulnerabilities |
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.
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 |
The username of the user being created |
string |
email |
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/"
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 |
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 |
The page token for the next page |
string |
query |
limit |
Limit to the number of results to return per page. Max 100. |
integer |
query |
disabled |
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 |
The page token for the next page |
string |
query |
page |
The page number for the logs |
integer |
query |
endtime |
Latest time to which to get logs (%m/%d/%Y %Z) |
string |
query |
starttime |
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 |
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 |
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
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 |
The service authenticating with this key |
string |
name |
The friendly name of a service key |
string |
metadata |
The key/value pairs of this key’s metadata |
object |
notes |
If specified, the extra notes for the key |
string |
expiration |
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 |
listServiceKeys
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 |
changeUserQuotaSuperUser
PUT /api/v1/superuser/organization/{namespace}/quota/{quota_id}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
namespace |
string |
|
path |
quota_id |
string |
Request body schema (application/json)
Description of a new organization quota
Name | Description | Schema |
---|---|---|
limit_bytes |
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 |
deleteUserQuotaSuperUser
DELETE /api/v1/superuser/organization/{namespace}/quota/{quota_id}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
namespace |
string |
|
path |
quota_id |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
204 |
Deleted |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
createUserQuotaSuperUser
POST /api/v1/superuser/organization/{namespace}/quota
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
namespace |
string |
Request body schema (application/json)
Description of a new organization quota
Name | Description | Schema |
---|---|---|
limit_bytes |
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 |
listUserQuotaSuperUser
GET /api/v1/superuser/organization/{namespace}/quota
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
namespace |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
changeOrganizationQuotaSuperUser
PUT /api/v1/superuser/users/{namespace}/quota/{quota_id}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
namespace |
string |
|
path |
quota_id |
string |
Request body schema (application/json)
Description of a new organization quota
Name | Description | Schema |
---|---|---|
limit_bytes |
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 |
deleteOrganizationQuotaSuperUser
DELETE /api/v1/superuser/users/{namespace}/quota/{quota_id}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
namespace |
string |
|
path |
quota_id |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
204 |
Deleted |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
createOrganizationQuotaSuperUser
POST /api/v1/superuser/users/{namespace}/quota
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
namespace |
string |
Request body schema (application/json)
Description of a new organization quota
Name | Description | Schema |
---|---|---|
limit_bytes |
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 |
listOrganizationQuotaSuperUser
GET /api/v1/superuser/users/{namespace}/quota
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
namespace |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
changeOrganization
Updates information about the specified user.
PUT /api/v1/superuser/organizations/{name}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
name |
The name of the organizaton being managed |
string |
Request body schema (application/json)
Description of updates for an existing organization
Name | Description | Schema |
---|---|---|
email |
Organization contact email |
string |
invoice_email |
Whether the organization desires to receive emails for invoices |
boolean |
invoice_email_address |
The email address at which to receive invoices |
|
tag_expiration_s |
The number of seconds for tag expiration |
integer |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
deleteOrganization
Deletes the specified organization.
DELETE /api/v1/superuser/organizations/{name}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
name |
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 |
approveServiceKey
POST /api/v1/superuser/approvedkeys/{kid}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
kid |
The unique identifier for a service key |
string |
Request body schema (application/json)
Information for approving service keys
Name | Description | Schema |
---|---|---|
notes |
Optional approval notes |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
201 |
Successful creation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
deleteServiceKey
DELETE /api/v1/superuser/keys/{kid}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
kid |
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 |
updateServiceKey
PUT /api/v1/superuser/keys/{kid}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
kid |
The unique identifier for a service key |
string |
Request body schema (application/json)
Description of updates for a service key
Name | Description | Schema |
---|---|---|
name |
The friendly name of a service key |
string |
metadata |
The key/value pairs of this key’s metadata |
object |
expiration |
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 |
getServiceKey
GET /api/v1/superuser/keys/{kid}
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
kid |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
getRegistrySize
GET /api/v1/superuser/registrysize/
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
namespace |
string |
Description of a image registry size
Name | Description | Schema |
---|---|---|
size_bytes* |
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 |
postRegistrySize
POST /api/v1/superuser/registrysize/
Authorizations: oauth2_implicit (super:user)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
namespace |
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 |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
tag |
The name of the tag |
string |
Request body schema (application/json)
Restores a tag to a specific image
Name | Description | Schema |
---|---|---|
manifest_digest |
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
tag |
The name of the tag |
string |
Request body schema (application/json)
Makes changes to a specific tag
Name | Description | Schema |
---|---|---|
manifest_digest |
(If specified) The manifest digest to which the tag should point |
|
expiration |
(If specified) The expiration for the image |
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>"
}' \
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 |
The full path of the repository. e.g. namespace/name |
string |
path |
tag |
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 |
listRepoTags
GET /api/v1/repository/{repository}/tag/
Authorizations: oauth2_implicit (repo:read)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
onlyActiveTags |
Filter to only active tags. |
boolean |
query |
page |
Page index for the results. Default 1. |
integer |
query |
limit |
Limit to the number of results to return per page. Max 100. |
integer |
query |
filter_tag_name |
Syntax: <op>:<name> Filters the tag names based on the operation.<op> can be 'like' or 'eq'. |
string |
query |
specificTag |
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/
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 |
The name of the team |
string |
path |
orgname |
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 |
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 |
The name of the team |
string |
path |
membername |
The username of the team member |
string |
path |
orgname |
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 |
The name of the team |
string |
path |
membername |
The username of the team member |
string |
path |
orgname |
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 |
The name of the team |
string |
path |
orgname |
The name of the organization |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
includePending |
Whether to include pending members |
boolean |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
Example command
$ curl -X GET \
-H "Authorization: Bearer <your_access_token>" \
"<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/members"
inviteTeamMemberEmail
Invites an email address to an existing team.
PUT /api/v1/organization/{orgname}/team/{teamname}/invite/{email}
Authorizations: oauth2_implicit (org:admin)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
email |
string |
|
path |
teamname |
string |
|
path |
orgname |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
Example command
$ curl -X PUT \
-H "Authorization: Bearer <your_access_token>" \
"<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/invite/<email>"
deleteTeamMemberEmailInvite
Delete an invite of an email address to join a team.
DELETE /api/v1/organization/{orgname}/team/{teamname}/invite/{email}
Authorizations: oauth2_implicit (org:admin)
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
email |
string |
|
path |
teamname |
string |
|
path |
orgname |
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 |
The name of the team |
string |
path |
orgname |
The name of the organization |
string |
Request body schema (application/json)
Description of a team
Name | Description | Schema |
---|---|---|
role |
Org wide permissions that should apply to the team |
string |
description |
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 |
The name of the team |
string |
path |
orgname |
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 |
The UUID of the build trigger |
string |
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
Request body schema (application/json)
Name | Description | Schema |
---|---|---|
config |
Arbitrary json. |
object |
pull_robot |
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 |
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 |
The UUID of the build trigger |
string |
path |
repository |
The full path of the repository. e.g. namespace/name |
string |
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
limit |
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 |
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 |
The UUID of the build trigger |
string |
path |
repository |
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 |
(SCM only) If specified, the name of the branch to build. |
string |
commit_sha |
(Custom Only) If specified, the ref/SHA1 used to checkout a git repository. |
string |
refs |
(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 |
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 |
The UUID of the build trigger |
string |
path |
repository |
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 |
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 |
The UUID of the build trigger |
string |
path |
repository |
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 |
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 |
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 |
The UUID of the build trigger |
string |
path |
repository |
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 |
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 |
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 |
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 |
Namespace in which the repository belongs |
string |
repository |
Repository name |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
201 |
Successful creation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
listStarredRepos
List all starred repositories.
GET /api/v1/user/starred
Authorizations: oauth2_implicit (user:admin)
Query parameters
Type | Name | Description | Schema |
---|---|---|---|
query |
next_page |
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 |
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 |
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 |
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 |
getUserInformation
Get user information for the specified user.
GET /api/v1/users/{username}
Authorizations:
Path parameters
Type | Name | Description | Schema |
---|---|---|---|
path |
username |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Successful invocation |
|
400 |
Bad Request |
|
401 |
Session required |
|
403 |
Unauthorized access |
|
404 |
Not found |
Definitions
ApiError
Name | Description | Schema |
---|---|---|
status |
Status code of the response. |
integer |
type |
Reference to the type of the error. |
string |
detail |
Details about the specific instance of the error. |
string |
title |
Unique error code to identify the type of error. |
string |
error_message |
Deprecated; alias for detail |
string |
error_type |
Deprecated; alias for detail |
string |
UserView
Name | Description | Schema |
---|---|---|
verified |
Whether the user’s email address has been verified |
boolean |
anonymous |
true if this user data represents a guest user |
boolean |
email |
The user’s email address |
string |
avatar |
Avatar data representing the user’s icon |
object |
organizations |
Information about the organizations in which the user is a member |
array of object |
logins |
The list of external login providers against which the user has authenticated |
array of object |
can_create_repo |
Whether the user has permission to create repositories |
boolean |
preferred_namespace |
If true, the user’s namespace is the preferred namespace to display |
boolean |
ViewMirrorConfig
Name | Description | Schema |
---|---|---|
is_enabled |
Used to enable or disable synchronizations. |
boolean |
external_reference |
Location of the external repository. |
string |
external_registry_username |
Username used to authenticate with external registry. |
|
external_registry_password |
Password used to authenticate with external registry. |
|
sync_start_date |
Determines the next time this repository is ready for synchronization. |
string |
sync_interval |
Number of seconds after next_start_date to begin synchronizing. |
integer |
robot_username |
Username of robot which will be used for image pushes. |
string |
root_rule |
A list of glob-patterns used to determine which tags should be synchronized. |
object |
external_registry_config |
object |
ApiErrorDescription
Name | Description | Schema |
---|---|---|
type |
A reference to the error type resource |
string |
title |
The title of the error. Can be used to uniquely identify the kind of error. |
string |
description |
A more detailed description of the error that may include help for fixing the issue. |
string |
API configuration examples
external_registry_config object reference
{
"is_enabled": True,
"external_reference": "quay.io/redhat/quay",
"sync_interval": 5000,
"sync_start_date": datetime(2020, 0o1, 0o2, 6, 30, 0),
"external_registry_username": "fakeUsername",
"external_registry_password": "fakePassword",
"external_registry_config": {
"verify_tls": True,
"unsigned_images": False,
"proxy": {
"http_proxy": "http://insecure.proxy.corp",
"https_proxy": "https://secure.proxy.corp",
"no_proxy": "mylocalhost",
},
},
}
rule_rule object reference
{
"root_rule": {"rule_kind": "tag_glob_csv", "rule_value": ["latest", "foo", "bar"]},
}