diff --git a/ee/app/models/gitlab_subscriptions/features.rb b/ee/app/models/gitlab_subscriptions/features.rb
index 89316ee19eaf8ff934ddfe8239346219faaa2c3f..e4c26f565753d7f6ef253d9942e289ab1e83a011 100644
--- a/ee/app/models/gitlab_subscriptions/features.rb
+++ b/ee/app/models/gitlab_subscriptions/features.rb
@@ -150,6 +150,7 @@ class Features
       microsoft_group_sync
       operations_dashboard
       package_forwarding
+      packages_virtual_registry
       pages_size_limit
       pages_multiple_versions
       productivity_analytics
diff --git a/lib/api/concerns/virtual_registries/packages/endpoint.rb b/ee/lib/api/concerns/virtual_registries/packages/endpoint.rb
similarity index 100%
rename from lib/api/concerns/virtual_registries/packages/endpoint.rb
rename to ee/lib/api/concerns/virtual_registries/packages/endpoint.rb
diff --git a/ee/lib/api/concerns/virtual_registries/packages/maven/shared_setup.rb b/ee/lib/api/concerns/virtual_registries/packages/maven/shared_setup.rb
new file mode 100644
index 0000000000000000000000000000000000000000..10d31e9d14f96b80684542fa087da62c9ce98a5d
--- /dev/null
+++ b/ee/lib/api/concerns/virtual_registries/packages/maven/shared_setup.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+module API
+  module Concerns
+    module VirtualRegistries
+      module Packages
+        module Maven
+          module SharedSetup
+            extend ActiveSupport::Concern
+            include ::API::Helpers::Authentication
+
+            included do
+              feature_category :virtual_registry
+              urgency :low
+
+              authenticate_with do |accept|
+                accept.token_types(:personal_access_token).sent_through(:http_private_token_header)
+                accept.token_types(:deploy_token).sent_through(:http_deploy_token_header)
+                accept.token_types(:job_token).sent_through(:http_job_token_header)
+              end
+
+              after_validation do
+                not_found! unless ::Feature.enabled?(:virtual_registry_maven, current_user)
+                not_found! unless ::Gitlab.config.dependency_proxy.enabled
+                not_found! unless target_group.licensed_feature_available?(:packages_virtual_registry)
+
+                authenticate!
+              end
+            end
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/lib/api/entities/virtual_registries/packages/maven/cache/entry.rb b/ee/lib/api/entities/virtual_registries/packages/maven/cache/entry.rb
similarity index 100%
rename from lib/api/entities/virtual_registries/packages/maven/cache/entry.rb
rename to ee/lib/api/entities/virtual_registries/packages/maven/cache/entry.rb
diff --git a/lib/api/entities/virtual_registries/packages/maven/registry.rb b/ee/lib/api/entities/virtual_registries/packages/maven/registry.rb
similarity index 100%
rename from lib/api/entities/virtual_registries/packages/maven/registry.rb
rename to ee/lib/api/entities/virtual_registries/packages/maven/registry.rb
diff --git a/lib/api/entities/virtual_registries/packages/maven/upstream.rb b/ee/lib/api/entities/virtual_registries/packages/maven/upstream.rb
similarity index 100%
rename from lib/api/entities/virtual_registries/packages/maven/upstream.rb
rename to ee/lib/api/entities/virtual_registries/packages/maven/upstream.rb
diff --git a/lib/api/virtual_registries/packages/maven/cache/entries.rb b/ee/lib/api/virtual_registries/packages/maven/cache/entries.rb
similarity index 83%
rename from lib/api/virtual_registries/packages/maven/cache/entries.rb
rename to ee/lib/api/virtual_registries/packages/maven/cache/entries.rb
index f900b3f1f3bad4181ddb7b6124debd6fd26e925f..deacfc9307f78e239ef93c11be818689da6223cf 100644
--- a/lib/api/virtual_registries/packages/maven/cache/entries.rb
+++ b/ee/lib/api/virtual_registries/packages/maven/cache/entries.rb
@@ -6,23 +6,14 @@ module Packages
       module Maven
         module Cache
           class Entries < ::API::Base
-            include ::API::Helpers::Authentication
+            include ::API::Concerns::VirtualRegistries::Packages::Maven::SharedSetup
             include ::API::PaginationParams
 
