[Skip to main content](https://docs.gitlab.com/api/container_virtual_registries/#skipTarget) [Go to GitLab Docs homepage](https://docs.gitlab.com/)
`/`
[What's new?](https://about.gitlab.com/releases/whats-new/)
English
  * Language
  * English
  * 日本語


v18.10
  *     * [18.10 (not yet released)](https://docs.gitlab.com/api/container_virtual_registries/)
  *     * [18.9 (recently released)](https://docs.gitlab.com/18.9/api/container_virtual_registries/)
    * [18.8](https://docs.gitlab.com/18.8/api/container_virtual_registries/)
    * [18.7](https://archives.docs.gitlab.com/18.7/api/container_virtual_registries/)
  *     * [17.11](https://archives.docs.gitlab.com/17.11/api/container_virtual_registries/)
    * [16.11](https://archives.docs.gitlab.com/16.11/ee/api/container_virtual_registries.html)
  *     * [Archives](https://docs.gitlab.com/archives)


Select theme and layout
  * Light mode
  * Dark mode
  * Auto


  * Fixed width
  * Fluid width


[What's new?](https://about.gitlab.com/releases/whats-new/) [Get free trial](https://gitlab.com/-/trial_registrations/new?glm_source=docs.gitlab.com&amp;glm_content=navigation-cta-docs)
Toggle menu
  * [Use GitLab](https://docs.gitlab.com/user/)
  * [GitLab Duo](https://docs.gitlab.com/user/gitlab_duo/)
  * [Extend](https://docs.gitlab.com/api/)
  * [Install](https://docs.gitlab.com/install/)
  * [Administer](https://docs.gitlab.com/administration/)
  * [Subscribe](https://docs.gitlab.com/subscriptions/)
  * [Contribute](https://docs.gitlab.com/development/)
  * [Solutions](https://docs.gitlab.com/solutions/)


Select a topicUse GitLab GitLab Duo Extend Install Administer Subscribe Contribute Solutions
[Getting started](https://docs.gitlab.com/api/get_started/get_started_extending/)
[Tutorials](https://docs.gitlab.com/tutorials/develop/)
[Integrations](https://docs.gitlab.com/integration/)
[Webhooks](https://docs.gitlab.com/user/project/integrations/webhooks/)
[REST API](https://docs.gitlab.com/api/rest/)
[Resources](https://docs.gitlab.com/api/api_resources/)
[.gitignore (templates)](https://docs.gitlab.com/api/templates/gitignores/)
[.gitlab-ci.yml (templates)](https://docs.gitlab.com/api/templates/gitlab_ci_ymls/)
[Access requests](https://docs.gitlab.com/api/access_requests/)
[Agent for Kubernetes](https://docs.gitlab.com/api/cluster_agents/)
[AI Catalog admin](https://docs.gitlab.com/api/admin/ai_catalog/)
[Alert management](https://docs.gitlab.com/api/alert_management_alerts/)
[Application appearance](https://docs.gitlab.com/api/appearance/)
[Application settings](https://docs.gitlab.com/api/settings/)
[Application statistics](https://docs.gitlab.com/api/statistics/)
[Applications](https://docs.gitlab.com/api/applications/)
[Attestations](https://docs.gitlab.com/api/attestations/)
[Audit events](https://docs.gitlab.com/api/audit_events/)
[Avatar](https://docs.gitlab.com/api/avatar/)
[Branches](https://docs.gitlab.com/api/branches/)
[Broadcast messages](https://docs.gitlab.com/api/broadcast_messages/)
[Cluster discovery (certificate-based) (deprecated)](https://docs.gitlab.com/api/cluster_discovery/)
[Code Suggestions](https://docs.gitlab.com/api/code_suggestions/)
[Commits](https://docs.gitlab.com/api/commits/)
[Compliance and policy settings](https://docs.gitlab.com/api/compliance_policy_settings/)
[Composer](https://docs.gitlab.com/api/packages/composer/)
[Conan v1](https://docs.gitlab.com/api/packages/conan_v1/)
[Conan v2](https://docs.gitlab.com/api/packages/conan_v2/)
[Container registry](https://docs.gitlab.com/api/container_registry/)
[Container repository protection rules](https://docs.gitlab.com/api/container_repository_protection_rules/)
[Container registry protection tag rules](https://docs.gitlab.com/api/container_registry_protection_tag_rules/)
[Container virtual registry](https://docs.gitlab.com/api/container_virtual_registries/)
[Custom attributes](https://docs.gitlab.com/api/custom_attributes/)
[Database migrations](https://docs.gitlab.com/api/database_migrations/)
[Data management](https://docs.gitlab.com/api/admin/data_management/)
[Debian](https://docs.gitlab.com/api/packages/debian/)
[Debian group distributions](https://docs.gitlab.com/api/packages/debian_group_distributions/)
[Debian project distributions](https://docs.gitlab.com/api/packages/debian_project_distributions/)
[Dependencies](https://docs.gitlab.com/api/dependencies/)
[Dependency list export](https://docs.gitlab.com/api/dependency_list_export/)
[Dependency Proxy](https://docs.gitlab.com/api/dependency_proxy/)
[Deploy keys](https://docs.gitlab.com/api/deploy_keys/)
[Deploy tokens](https://docs.gitlab.com/api/deploy_tokens/)
[Deployments](https://docs.gitlab.com/api/deployments/)
[Discussions](https://docs.gitlab.com/api/discussions/)
[Dockerfile (templates)](https://docs.gitlab.com/api/templates/dockerfiles/)
[DORA4 metrics](https://docs.gitlab.com/api/dora/metrics/)
[Emoji reactions](https://docs.gitlab.com/api/emoji_reactions/)
[Environments](https://docs.gitlab.com/api/environments/)
[Epics (deprecated)](https://docs.gitlab.com/api/epics/)
[Error tracking](https://docs.gitlab.com/api/error_tracking/)
[Events](https://docs.gitlab.com/api/events/)
[Experiments](https://docs.gitlab.com/api/experiments/)
[External status checks](https://docs.gitlab.com/api/status_checks/)
[Feature flags](https://docs.gitlab.com/api/feature_flags/)
[Feature flag user lists](https://docs.gitlab.com/api/feature_flag_user_lists/)
[Freeze periods](https://docs.gitlab.com/api/freeze_periods/)
[Geo nodes (deprecated)](https://docs.gitlab.com/api/geo_nodes/)
[Geo sites](https://docs.gitlab.com/api/geo_sites/)
[GitLab Duo Chat completions](https://docs.gitlab.com/api/chat/)
[GitLab Pages](https://docs.gitlab.com/api/pages/)
[GLQL](https://docs.gitlab.com/api/glql/)
[Go Proxy](https://docs.gitlab.com/api/packages/go_proxy/)
[Google Cloud integration](https://docs.gitlab.com/api/google_cloud_integration/)
[Groups](https://docs.gitlab.com/api/groups/)
[Helm](https://docs.gitlab.com/api/packages/helm/)
[Import](https://docs.gitlab.com/api/import/)
[Instance CI/CD variables](https://docs.gitlab.com/api/instance_level_ci_variables/)
[Invitations](https://docs.gitlab.com/api/invitations/)
[Issues](https://docs.gitlab.com/api/issues/)
[Issues (epic) (deprecated)](https://docs.gitlab.com/api/epic_issues/)
[Issues statistics](https://docs.gitlab.com/api/issues_statistics/)
[Jobs](https://docs.gitlab.com/api/jobs/)
[Job artifacts](https://docs.gitlab.com/api/job_artifacts/)
[Job token scopes](https://docs.gitlab.com/api/project_job_token_scopes/)
[Keys](https://docs.gitlab.com/api/keys/)
[License](https://docs.gitlab.com/api/license/)
[Licenses (templates)](https://docs.gitlab.com/api/templates/licenses/)
[Linked epics (deprecated)](https://docs.gitlab.com/api/linked_epics/)
[Links (issue)](https://docs.gitlab.com/api/issue_links/)
[Links (epic) (deprecated)](https://docs.gitlab.com/api/epic_links/)
[Lint .gitlab-ci.yml](https://docs.gitlab.com/api/lint/)
[Markdown](https://docs.gitlab.com/api/markdown/)
[Maven](https://docs.gitlab.com/api/packages/maven/)
[Maven virtual registry](https://docs.gitlab.com/api/maven_virtual_registries/)
[Member roles](https://docs.gitlab.com/api/member_roles/)
[Merge request approvals](https://docs.gitlab.com/api/merge_request_approvals/)
[Merge request approval settings](https://docs.gitlab.com/api/merge_request_approval_settings/)
[Merge request context commits](https://docs.gitlab.com/api/merge_request_context_commits/)
[Merge requests](https://docs.gitlab.com/api/merge_requests/)
[Merge trains](https://docs.gitlab.com/api/merge_trains/)
[Metadata](https://docs.gitlab.com/api/metadata/)
[Model registry](https://docs.gitlab.com/api/model_registry/)
[Namespaces](https://docs.gitlab.com/api/namespaces/)
[Notes (comments)](https://docs.gitlab.com/api/notes/)
[Notification settings](https://docs.gitlab.com/api/notification_settings/)
[npm](https://docs.gitlab.com/api/packages/npm/)
[NuGet](https://docs.gitlab.com/api/packages/nuget/)
[Organizations](https://docs.gitlab.com/api/organizations/)
[Packages](https://docs.gitlab.com/api/packages/)
[Pages domains](https://docs.gitlab.com/api/pages_domains/)
[Personal access tokens](https://docs.gitlab.com/api/personal_access_tokens/)
[Pipeline schedules](https://docs.gitlab.com/api/pipeline_schedules/)
[Pipeline trigger tokens](https://docs.gitlab.com/api/pipeline_triggers/)
[Pipelines](https://docs.gitlab.com/api/pipelines/)
[Plan limits](https://docs.gitlab.com/api/plan_limits/)
[Product analytics](https://docs.gitlab.com/api/product_analytics/)
[Projects](https://docs.gitlab.com/api/projects/)
[PyPI](https://docs.gitlab.com/api/packages/pypi/)
[Repositories](https://docs.gitlab.com/api/repositories/)
[Repository files](https://docs.gitlab.com/api/repository_files/)
[Repository submodules](https://docs.gitlab.com/api/repository_submodules/)
[Resource group](https://docs.gitlab.com/api/resource_groups/)
[Resource iteration events](https://docs.gitlab.com/api/resource_iteration_events/)
[Resource label events](https://docs.gitlab.com/api/resource_label_events/)
[Resource milestone events](https://docs.gitlab.com/api/resource_milestone_events/)
[Resource state events](https://docs.gitlab.com/api/resource_state_events/)
[Resource weight events](https://docs.gitlab.com/api/resource_weight_events/)
[Ruby gems](https://docs.gitlab.com/api/packages/rubygems/)
[Runners](https://docs.gitlab.com/api/runners/)
[Runner controllers](https://docs.gitlab.com/api/runner_controllers/)
[Runner controller tokens](https://docs.gitlab.com/api/runner_controller_tokens/)
[Search](https://docs.gitlab.com/api/search/)
[Search migrations](https://docs.gitlab.com/api/search_admin/)
[Secure files](https://docs.gitlab.com/api/secure_files/)
[Service accounts](https://docs.gitlab.com/api/service_accounts/)
[Service Ping](https://docs.gitlab.com/api/usage_data/)
[Sidekiq metrics](https://docs.gitlab.com/api/sidekiq_metrics/)
[Sidekiq queues](https://docs.gitlab.com/api/admin_sidekiq_queues/)
[Snippet repository storage moves](https://docs.gitlab.com/api/snippet_repository_storage_moves/)
[Snippets](https://docs.gitlab.com/api/snippets/)
[Suggestions](https://docs.gitlab.com/api/suggestions/)
[System hooks](https://docs.gitlab.com/api/system_hooks/)
[Tags](https://docs.gitlab.com/api/tags/)
[Terraform registry](https://docs.gitlab.com/api/packages/terraform-modules/)
[To-Do List](https://docs.gitlab.com/api/todos/)
[Token information](https://docs.gitlab.com/api/admin/token/)
[Topics](https://docs.gitlab.com/api/topics/)
[Users](https://docs.gitlab.com/api/users/)
[Version](https://docs.gitlab.com/api/version/)
[Virtual registries cleanup policies](https://docs.gitlab.com/api/virtual_registries_cleanup_policies/)
[Vulnerabilities](https://docs.gitlab.com/api/vulnerabilities/)
[Vulnerability archive export](https://docs.gitlab.com/api/vulnerability_archive_exports/)
[Vulnerability export](https://docs.gitlab.com/api/vulnerability_exports/)
[Vulnerability findings](https://docs.gitlab.com/api/vulnerability_findings/)
[Web commits](https://docs.gitlab.com/api/web_commits/)
[Authentication](https://docs.gitlab.com/api/rest/authentication/)
[Third-party clients](https://docs.gitlab.com/api/rest/third_party_clients/)
[Deprecations and removals](https://docs.gitlab.com/api/rest/deprecations/)
[OpenAPI](https://docs.gitlab.com/api/openapi/openapi_interactive/)
[Automate storage management](https://docs.gitlab.com/user/storage_management_automation/)
[Troubleshooting](https://docs.gitlab.com/api/rest/troubleshooting/)
[GraphQL API](https://docs.gitlab.com/api/graphql/)
[OAuth 2.0 identity provider API](https://docs.gitlab.com/api/oauth2/)
[GitLab Duo CLI (duo)](https://docs.gitlab.com/user/gitlab_duo_cli/)
[GitLab CLI (glab)](https://docs.gitlab.com/cli/)
[Editor and IDE extensions](https://docs.gitlab.com/editor_extensions/)
/
  1. [GitLab Docs](https://docs.gitlab.com/)
  2. [Extend](https://docs.gitlab.com/api/)
  3. [REST API](https://docs.gitlab.com/api/rest/)
  4. [Resources](https://docs.gitlab.com/api/api_resources/)
  5. [Container virtual registry](https://docs.gitlab.com/api/container_virtual_registries/)


* * *
# Container virtual registry API
  * Tier: Premium, Ultimate
  * Offering: GitLab.com, GitLab Self-Managed
  * Status: Beta


History
  * [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/548794) in GitLab 18.5 [with a flag](https://docs.gitlab.com/administration/feature_flags/) named `container_virtual_registries`. Disabled by default.
  * [Changed](https://gitlab.com/gitlab-org/gitlab/-/work_items/589631) from experiment to beta in GitLab 18.9.


The availability of these endpoints is controlled by a feature flag. For more information, see the history.
Use this API to:
  * Create and manage virtual registries for the container registry.
  * Configure upstream container registries.
  * Manage cached container images and manifests.


For information about pulling container images through a virtual registry, see [Container virtual registry](https://docs.gitlab.com/user/packages/virtual_registry/container/).
Cloud provider registries are not supported, but [issue 20919](https://gitlab.com/groups/gitlab-org/-/work_items/20919) proposes to change this behavior.
## Manage virtual registries[](https://docs.gitlab.com/api/container_virtual_registries/#manage-virtual-registries "Permalink")
Use the following endpoints to create and manage virtual registries for the container registry.
### List all virtual registries[](https://docs.gitlab.com/api/container_virtual_registries/#list-all-virtual-registries "Permalink")
Lists all container virtual registries for a group.
```
GET /groups/:id/-/virtual_registries/container/registries
```

Supported attributes:
Attribute | Type | Required | Description
---|---|---|---
`id` | string or integer | Yes | The group ID or full-group path. Must be a top-level group.
Example request:
shell
```
curl --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/groups/5/-/virtual_registries/container/registries"
```

Example response:
json
```
[
  {
    "id": 1,
    "group_id": 5,
    "name": "my-container-virtual-registry",
    "description": "My container virtual registry",
    "created_at": "2024-05-30T12:28:27.855Z",
    "updated_at": "2024-05-30T12:28:27.855Z"
  }
]
```

### Create a virtual registry[](https://docs.gitlab.com/api/container_virtual_registries/#create-a-virtual-registry "Permalink")
Creates a container virtual registry for a group.
```
POST /groups/:id/-/virtual_registries/container/registries
```

Attribute | Type | Required | Description
---|---|---|---
`id` | string or integer | Yes | The group ID or full-group path. Must be a top-level group.
`name` | string | Yes | The name of the virtual registry.
`description` | string | No | The description of the virtual registry.
You can create a maximum of 5 virtual registries per group.
Example request:
shell
```
curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --header "Accept: application/json" \
     --data '{"name": "my-container-virtual-registry", "description": "My container virtual registry"}' \
     --url "https://gitlab.example.com/api/v4/groups/5/-/virtual_registries/container/registries"
```

Example response:
json
```
{
  "id": 1,
  "group_id": 5,
  "name": "my-container-virtual-registry",
  "description": "My container virtual registry",
  "created_at": "2024-05-30T12:28:27.855Z",
  "updated_at": "2024-05-30T12:28:27.855Z"
}
```

### Retrieve a virtual registry[](https://docs.gitlab.com/api/container_virtual_registries/#retrieve-a-virtual-registry "Permalink")
Retrieves a specified container virtual registry.
```
GET /virtual_registries/container/registries/:id
```

Parameters:
Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the container virtual registry.
Example request:
shell
```
curl --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/registries/1"
```

Example response:
json
```
{
  "id": 1,
  "group_id": 5,
  "name": "my-container-virtual-registry",
  "description": "My container virtual registry",
  "created_at": "2024-05-30T12:28:27.855Z",
  "updated_at": "2024-05-30T12:28:27.855Z",
  "registry_upstreams": [
    {
      "id": 2,
      "position": 1,
      "upstream_id": 2
    }
  ]
}
```

### Update a virtual registry[](https://docs.gitlab.com/api/container_virtual_registries/#update-a-virtual-registry "Permalink")
Updates a specified container virtual registry.
```
PATCH /virtual_registries/container/registries/:id
```

Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the container virtual registry.
`description` | string | No | The description of the virtual registry.
`name` | string | No | The name of the virtual registry.
You must provide at least one of the optional parameters (`name` or `description`) in your request.
Example request:
shell
```
curl --request PATCH \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --data '{"name": "my-container-virtual-registry", "description": "My container virtual registry"}' \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/registries/1"
```

If successful, returns a [`200 OK`](https://docs.gitlab.com/api/rest/troubleshooting/#status-codes) status code.
### Delete a virtual registry[](https://docs.gitlab.com/api/container_virtual_registries/#delete-a-virtual-registry "Permalink")
When you delete a virtual registry, you also delete all associated upstream registries that are not shared with other virtual registries, along with their cached container images and manifests.
Deletes a specified container virtual registry.
```
DELETE /virtual_registries/container/registries/:id
```

Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the container virtual registry.
Example request:
shell
```
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/registries/1"
```

If successful, returns a [`204 No Content`](https://docs.gitlab.com/api/rest/troubleshooting/#status-codes) status code.
### Delete cache entries for a virtual registry[](https://docs.gitlab.com/api/container_virtual_registries/#delete-cache-entries-for-a-virtual-registry "Permalink")
History
  * [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/538327) in GitLab 18.7 [with a flag](https://docs.gitlab.com/administration/feature_flags/) named `container_virtual_registries`. Disabled by default.
  * [Changed](https://gitlab.com/gitlab-org/gitlab/-/work_items/589631) from experiment to beta in GitLab 18.9.


Schedules all cache entries for deletion in all exclusive upstream registries for a container virtual registry. Cache entries are not scheduled for deletion for upstream registries that are associated with other virtual registries.
```
DELETE /virtual_registries/container/registries/:id/cache
```

Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the container virtual registry.
Example request:
shell
```
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/registries/1/cache"
```

If successful, returns a [`204 No Content`](https://docs.gitlab.com/api/rest/troubleshooting/#status-codes) status code.
## Manage upstream registries[](https://docs.gitlab.com/api/container_virtual_registries/#manage-upstream-registries "Permalink")
Use the following endpoints to configure and manage upstream container registries.
### List all upstream registries for a top-level group[](https://docs.gitlab.com/api/container_virtual_registries/#list-all-upstream-registries-for-a-top-level-group "Permalink")
Lists all upstream container registries for a top-level group.
```
GET /groups/:id/-/virtual_registries/container/upstreams
```

Supported attributes:
Attribute | Type | Required | Description
---|---|---|---
`id` | string or integer | Yes | The group ID or full-group path. Must be a top-level group.
`page` | integer | No | The page number. Defaults to 1.
`per_page` | integer | No | The number of items per page. Defaults to 20.
`upstream_name` | string | No | The name of the upstream registry for fuzzy search filtering by name.
Example request:
shell
```
curl --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/groups/5/-/virtual_registries/container/upstreams"
```

Example response:
json
```
[
  {
    "id": 1,
    "group_id": 5,
    "url": "https://registry-1.docker.io",
    "name": "Docker Hub",
    "description": "Docker Hub registry",
    "cache_validity_hours": 24,
    "username": "user",
    "created_at": "2024-05-30T12:28:27.855Z",
    "updated_at": "2024-05-30T12:28:27.855Z"
  }
]
```

### Test connection before creating an upstream registry[](https://docs.gitlab.com/api/container_virtual_registries/#test-connection-before-creating-an-upstream-registry "Permalink")
History
  * [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/578679) in GitLab 18.9 [with a flag](https://docs.gitlab.com/administration/feature_flags/) named `container_virtual_registries`. Disabled by default.
  * [Changed](https://gitlab.com/gitlab-org/gitlab/-/work_items/589631) from experiment to beta in GitLab 18.9.


Tests the connection to a container upstream registry that has not been added to the virtual registry yet. This endpoint validates connectivity and credentials before creating the upstream registry.
```
POST /groups/:id/-/virtual_registries/container/upstreams/test
```

Supported attributes:
Attribute | Type | Required | Description
---|---|---|---
`id` | string or integer | Yes | The group ID or full-group path. Must be a top-level group.
`url` | string | Yes | The URL of the upstream registry.
`password` | string | No | The password of the upstream registry.
`username` | string | No | The username of the upstream registry.
You must include both the `username` and `password` in the request, or neither. If not set, a public (anonymous) request is used to access the upstream.
#### Test workflow[](https://docs.gitlab.com/api/container_virtual_registries/#test-workflow "Permalink")
The `test` endpoint sends a HEAD request to the provided upstream URL using a test path to validate connectivity and authentication. The response received from the HEAD request is interpreted as follows:
Upstream Response | Description | Result
---|---|---
2XX | Success. Upstream accessible | `{ "success": true }`
404 | Success. Upstream accessible, but test artifact not found | `{ "success": true }`
401 | Authentication failed | `{ "success": false, "result": "Error: 401 - Unauthorized" }`
403 | Access forbidden | `{ "success": false, "result": "Error: 403 - Forbidden" }`
5XX | Upstream server error | `{ "success": false, "result": "Error: 5XX - Server Error" }`
Network errors | Connection/timeout issues | `{ "success": false, "result": "Error: Connection timeout" }`
Example request:
shell
```
curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --url "https://gitlab.example.com/api/v4/groups/5/-/virtual_registries/container/upstreams/test"
     --data '{"url": "https://registry-1.docker.io", "username": "<your_username>", "password": "<your_password>"}' \
```

Example response:
json
```
{
  "success": true
}
```

Both `2XX` (found) and `404 Not Found` HTTP status codes from the upstream registry are considered successful responses, as they indicate the upstream is reachable and properly configured.
### List all upstream registries for a virtual registry[](https://docs.gitlab.com/api/container_virtual_registries/#list-all-upstream-registries-for-a-virtual-registry "Permalink")
Lists all upstream registries for a container virtual registry.
```
GET /virtual_registries/container/registries/:id/upstreams
```

Supported attributes:
Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the container virtual registry.
Example request:
shell
```
curl --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/registries/1/upstreams"
```

Example response:
json
```
[
  {
    "id": 1,
    "group_id": 5,
    "url": "https://registry-1.docker.io",
    "name": "Docker Hub",
    "description": "Docker Hub registry",
    "cache_validity_hours": 24,
    "username": "user",
    "created_at": "2024-05-30T12:28:27.855Z",
    "updated_at": "2024-05-30T12:28:27.855Z",
    "registry_upstream": {
      "id": 1,
      "registry_id": 1,
      "position": 1
    }
  }
]
```

### Create an upstream registry[](https://docs.gitlab.com/api/container_virtual_registries/#create-an-upstream-registry "Permalink")
Creates an upstream container registry for a specified container virtual registry.
```
POST /virtual_registries/container/registries/:id/upstreams
```

Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the container virtual registry.
`url` | string | Yes | The URL of the upstream container registry.
`name` | string | Yes | The name of the upstream registry.
`cache_validity_hours` | integer | No | The cache validity period for container images. Defaults to 24 hours.
`description` | string | No | The description of the upstream registry.
`password` | string | No | The password of the upstream registry.
`username` | string | No | The username of the upstream registry.
You must include both the `username` and `password` in the request, or not at all. If not set, a public (anonymous) request is used to access the upstream.
You cannot add two upstreams with the same URL and credentials (`username` and `password`) to the same top-level group. Instead, you can either:
  * Set different credentials for each upstream with the same URL.
  * Associate an upstream with multiple virtual registries.


You can add a maximum of 5 upstream registries to each virtual registry.
Example request:
shell
```
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --data '{"url": "https://registry-1.docker.io", "name": "Docker Hub", "description": "Docker Hub registry", "username": "<your_username>", "password": "<your_password>", "cache_validity_hours": 48}' \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/registries/1/upstreams"
```

Example response:
json
```
{
  "id": 1,
  "group_id": 5,
  "url": "https://registry-1.docker.io",
  "name": "Docker Hub",
  "description": "Docker Hub registry",
  "cache_validity_hours": 48,
  "username": "user",
  "created_at": "2024-05-30T12:28:27.855Z",
  "updated_at": "2024-05-30T12:28:27.855Z",
  "registry_upstream": {
    "id": 1,
    "registry_id": 1,
    "position": 1
  }
}
```

### Retrieve an upstream registry[](https://docs.gitlab.com/api/container_virtual_registries/#retrieve-an-upstream-registry "Permalink")
Retrieves a specified upstream container registry.
```
GET /virtual_registries/container/upstreams/:id
```

Parameters:
Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the upstream registry.
Example request:
shell
```
curl --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/upstreams/1"
```

Example response:
json
```
{
  "id": 1,
  "group_id": 5,
  "url": "https://registry-1.docker.io",
  "name": "Docker Hub",
  "description": "Docker Hub registry",
  "cache_validity_hours": 24,
  "username": "user",
  "created_at": "2024-05-30T12:28:27.855Z",
  "updated_at": "2024-05-30T12:28:27.855Z",
  "registry_upstreams": [
    {
      "id": 1,
      "registry_id": 1,
      "position": 1
    }
  ]
}
```

### Update an upstream registry[](https://docs.gitlab.com/api/container_virtual_registries/#update-an-upstream-registry "Permalink")
Updates a specified upstream container registry.
```
PATCH /virtual_registries/container/upstreams/:id
```

Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the upstream registry.
`cache_validity_hours` | integer | No | The cache validity period for container images. Defaults to 24 hours.
`description` | string | No | The description of the upstream registry.
`name` | string | No | The name of the upstream registry.
`password` | string | No | The password of the upstream registry.
`url` | string | No | The URL of the upstream registry.
`username` | string | No | The username of the upstream registry.
You must provide at least one of the optional parameters in your request.
The `username` and `password` must be provided together, or not at all. If not set, a public (anonymous) request is used to access the upstream.
Example request:
shell
```
curl --request PATCH --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --data '{"cache_validity_hours": 72}' \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/upstreams/1"
```

If successful, returns a [`200 OK`](https://docs.gitlab.com/api/rest/troubleshooting/#status-codes) status code.
### Update an upstream registry position[](https://docs.gitlab.com/api/container_virtual_registries/#update-an-upstream-registry-position "Permalink")
Updates the position of an upstream container registry in an ordered list for a container virtual registry.
```
PATCH /virtual_registries/container/registry_upstreams/:id
```

Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the upstream registry association.
`position` | integer | Yes | The position of the upstream registry. Between 1 and 20.
Example request:
shell
```
curl --request PATCH --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --data '{"position": 5}' \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/registry_upstreams/1"
```

If successful, returns a [`200 OK`](https://docs.gitlab.com/api/rest/troubleshooting/#status-codes) status code.
### Delete an upstream registry[](https://docs.gitlab.com/api/container_virtual_registries/#delete-an-upstream-registry "Permalink")
Deletes a specified upstream container registry.
```
DELETE /virtual_registries/container/upstreams/:id
```

Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the upstream registry.
Example request:
shell
```
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/upstreams/1"
```

If successful, returns a [`204 No Content`](https://docs.gitlab.com/api/rest/troubleshooting/#status-codes) status code.
### Associate an upstream with a registry[](https://docs.gitlab.com/api/container_virtual_registries/#associate-an-upstream-with-a-registry "Permalink")
Associates a specified upstream container registry with a specified container virtual registry.
```
POST /virtual_registries/container/registry_upstreams
```

Attribute | Type | Required | Description
---|---|---|---
`registry_id` | integer | Yes | The ID of the container virtual registry.
`upstream_id` | integer | Yes | The ID of the container upstream registry.
You can associate a maximum of 5 upstream registries with each virtual registry.
Example request:
shell
```
curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --header "Accept: application/json" \
     --data '{"registry_id": 1, "upstream_id": 2}' \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/registry_upstreams"
```

Example response:
json
```
{
  "id": 5,
  "registry_id": 1,
  "upstream_id": 2,
  "position": 2
}
```

### Disassociate an upstream from a registry[](https://docs.gitlab.com/api/container_virtual_registries/#disassociate-an-upstream-from-a-registry "Permalink")
Removes the association between a specified upstream container registry and a specified container virtual registry.
```
DELETE /virtual_registries/container/registry_upstreams/:id
```

Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the upstream registry association.
Example request:
shell
```
curl --request DELETE \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/registry_upstreams/1"
```

If successful, returns a [`204 No Content`](https://docs.gitlab.com/api/rest/troubleshooting/#status-codes) status code.
### Delete cache entries for an upstream registry[](https://docs.gitlab.com/api/container_virtual_registries/#delete-cache-entries-for-an-upstream-registry "Permalink")
History
  * [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/538327) in GitLab 18.7 [with a flag](https://docs.gitlab.com/administration/feature_flags/) named `container_virtual_registries`. Disabled by default.
  * [Changed](https://gitlab.com/gitlab-org/gitlab/-/work_items/589631) from experiment to beta in GitLab 18.9.


Schedules all cache entries for deletion for a specified upstream registry.
```
DELETE /virtual_registries/container/upstreams/:id/cache
```

Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the upstream registry.
Example request:
shell
```
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/upstreams/1/cache"
```

If successful, returns a [`204 No Content`](https://docs.gitlab.com/api/rest/troubleshooting/#status-codes) status code.
### Test connection to an upstream registry with override parameters[](https://docs.gitlab.com/api/container_virtual_registries/#test-connection-to-an-upstream-registry-with-override-parameters "Permalink")
History
  * [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/578679) in GitLab 18.9 [with a flag](https://docs.gitlab.com/administration/feature_flags/) named `container_virtual_registries`. Disabled by default.
  * [Changed](https://gitlab.com/gitlab-org/gitlab/-/work_items/589631) from experiment to beta in GitLab 18.9.


Tests the connection to an existing container upstream registry with optional parameter overrides.
This way, you can test changes to the URL, username, or password before updating the upstream registry configuration.
```
POST /virtual_registries/container/upstreams/:id/test
```

Supported attributes:
Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the upstream registry.
`password` | string | No | The override password for testing.
`url` | string | No | The override URL for testing. If provided, tests connection to this URL instead of the upstream’s configured URL.
`username` | string | No | The override username for testing.
#### How the test works[](https://docs.gitlab.com/api/container_virtual_registries/#how-the-test-works "Permalink")
The endpoint performs a HEAD request to the upstream URL using a test path to validate connectivity and authentication. If the upstream has a cached artifact, the relative path of the upstream is used for testing. Otherwise, a placeholder path is used.
The test behavior depends on the parameters provided:
  * No parameters: Tests the upstream with its current configuration (existing URL, username, and password)
  * URL override: Tests connectivity to the new URL (username and password must be provided together or not at all)
  * Credential override: Tests the existing URL with new credentials


The response received from the HEAD request is interpreted as follows:
Upstream Response | Meaning | Result
---|---|---
2XX | Success. Upstream accessible | `{ "success": true }`
404 | Success. Upstream accessible, but test artifact not found | `{ "success": true }`
401 | Authentication failed | `{ "success": false, "result": "Error: 401 - Unauthorized" }`
403 | Access forbidden | `{ "success": false, "result": "Error: 403 - Forbidden" }`
5XX | Upstream server error | `{ "success": false, "result": "Error: 5XX - Server Error" }`
Network errors | Connection or timeout issues | `{ "success": false, "result": "Error: Connection timeout" }`
Both `2XX` (found) and `404 Not Found` responses indicate successful connectivity and authentication to the upstream registry. The test does not validate whether a specific artifact exists.
Example request (test existing configuration):
shell
```
curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/upstreams/1/test"
```

Example request (test with URL override and no credentials):
shell
```
curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --data '{"url": "https://registry-1.docker.io"}' \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/upstreams/1/test"
```

Example request (test with URL and credential override):
shell
```
curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --data '{"url": "https://registry-1.docker.io", "username": "<newuser>", "password": "<newpass>"}' \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/upstreams/1/test"
```

Example request (test with credential override):
shell
```
curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     --data '{"username": "<newuser>", "password": "<newpass>"}' \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/upstreams/1/test"
```

Example response:
json
```
{
  "success": true
}
```

## Manage cache entries[](https://docs.gitlab.com/api/container_virtual_registries/#manage-cache-entries "Permalink")
Use the following endpoints to manage cached container images and manifests for a container virtual registry.
### List upstream registry cache entries[](https://docs.gitlab.com/api/container_virtual_registries/#list-upstream-registry-cache-entries "Permalink")
Lists cached container images and manifests for a container upstream registry.
```
GET /virtual_registries/container/upstreams/:id/cache_entries
```

Supported attributes:
Attribute | Type | Required | Description
---|---|---|---
`id` | integer | Yes | The ID of the upstream registry.
`page` | integer | No | The page number. Defaults to 1.
`per_page` | integer | No | The number of items per page. Defaults to 20.
`search` | string | No | The search query for the relative path of the container image (for example, `library/nginx`).
Example request:
shell
```
curl --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/upstreams/1/cache_entries?search=library/nginx"
```

Example response:
json
```
[
  {
    "id": "MTUgbGlicmFyeS9uZ2lueC9tYW5pZmVzdC9zaGEyNTY6YWJjZGVmZ2hpams=",
    "group_id": 5,
    "upstream_id": 1,
    "upstream_checked_at": "2024-05-30T12:28:27.855Z",
    "file_md5": "44f21d5190b5a6df8089f54799628d7e",
    "file_sha1": "74d101856d26f2db17b39bd22d3204021eb0bf7d",
    "size": 2048,
    "relative_path": "library/nginx/manifests/latest",
    "content_type": "application/vnd.docker.distribution.manifest.v2+json",
    "upstream_etag": "\"686897696a7c876b7e\"",
    "created_at": "2024-05-30T12:28:27.855Z",
    "updated_at": "2024-05-30T12:28:27.855Z",
    "downloads_count": 5,
    "downloaded_at": "2024-06-05T14:58:32.855Z"
  }
]
```

### Delete an upstream registry cache entry[](https://docs.gitlab.com/api/container_virtual_registries/#delete-an-upstream-registry-cache-entry "Permalink")
Deletes a specified cached container image or manifest for an upstream registry.
```
DELETE /virtual_registries/container/cache_entries/*id
```

Attribute | Type | Required | Description
---|---|---|---
`id` | string | Yes | The cache entry ID which is the base64-encoded upstream ID and relative path of the cache entry (for example, ‘bGlicmFyeS9uZ2lueC9tYW5pZmVzdHMvbGF0ZXN0’).
Example request:
shell
```
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Accept: application/json" \
     --url "https://gitlab.example.com/api/v4/virtual_registries/container/cache_entries/bGlicmFyeS9uZ2lueC9tYW5pZmVzdHMvbGF0ZXN0"
```

If successful, returns a [`204 No Content`](https://docs.gitlab.com/api/rest/troubleshooting/#status-codes) status code.
Was this page helpful?YesNo
Edit this page
  *     * [ Open in Web IDE`.`Quickly and easily edit multiple files. ](https://gitlab.com/-/ide/project/gitlab-org/gitlab/edit/master/-/doc/api/container_virtual_registries.md)
    * [ View page sourceEdit this file only. ](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/api/container_virtual_registries.md)
    * [ Create an issueSuggest improvements. ](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Documentation)


  * [Manage virtual registries](https://docs.gitlab.com/api/container_virtual_registries/#manage-virtual-registries)
  * [List all virtual registries](https://docs.gitlab.com/api/container_virtual_registries/#list-all-virtual-registries)
  * [Create a virtual registry](https://docs.gitlab.com/api/container_virtual_registries/#create-a-virtual-registry)
  * [Retrieve a virtual registry](https://docs.gitlab.com/api/container_virtual_registries/#retrieve-a-virtual-registry)
  * [Update a virtual registry](https://docs.gitlab.com/api/container_virtual_registries/#update-a-virtual-registry)
  * [Delete a virtual registry](https://docs.gitlab.com/api/container_virtual_registries/#delete-a-virtual-registry)
  * [Delete cache entries for a virtual registry](https://docs.gitlab.com/api/container_virtual_registries/#delete-cache-entries-for-a-virtual-registry)
  * [Manage upstream registries](https://docs.gitlab.com/api/container_virtual_registries/#manage-upstream-registries)
  * [List all upstream registries for a top-level group](https://docs.gitlab.com/api/container_virtual_registries/#list-all-upstream-registries-for-a-top-level-group)
  * [Test connection before creating an upstream registry](https://docs.gitlab.com/api/container_virtual_registries/#test-connection-before-creating-an-upstream-registry)
  * [Test workflow](https://docs.gitlab.com/api/container_virtual_registries/#test-workflow)
  * [List all upstream registries for a virtual registry](https://docs.gitlab.com/api/container_virtual_registries/#list-all-upstream-registries-for-a-virtual-registry)
  * [Create an upstream registry](https://docs.gitlab.com/api/container_virtual_registries/#create-an-upstream-registry)
  * [Retrieve an upstream registry](https://docs.gitlab.com/api/container_virtual_registries/#retrieve-an-upstream-registry)
  * [Update an upstream registry](https://docs.gitlab.com/api/container_virtual_registries/#update-an-upstream-registry)
  * [Update an upstream registry position](https://docs.gitlab.com/api/container_virtual_registries/#update-an-upstream-registry-position)
  * [Delete an upstream registry](https://docs.gitlab.com/api/container_virtual_registries/#delete-an-upstream-registry)
  * [Associate an upstream with a registry](https://docs.gitlab.com/api/container_virtual_registries/#associate-an-upstream-with-a-registry)
  * [Disassociate an upstream from a registry](https://docs.gitlab.com/api/container_virtual_registries/#disassociate-an-upstream-from-a-registry)
  * [Delete cache entries for an upstream registry](https://docs.gitlab.com/api/container_virtual_registries/#delete-cache-entries-for-an-upstream-registry)
  * [Test connection to an upstream registry with override parameters](https://docs.gitlab.com/api/container_virtual_registries/#test-connection-to-an-upstream-registry-with-override-parameters)
  * [How the test works](https://docs.gitlab.com/api/container_virtual_registries/#how-the-test-works)
  * [Manage cache entries](https://docs.gitlab.com/api/container_virtual_registries/#manage-cache-entries)
  * [List upstream registry cache entries](https://docs.gitlab.com/api/container_virtual_registries/#list-upstream-registry-cache-entries)
  * [Delete an upstream registry cache entry](https://docs.gitlab.com/api/container_virtual_registries/#delete-an-upstream-registry-cache-entry)


[![GitLab Docs logo](https://docs.gitlab.com/gitlab-logo-footer.svg)](https://docs.gitlab.com/)
  * [Facebook](https://www.facebook.com/gitlab)
  * [LinkedIn](https://www.linkedin.com/company/gitlab-com)
  * [Twitter](https://twitter.com/gitlab)
  * [YouTube](https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg)

[![Creative Commons License](https://docs.gitlab.com/by-sa.svg)](https://creativecommons.org/licenses/by-sa/4.0/)
Company
  * [About GitLab](https://about.gitlab.com/company/)
  * [View pricing](https://about.gitlab.com/pricing/)
  * [Try GitLab for free](https://about.gitlab.com/free-trial/)


Feedback
  * [View page source](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/api/container_virtual_registries.md)
  * [Edit in Web IDE](https://gitlab.com/-/ide/project/gitlab-org/gitlab/edit/master/-/doc/api/container_virtual_registries.md)
  * [Contribute to GitLab](https://about.gitlab.com/community/contribute/)
  * [Suggest updates](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Documentation)


Help & Community
  * [Get certified](https://university.gitlab.com/pages/certifications)
  * [Get support](https://about.gitlab.com/support/)
  * [Post on the GitLab forum](https://forum.gitlab.com/new-topic?title=topic%20title&body=topic%20body&tags=docs-feedback)


Resources
  * [Terms](https://about.gitlab.com/terms/)
  * [Privacy statement](https://about.gitlab.com/privacy/)
  * [Use of generative AI](https://docs.gitlab.com/legal/use_generative_ai/)
  * [Acceptable use of user licenses](https://docs.gitlab.com/legal/licensing_policy/)
  * Cookie Preferences


![](https://cdn.bizible.com/ipv?_biz_r=&_biz_h=800054037&_biz_u=10503924d6784ad3f2d352558587a67a&_biz_l=https%3A%2F%2Fdocs.gitlab.com%2Fapi%2Fcontainer_virtual_registries%2F&_biz_t=1772174241907&_biz_i=Container%20virtual%20registry%20API%20%7C%20GitLab%20Docs&_biz_n=29&rnd=435905&cdn_o=a&_biz_z=1772174241908)
![Company Logo](https://cdn.cookielaw.org/logos/aa14a5c8-79e3-442a-8177-464ad850b19d/e46c1d0d-1f66-481f-bc06-5427671431da/253e6fee-c4c0-4b60-bc35-79cdae5dda32/gitlab-logo-100.png)
## Privacy Preference Center
## Privacy Preference Center
  * ### Your Privacy
  * ### Strictly Necessary Cookies
  * ### Functionality Cookies
  * ### Performance and Analytics Cookies
  * ### Targeting and Advertising Cookies
  * ### Ad User Data
  * ### Ad Personalization


#### Your Privacy
When you visit any website, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and change our default settings. However, blocking some types of cookies may impact your experience of the site and the services we are able to offer.
[Cookie Policy](https://about.gitlab.com/privacy/cookies/)
**User ID:** 42fad8d5-ed56-4786-8d74-3c72635252d2
_This User ID will be used as a unique identifier while storing and accessing your preferences for future._
**Timestamp:** --
#### Strictly Necessary Cookies
Always Active
These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, enabling you to securely log into the site, filling in forms, or using the customer checkout. GitLab processes any personal data collected through these cookies on the basis of our legitimate interest.
Cookies Details
#### Functionality Cookies
Functionality Cookies
These cookies enable helpful but non-essential website functions that improve your website experience. By recognizing you when you return to our website, they may, for example, allow us to personalize our content for you or remember your preferences. If you do not allow these cookies then some or all of these services may not function properly. GitLab processes any personal data collected through these cookies on the basis of your consent
Cookies Details
#### Performance and Analytics Cookies
Performance and Analytics Cookies
These cookies allow us and our third-party service providers to recognize and count the number of visitors on our websites and to see how visitors move around our websites when they are using it. This helps us improve our products and ensures that users can easily find what they need on our websites. These cookies usually generate aggregate statistics that are not associated with an individual. To the extent any personal data is collected through these cookies, GitLab processes that data on the basis of your consent.
Cookies Details
#### Targeting and Advertising Cookies
Targeting and Advertising Cookies
These cookies enable different advertising related functions. They may allow us to record information about your visit to our websites, such as pages visited, links followed, and videos viewed so we can make our websites and the advertising displayed on it more relevant to your interests. They may be set through our website by our advertising partners. They may be used by those companies to build a profile of your interests and show you relevant advertisements on other websites. GitLab processes any personal data collected through these cookies on the basis of your consent.
Cookies Details
#### Ad User Data
Ad User Data
Sets consent for sending user data to Google for advertising purposes.
Cookies Details
#### Ad Personalization
Ad Personalization
Sets consent for personalized advertising.
Cookies Details
Back Button
### Cookie List
Filter Button
Consent Leg.Interest
checkbox label label
checkbox label label
checkbox label label
Clear
  * checkbox label label


Apply Cancel
Confirm My Choices
Allow All
[![Powered by Onetrust](https://cdn.cookielaw.org/logos/static/powered_by_logo.svg)](https://www.onetrust.com/products/cookie-consent/)
