Chapter 10. mirror
Mirror.
10.1. syncCancel Copy linkLink copied to clipboard!
Update the sync_status for a given Repository’s mirroring configuration.
10.1.1. POST /api/v1/repository/{repository}/mirror/sync-cancel Copy linkLink copied to clipboard!
Authorizations: oauth2_implicit (repo:admin)
10.1.2. Path parameters Copy linkLink copied to clipboard!
| Type | Name | Description | Schema |
|---|---|---|---|
| path | repository required | The full path of the repository. e.g. namespace/name | string |
10.1.3. Responses Copy linkLink copied to clipboard!
10.1.4. Example command Copy linkLink copied to clipboard!
$ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror/sync-cancel" \
10.2. syncNow Copy linkLink copied to clipboard!
Update the sync_status for a given Repository’s mirroring configuration.
10.2.1. POST /api/v1/repository/{repository}/mirror/sync-now Copy linkLink copied to clipboard!
Authorizations: oauth2_implicit (repo:admin)
10.2.2. Path parameters Copy linkLink copied to clipboard!
| Type | Name | Description | Schema |
|---|---|---|---|
| path | repository required | The full path of the repository. e.g. namespace/name | string |
10.2.3. Responses Copy linkLink copied to clipboard!
10.2.4. Example command Copy linkLink copied to clipboard!
$ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror/sync-now" \
-H "Authorization: Bearer <access_token>"
10.3. getRepoMirrorConfig Copy linkLink copied to clipboard!
Return the Mirror configuration for a given Repository.
10.3.1. GET /api/v1/repository/{repository}/mirror Copy linkLink copied to clipboard!
Authorizations: oauth2_implicit (repo:admin)
10.3.2. Path parameters Copy linkLink copied to clipboard!
| Type | Name | Description | Schema |
|---|---|---|---|
| path | repository required | The full path of the repository. e.g. namespace/name | string |
10.3.3. Responses Copy linkLink copied to clipboard!
| HTTP Code | Description | Schema |
|---|---|---|
| 200 | Successful invocation | |
| 400 | Bad Request | |
| 401 | Session required | |
| 403 | Unauthorized access | |
| 404 | Not found |
10.3.4. Example command Copy linkLink copied to clipboard!
$ curl -X GET "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \
-H "Authorization: Bearer <access_token>"
10.4. changeRepoMirrorConfig Copy linkLink copied to clipboard!
Allow users to modifying the repository’s mirroring configuration.
10.4.1. PUT /api/v1/repository/{repository}/mirror Copy linkLink copied to clipboard!
Authorizations: oauth2_implicit (repo:admin)
10.4.2. Path parameters Copy linkLink copied to clipboard!
| Type | Name | Description | Schema |
|---|---|---|---|
| path | repository required | The full path of the repository. e.g. namespace/name | string |
10.4.3. Request body schema (application/json) Copy linkLink copied to clipboard!
Update the repository mirroring configuration.
| Name | Description | Schema |
|---|---|---|
| is_enabled optional | Used to enable or disable synchronizations. | boolean |
| external_reference optional | Location of the external repository. | string |
| external_registry_username optional | Username used to authenticate with external registry. | |
| external_registry_password optional | Password used to authenticate with external registry. | |
| sync_start_date optional | Determines the next time this repository is ready for synchronization. | string |
| sync_interval optional | Number of seconds after next_start_date to begin synchronizing. | integer |
| robot_username optional | Username of robot which will be used for image pushes. | string |
| root_rule optional | A list of glob-patterns used to determine which tags should be synchronized. | object |
| external_registry_config optional | object | |
| skopeo_timeout_interval required | Number of seconds mirroring job will run before timing out. | Integer |
10.4.4. Responses Copy linkLink copied to clipboard!
10.4.5. Example command Copy linkLink copied to clipboard!
$ curl -X PUT "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{
"is_enabled": <false>,
"external_reference": "<external_reference>",
"external_registry_username": "<external_registry_username>",
"external_registry_password": "<external_registry_password>",
"sync_start_date": "<sync_start_date>",
"sync_interval": <sync_interval>,
"robot_username": "<robot_username>",
"skopeo_timeout_interval": 600,
"root_rule": {
"rule": "<rule>",
"rule_type": "<rule_type>"
}
}'
10.5. createRepoMirrorConfig Copy linkLink copied to clipboard!
Create a RepoMirrorConfig for a given Repository.
10.5.1. POST /api/v1/repository/{repository}/mirror Copy linkLink copied to clipboard!
Authorizations: oauth2_implicit (repo:admin)
10.5.2. Path parameters Copy linkLink copied to clipboard!
| Type | Name | Description | Schema |
|---|---|---|---|
| path | repository required | The full path of the repository. e.g. namespace/name | string |
10.5.3. Request body schema (application/json) Copy linkLink copied to clipboard!
Create the repository mirroring configuration.
| Name | Description | Schema |
|---|---|---|
| is_enabled optional | Used to enable or disable synchronizations. | boolean |
| external_reference required | Location of the external repository. | string |
| external_registry_username optional | Username used to authenticate with external registry. | |
| external_registry_password optional | Password used to authenticate with external registry. | |
| sync_start_date required | Determines the next time this repository is ready for synchronization. | string |
| sync_interval required | Number of seconds after next_start_date to begin synchronizing. | integer |
| robot_username required | Username of robot which will be used for image pushes. | string |
| root_rule required | A list of glob-patterns used to determine which tags should be synchronized. | object |
| external_registry_config optional | object | |
| skopeo_timeout_interval required | Number of seconds mirroring job will run before timing out. | Integer |
10.5.4. Responses Copy linkLink copied to clipboard!
10.5.5. Example command Copy linkLink copied to clipboard!
$ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{
"is_enabled": <is_enabled>,
"external_reference": "<external_reference>",
"external_registry_username": "<external_registry_username>",
"external_registry_password": "<external_registry_password>",
"sync_start_date": "<sync_start_date>",
"sync_interval": <sync_interval>,
"robot_username": "<robot_username>",
"skopeo_timeout_interval": 600,
"root_rule": {
"rule": "<rule>",
"rule_type": "<rule_type>"
}
}'
10.6. getRepositoryMirrorHealth Copy linkLink copied to clipboard!
Return health status for repository mirroring operations.
10.6.1. GET /api/v1/repository/mirror/health Copy linkLink copied to clipboard!
Authorizations: oauth2_implicit (super:user for global queries; organization membership or user administration for namespace-scoped queries)
Returns HTTP 200 when mirroring is healthy and HTTP 503 when unhealthy.
This endpoint requires a fresh login. A validated OAuth or SSO token satisfies the check. A password-based browser session must be within FRESH_LOGIN_TIMEOUT (default: 10m). Robot accounts cannot call this endpoint.
Access control:
-
Without the
namespacequery parameter, the caller must be a superuser with full access, or a global read-only superuser. -
With
namespace, organization members can query their organization. For a user namespace, the caller must be that user or have user-admin permission. Superusers can query any namespace.
For a global summary without per-repository samples, superusers can also call GET /api/v1/superuser/mirror/health. See getSuperUserRepositoryMirrorHealth.
10.6.2. Query parameters Copy linkLink copied to clipboard!
| Type | Name | Description | Schema |
|---|---|---|---|
| query | namespace optional | Filter the health check to a specific namespace | string |
| query | detailed optional | Include per-repository breakdown | boolean |
| query | limit optional |
Maximum repositories in the detailed response when | integer |
| query | offset optional | Offset into the sorted mirror list for paginated details (default: 0) | integer |
10.6.3. Responses Copy linkLink copied to clipboard!
10.6.4. Example commands Copy linkLink copied to clipboard!
Query health for a namespace that you can administer. Include detailed=true for a per-repository breakdown:
$ curl -X GET "https://<quay-server.example.com>/api/v1/repository/mirror/health?namespace=<orgname>&detailed=true" \
-H "Authorization: Bearer <access_token>"
Query global mirror health as a superuser with full access:
$ curl -X GET "https://<quay-server.example.com>/api/v1/repository/mirror/health" \
-H "Authorization: Bearer <access_token>"
Substitute an OAuth access token that includes the super:user scope for global queries. For namespace-scoped queries, use a token or fresh login session for an organization member or namespace administrator.
Example output
{
"healthy": true,
"workers": {
"active": 1,
"configured": 1,
"status": "healthy"
},
"repositories": {
"total": 0,
"syncing": 0,
"completed": 0,
"failed": 0,
"never_run": 0,
"details": [],
"pagination": {
"limit": 100,
"offset": 0,
"has_more": false
}
},
"tags_pending": 0,
"last_check": "2026-07-16T20:11:54.820064Z",
"issues": []
}
For metric names, example Prometheus queries, and health determination logic, see Monitoring repository mirroring.