-            feature_category :virtual_registry
-            urgency :low
-
-            authenticate_with do |accept|
-              accept.token_types(:personal_access_token).sent_through(:http_private_token_header)
-              accept.token_types(:deploy_token).sent_through(:http_deploy_token_header)
-              accept.token_types(:job_token).sent_through(:http_job_token_header)
-            end
-
             helpers do
               include ::Gitlab::Utils::StrongMemoize
 
-              def require_dependency_proxy_enabled!
-                not_found! unless ::Gitlab.config.dependency_proxy.enabled
+              def target_group
+                request.path.include?('/upstreams') ? upstream.group : cache_entry.group
               end
 
               def upstream
@@ -42,14 +33,6 @@ def cache_entry
               strong_memoize_attr :cache_entry
             end
 
-            after_validation do
-              not_found! unless Feature.enabled?(:virtual_registry_maven, current_user)
-
-              require_dependency_proxy_enabled!
-
-              authenticate!
-            end
-
             namespace 'virtual_registries/packages/maven' do
               namespace :upstreams do
                 route_param :id, type: Integer, desc: 'The ID of the maven virtual registry upstream' do
diff --git a/lib/api/virtual_registries/packages/maven/endpoints.rb b/ee/lib/api/virtual_registries/packages/maven/endpoints.rb
similarity index 91%
rename from lib/api/virtual_registries/packages/maven/endpoints.rb
rename to ee/lib/api/virtual_registries/packages/maven/endpoints.rb
index 5437850785d896807db332f22cbcf388dc4ad016..0e48c012958be3268cbcd28e81f41e016bead0b4 100644
--- a/lib/api/virtual_registries/packages/maven/endpoints.rb
+++ b/ee/lib/api/virtual_registries/packages/maven/endpoints.rb
@@ -5,13 +5,10 @@ module VirtualRegistries
     module Packages
       module Maven
         class Endpoints < ::API::Base
-          include ::API::Helpers::Authentication
+          include ::API::Concerns::VirtualRegistries::Packages::Maven::SharedSetup
           include ::API::Concerns::VirtualRegistries::Packages::Endpoint
           include ::API::APIGuard
 
-          feature_category :virtual_registry
-          urgency :low
-
           AUTHENTICATE_REALM_HEADER = 'WWW-Authenticate'
           AUTHENTICATE_REALM_NAME = 'Basic realm="GitLab Virtual Registry"'
 
@@ -36,10 +33,7 @@ class Endpoints < ::API::Base
             include ::Gitlab::Utils::StrongMemoize
 
             delegate :group, :upstream, :registry_upstream, to: :registry
-
-            def require_dependency_proxy_enabled!
-              not_found! unless ::Gitlab.config.dependency_proxy.enabled
-            end
+            alias_method :target_group, :group
 
             def registry
               ::VirtualRegistries::Packages::Maven::Registry.find(params[:id])
@@ -71,14 +65,6 @@ def unauthorized!(reason = nil)
             end
           end
 
-          after_validation do
-            not_found! unless Feature.enabled?(:virtual_registry_maven, current_user)
-
-            require_dependency_proxy_enabled!
-
-            authenticate!
-          end
-
           namespace 'virtual_registries/packages/maven/:id/*path' do
             desc 'Download endpoint of the Maven virtual registry.' do
               detail 'This feature was introduced in GitLab 17.3. \
@@ -137,7 +123,7 @@ def unauthorized!(reason = nil)
               require_gitlab_workhorse!
               authorize!(:read_virtual_registry, registry)
 
-              etag, content_type, upstream_gid = request.headers.fetch_values(
+              etag, content_type, upstream_gid = headers.fetch_values(
                 'Etag',
                 ::Gitlab::Workhorse::SEND_DEPENDENCY_CONTENT_TYPE_HEADER,
                 UPSTREAM_GID_HEADER
diff --git a/lib/api/virtual_registries/packages/maven/registries.rb b/ee/lib/api/virtual_registries/packages/maven/registries.rb
similarity index 87%
rename from lib/api/virtual_registries/packages/maven/registries.rb
rename to ee/lib/api/virtual_registries/packages/maven/registries.rb
index 7ab9678411f391cee26d4b1d9e3e3e0979d34afc..a5b6a8ad8cfbb89f28106ac0a0ff3d8d9168b714 100644
--- a/lib/api/virtual_registries/packages/maven/registries.rb
+++ b/ee/lib/api/virtual_registries/packages/maven/registries.rb
@@ -5,20 +5,15 @@ module VirtualRegistries
     module Packages
       module Maven
         class Registries < ::API::Base
-          include ::API::Helpers::Authentication
-
-          feature_category :virtual_registry
-          urgency :low
-
-          authenticate_with do |accept|
-            accept.token_types(:personal_access_token).sent_through(:http_private_token_header)
-            accept.token_types(:deploy_token).sent_through(:http_deploy_token_header)
-            accept.token_types(:job_token).sent_through(:http_job_token_header)
-          end
+          include ::API::Concerns::VirtualRegistries::Packages::Maven::SharedSetup
 
           helpers do
             include ::Gitlab::Utils::StrongMemoize
 
+            def target_group
+              request.path.include?('/groups') ? group : registry.group
+            end
+
             def group
               find_group!(params[:id])
             end
@@ -32,18 +27,6 @@ def registry
             def policy_subject
               ::VirtualRegistries::Packages::Policies::Group.new(group)
             end
-
-            def require_dependency_proxy_enabled!
-              not_found! unless ::Gitlab.config.dependency_proxy.enabled
-            end
-          end
-
-          after_validation do
-            not_found! unless Feature.enabled?(:virtual_registry_maven, current_user)
-
-            require_dependency_proxy_enabled!
-
-            authenticate!
           end
 
           resource :groups, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
diff --git a/lib/api/virtual_registries/packages/maven/upstreams.rb b/ee/lib/api/virtual_registries/packages/maven/upstreams.rb
similarity index 91%
rename from lib/api/virtual_registries/packages/maven/upstreams.rb
rename to ee/lib/api/virtual_registries/packages/maven/upstreams.rb
index 8bb1c9011914423327581c1313386f1e0d7853c5..9b21822f71173337b7976f2ab97188b45f3ef744 100644
--- a/lib/api/virtual_registries/packages/maven/upstreams.rb
+++ b/ee/lib/api/virtual_registries/packages/maven/upstreams.rb
@@ -5,24 +5,15 @@ module VirtualRegistries
     module Packages
       module Maven
         class Upstreams < ::API::Base
-          include ::API::Helpers::Authentication
-
-          feature_category :virtual_registry
-          urgency :low
-
-          authenticate_with do |accept|
-            accept.token_types(:personal_access_token).sent_through(:http_private_token_header)
-            accept.token_types(:deploy_token).sent_through(:http_deploy_token_header)
-            accept.token_types(:job_token).sent_through(:http_job_token_header)
-          end
+          include ::API::Concerns::VirtualRegistries::Packages::Maven::SharedSetup
 
           helpers do
             include ::Gitlab::Utils::StrongMemoize
 
             delegate :group, :registry_upstream, to: :registry
 
-            def require_dependency_proxy_enabled!
-              not_found! unless Gitlab.config.dependency_proxy.enabled
+            def target_group
+              request.path.include?('/registries') ? group : upstream.group
             end
 
             def registry
@@ -36,14 +27,6 @@ def upstream
             strong_memoize_attr :upstream
           end
 
-          after_validation do
-            not_found! unless Feature.enabled?(:virtual_registry_maven, current_user)
-
-            require_dependency_proxy_enabled!
-
-            authenticate!
-          end
-
           namespace 'virtual_registries/packages/maven' do
             namespace :registries do
               route_param :id, type: Integer, desc: 'The ID of the maven virtual registry' do
diff --git a/ee/lib/ee/api/api.rb b/ee/lib/ee/api/api.rb
index e82bbd7bae55bed96137749748692be3245669bf..dba3ed0e650004f73abf489283656966109024bb 100644
--- a/ee/lib/ee/api/api.rb
+++ b/ee/lib/ee/api/api.rb
@@ -80,6 +80,10 @@ module API
         mount ::API::Chat
         mount ::API::DuoCodeReview
         mount ::API::SecurityScans
+        mount ::API::VirtualRegistries::Packages::Maven::Registries
+        mount ::API::VirtualRegistries::Packages::Maven::Upstreams
+        mount ::API::VirtualRegistries::Packages::Maven::Cache::Entries
+        mount ::API::VirtualRegistries::Packages::Maven::Endpoints
 
         mount ::API::Internal::AppSec::Dast::SiteValidations
         mount ::API::Internal::Search::Zoekt
diff --git a/spec/features/api/virtual_registries/packages/maven_spec.rb b/ee/spec/features/virtual_registries/packages/maven_spec.rb
similarity index 95%
rename from spec/features/api/virtual_registries/packages/maven_spec.rb
rename to ee/spec/features/virtual_registries/packages/maven_spec.rb
index af141cc75350d29e234cac078a7e8d8d9fb57950..f1bf4fd143ea790ca0cc98970b97c2ef187bd081 100644
--- a/spec/features/api/virtual_registries/packages/maven_spec.rb
+++ b/ee/spec/features/virtual_registries/packages/maven_spec.rb
@@ -10,6 +10,7 @@
   let_it_be(:user) { create(:user, owner_of: group) }
   let_it_be(:personal_access_token) { create(:personal_access_token, user: user) }
   let_it_be(:registry) { create(:virtual_registries_packages_maven_registry, group: group) }
+  let_it_be(:upstream) { create(:virtual_registries_packages_maven_upstream, registry: registry) }
 
   let_it_be(:external_server) do
     handler = ->(env) do
@@ -23,10 +24,6 @@
     run_server(handler)
   end
 
-  let_it_be(:upstream) do
-    create(:virtual_registries_packages_maven_upstream, registry: registry)
-  end
-
   let(:api_path) { "/virtual_registries/packages/maven/#{registry.id}/file" }
   let(:url) { capybara_url(api(api_path)) }
   let(:authorization) do
@@ -38,6 +35,7 @@
   before do
     upstream.update_column(:url, external_server.base_url) # avoids guard that rejects local urls
     stub_config(dependency_proxy: { enabled: true })
+    stub_licensed_features(packages_virtual_registry: true)
     allow(Gitlab::CurrentSettings).to receive(:allow_local_requests_from_web_hooks_and_services?).and_return(true)
   end
 
diff --git a/spec/lib/api/entities/virtual_registries/packages/maven/cache/entry_spec.rb b/ee/spec/lib/api/entities/virtual_registries/packages/maven/cache/entry_spec.rb
similarity index 100%
rename from spec/lib/api/entities/virtual_registries/packages/maven/cache/entry_spec.rb
rename to ee/spec/lib/api/entities/virtual_registries/packages/maven/cache/entry_spec.rb
diff --git a/spec/lib/api/entities/virtual_registries/packages/maven/registry_spec.rb b/ee/spec/lib/api/entities/virtual_registries/packages/maven/registry_spec.rb
similarity index 100%
rename from spec/lib/api/entities/virtual_registries/packages/maven/registry_spec.rb
rename to ee/spec/lib/api/entities/virtual_registries/packages/maven/registry_spec.rb
diff --git a/spec/lib/api/entities/virtual_registries/packages/maven/upstream_spec.rb b/ee/spec/lib/api/entities/virtual_registries/packages/maven/upstream_spec.rb
similarity index 100%
rename from spec/lib/api/entities/virtual_registries/packages/maven/upstream_spec.rb
rename to ee/spec/lib/api/entities/virtual_registries/packages/maven/upstream_spec.rb
diff --git a/spec/requests/api/virtual_registries/packages/maven/cache/entries_spec.rb b/ee/spec/requests/api/virtual_registries/packages/maven/cache/entries_spec.rb
similarity index 97%
rename from spec/requests/api/virtual_registries/packages/maven/cache/entries_spec.rb
rename to ee/spec/requests/api/virtual_registries/packages/maven/cache/entries_spec.rb
index b2069b269f1c8e99c10603ae1801f62d89d95ec6..617bf5726ba5f155215575ea57e7fd8a22c78c99 100644
--- a/spec/requests/api/virtual_registries/packages/maven/cache/entries_spec.rb
+++ b/ee/spec/requests/api/virtual_registries/packages/maven/cache/entries_spec.rb
@@ -41,6 +41,7 @@
     it_behaves_like 'disabled virtual_registry_maven feature flag'
     it_behaves_like 'maven virtual registry disabled dependency proxy'
     it_behaves_like 'maven virtual registry not authenticated user'
+    it_behaves_like 'maven virtual registry feature not licensed'
 
     context 'with invalid upstream' do
       where(:upstream_id, :status) do
@@ -132,6 +133,7 @@
     it_behaves_like 'disabled virtual_registry_maven feature flag'
     it_behaves_like 'maven virtual registry disabled dependency proxy'
     it_behaves_like 'maven virtual registry not authenticated user'
+    it_behaves_like 'maven virtual registry feature not licensed'
 
     context 'for different user roles' do
       where(:user_role, :status) do
diff --git a/spec/requests/api/virtual_registries/packages/maven/endpoints_spec.rb b/ee/spec/requests/api/virtual_registries/packages/maven/endpoints_spec.rb
similarity index 98%
rename from spec/requests/api/virtual_registries/packages/maven/endpoints_spec.rb
rename to ee/spec/requests/api/virtual_registries/packages/maven/endpoints_spec.rb
index eb88a1c3e132c6c62181a5862e78a3896be93df8..01dddb1a47fac31bc3e0b073b3362f372815e2be 100644
--- a/spec/requests/api/virtual_registries/packages/maven/endpoints_spec.rb
+++ b/ee/spec/requests/api/virtual_registries/packages/maven/endpoints_spec.rb
@@ -212,6 +212,7 @@
     end
 
     it_behaves_like 'maven virtual registry not authenticated user'
+    it_behaves_like 'maven virtual registry feature not licensed'
   end
 
   describe 'POST /api/v4/virtual_registries/packages/maven/:id/*path/upload' do
@@ -311,5 +312,6 @@
     end
 
     it_behaves_like 'maven virtual registry not authenticated user'
+    it_behaves_like 'maven virtual registry feature not licensed'
   end
 end
diff --git a/spec/requests/api/virtual_registries/packages/maven/registries_spec.rb b/ee/spec/requests/api/virtual_registries/packages/maven/registries_spec.rb
similarity index 97%
rename from spec/requests/api/virtual_registries/packages/maven/registries_spec.rb
rename to ee/spec/requests/api/virtual_registries/packages/maven/registries_spec.rb
index de71971e8dbbe62121c9eaf605bf4d3278dcdef7..7dccd68270a85fe3c4242cde803d07b5bdba55bd 100644
--- a/spec/requests/api/virtual_registries/packages/maven/registries_spec.rb
+++ b/ee/spec/requests/api/virtual_registries/packages/maven/registries_spec.rb
@@ -26,6 +26,7 @@
     it_behaves_like 'disabled virtual_registry_maven feature flag'
     it_behaves_like 'maven virtual registry disabled dependency proxy'
     it_behaves_like 'maven virtual registry not authenticated user'
+    it_behaves_like 'maven virtual registry feature not licensed'
 
     context 'with valid group_id' do
       it_behaves_like 'successful response'
@@ -98,6 +99,7 @@
       it_behaves_like 'disabled virtual_registry_maven feature flag'
       it_behaves_like 'maven virtual registry disabled dependency proxy'
       it_behaves_like 'maven virtual registry not authenticated user'
+      it_behaves_like 'maven virtual registry feature not licensed'
 
       where(:user_role, :status) do
         :owner      | :created
@@ -210,6 +212,7 @@
     it_behaves_like 'disabled virtual_registry_maven feature flag'
     it_behaves_like 'maven virtual registry disabled dependency proxy'
     it_behaves_like 'maven virtual registry not authenticated user'
+    it_behaves_like 'maven virtual registry feature not licensed'
 
     context 'with valid registry_id' do
       it_behaves_like 'successful response'
@@ -276,6 +279,7 @@
     it_behaves_like 'disabled virtual_registry_maven feature flag'
     it_behaves_like 'maven virtual registry disabled dependency proxy'
     it_behaves_like 'maven virtual registry not authenticated user'
+    it_behaves_like 'maven virtual registry feature not licensed'
 
     context 'with valid registry_id' do
       where(:user_role, :status) do
diff --git a/spec/requests/api/virtual_registries/packages/maven/upstreams_spec.rb b/ee/spec/requests/api/virtual_registries/packages/maven/upstreams_spec.rb
similarity index 97%
rename from spec/requests/api/virtual_registries/packages/maven/upstreams_spec.rb
rename to ee/spec/requests/api/virtual_registries/packages/maven/upstreams_spec.rb
index 6092da87e4ad583bc6b120f170c82c89bb19abec..74253c7a093dac3eda130ac2a3508ff41737a983 100644
--- a/spec/requests/api/virtual_registries/packages/maven/upstreams_spec.rb
+++ b/ee/spec/requests/api/virtual_registries/packages/maven/upstreams_spec.rb
@@ -26,6 +26,7 @@
     it_behaves_like 'disabled virtual_registry_maven feature flag'
     it_behaves_like 'maven virtual registry disabled dependency proxy'
     it_behaves_like 'maven virtual registry not authenticated user'
+    it_behaves_like 'maven virtual registry feature not licensed'
 
     context 'with valid registry' do
       it_behaves_like 'successful response'
@@ -103,6 +104,7 @@
     it_behaves_like 'disabled virtual_registry_maven feature flag'
     it_behaves_like 'maven virtual registry disabled dependency proxy'
     it_behaves_like 'maven virtual registry not authenticated user'
+    it_behaves_like 'maven virtual registry feature not licensed'
 
     context 'with valid params' do
       where(:user_role, :status) do
@@ -220,6 +222,7 @@
     it_behaves_like 'disabled virtual_registry_maven feature flag'
     it_behaves_like 'maven virtual registry disabled dependency proxy'
     it_behaves_like 'maven virtual registry not authenticated user'
+    it_behaves_like 'maven virtual registry feature not licensed'
 
     context 'with valid params' do
       it_behaves_like 'successful response'
@@ -271,6 +274,7 @@
       it_behaves_like 'disabled virtual_registry_maven feature flag'
       it_behaves_like 'maven virtual registry disabled dependency proxy'
       it_behaves_like 'maven virtual registry not authenticated user'
+      it_behaves_like 'maven virtual registry feature not licensed'
 
       where(:user_role, :status) do
         :owner      | :ok
@@ -353,6 +357,7 @@
     it_behaves_like 'disabled virtual_registry_maven feature flag'
     it_behaves_like 'maven virtual registry disabled dependency proxy'
     it_behaves_like 'maven virtual registry not authenticated user'
+    it_behaves_like 'maven virtual registry feature not licensed'
 
     context 'for different user roles' do
       where(:user_role, :status) do
diff --git a/spec/support/shared_contexts/requests/api/maven_vreg_shared_context.rb b/ee/spec/support/shared_contexts/maven_vreg_shared_context.rb
similarity index 96%
rename from spec/support/shared_contexts/requests/api/maven_vreg_shared_context.rb
rename to ee/spec/support/shared_contexts/maven_vreg_shared_context.rb
index 6787cbc267e9083752703db40f3b335414b214ca..57ec0e5ebbfb2a8988e15ca7b3613fd17060fcb8 100644
--- a/spec/support/shared_contexts/requests/api/maven_vreg_shared_context.rb
+++ b/ee/spec/support/shared_contexts/maven_vreg_shared_context.rb
@@ -23,6 +23,7 @@
 
   before do
     stub_config(dependency_proxy: { enabled: true }) # not enabled by default
+    stub_licensed_features(packages_virtual_registry: true)
   end
 
   def token_header(token)
diff --git a/spec/support/shared_examples/requests/api/virtual_registries/maven_packages_shared_examples.rb b/ee/spec/support/shared_examples/requests/api/virtual_registries/maven_packages_shared_examples.rb
similarity index 85%
rename from spec/support/shared_examples/requests/api/virtual_registries/maven_packages_shared_examples.rb
rename to ee/spec/support/shared_examples/requests/api/virtual_registries/maven_packages_shared_examples.rb
index 697ce59cb0d6fb375b51a5e6265d8e6c22bb1a9c..4d8e824224c27ef889d54003c055cb7582a42b5a 100644
--- a/spec/support/shared_examples/requests/api/virtual_registries/maven_packages_shared_examples.rb
+++ b/ee/spec/support/shared_examples/requests/api/virtual_registries/maven_packages_shared_examples.rb
@@ -41,3 +41,11 @@
     end
   end
 end
+
+RSpec.shared_examples 'maven virtual registry feature not licensed' do
+  before do
+    stub_licensed_features(packages_virtual_registry: false)
+  end
+
+  it_behaves_like 'returning response status', :not_found
+end
diff --git a/lib/api/api.rb b/lib/api/api.rb
index f5623c218bdc2c56c101da0e46bfc87f36bb1bc9..ecf11f06034122af7acb2e4a8318b304d4316d4c 100644
--- a/lib/api/api.rb
+++ b/lib/api/api.rb
@@ -359,10 +359,6 @@ def initialize(location_url)
         mount ::API::Users
         mount ::API::UserCounts
         mount ::API::UserRunners
-        mount ::API::VirtualRegistries::Packages::Maven::Registries
-        mount ::API::VirtualRegistries::Packages::Maven::Upstreams
-        mount ::API::VirtualRegistries::Packages::Maven::Cache::Entries
-        mount ::API::VirtualRegistries::Packages::Maven::Endpoints
         mount ::API::WebCommits
         mount ::API::Wikis