diff --git a/app/controllers/autocomplete_controller.rb b/app/controllers/autocomplete_controller.rb
index f84d2ed320d26d33e412fbf039671c6c74c9cba3..32d1ddf920e8199310d04eb0c496bed6950bfef4 100644
--- a/app/controllers/autocomplete_controller.rb
+++ b/app/controllers/autocomplete_controller.rb
@@ -62,7 +62,9 @@ def merge_request_target_branches
   def deploy_keys_with_owners
     deploy_keys = DeployKey.with_write_access_for_project(project)
 
-    render json: DeployKeySerializer.new.represent(deploy_keys, { with_owner: true, user: current_user })
+    render json: DeployKeys::BasicDeployKeySerializer.new.represent(
+      deploy_keys, { with_owner: true, user: current_user }
+    )
   end
 
   private
diff --git a/app/presenters/projects/settings/deploy_keys_presenter.rb b/app/presenters/projects/settings/deploy_keys_presenter.rb
index e3323b7518811b5f5256f250017964d41f04208f..b760786aa4ce71af45541ded27945fe4791b4072 100644
--- a/app/presenters/projects/settings/deploy_keys_presenter.rb
+++ b/app/presenters/projects/settings/deploy_keys_presenter.rb
@@ -58,7 +58,7 @@ def available_public_keys
       end
 
       def as_json
-        serializer = DeployKeySerializer.new # rubocop: disable CodeReuse/Serializer
+        serializer = DeployKeys::DeployKeySerializer.new # rubocop: disable CodeReuse/Serializer
         opts = { user: current_user, project: project, readable_project_ids: readable_project_ids }
 
         {
diff --git a/app/serializers/deploy_key_entity.rb b/app/serializers/deploy_key_entity.rb
deleted file mode 100644
index 486189b84cab285920d7004733884158a6719d20..0000000000000000000000000000000000000000
--- a/app/serializers/deploy_key_entity.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-class DeployKeyEntity < Grape::Entity
-  expose :id
-  expose :user_id
-  expose :title
-  expose :fingerprint
-  expose :fingerprint_sha256
-  expose :destroyed_when_orphaned?, as: :destroyed_when_orphaned
-  expose :almost_orphaned?, as: :almost_orphaned
-  expose :created_at
-  expose :updated_at
-  expose :deploy_keys_projects, using: DeployKeysProjectEntity do |deploy_key|
-    deploy_key.deploy_keys_projects.select do |deploy_key_project|
-      !deploy_key_project.project&.pending_delete? && (allowed_to_read_project?(deploy_key_project.project) || options[:user].admin?)
-    end
-  end
-  expose :can_edit
-  expose :user, as: :owner, using: ::API::Entities::UserBasic, if: -> (_, opts) { can_read_owner?(opts) }
-
-  private
-
-  def can_edit
-    Ability.allowed?(options[:user], :update_deploy_key, object) ||
-      Ability.allowed?(options[:user], :update_deploy_keys_project, object.deploy_keys_project_for(options[:project]))
-  end
-
-  def can_read_owner?(opts)
-    opts[:with_owner] && Ability.allowed?(options[:user], :read_user, object.user)
-  end
-
-  def allowed_to_read_project?(project)
-    if options[:readable_project_ids]
-      options[:readable_project_ids].include?(project.id)
-    else
-      Ability.allowed?(options[:user], :read_project, project)
-    end
-  end
-end
diff --git a/app/serializers/deploy_key_serializer.rb b/app/serializers/deploy_key_serializer.rb
deleted file mode 100644
index a1cd98b631b4c6b2dcf4c09ccc6571dc9ea13884..0000000000000000000000000000000000000000
--- a/app/serializers/deploy_key_serializer.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-# frozen_string_literal: true
-
-class DeployKeySerializer < BaseSerializer
-  entity DeployKeyEntity
-end
diff --git a/app/serializers/deploy_keys/basic_deploy_key_entity.rb b/app/serializers/deploy_keys/basic_deploy_key_entity.rb
new file mode 100644
index 0000000000000000000000000000000000000000..9184bc5f0ceacf9e651037b15b2a219f9d0e0b7b
--- /dev/null
+++ b/app/serializers/deploy_keys/basic_deploy_key_entity.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+module DeployKeys
+  class BasicDeployKeyEntity < Grape::Entity
+    expose :id
+    expose :user_id
+    expose :title
+    expose :fingerprint
+    expose :fingerprint_sha256
+    expose :destroyed_when_orphaned?, as: :destroyed_when_orphaned
+    expose :almost_orphaned?, as: :almost_orphaned
+    expose :created_at
+    expose :updated_at
+    expose :can_edit
+    expose :user, as: :owner, using: ::API::Entities::UserBasic, if: -> (_, opts) { can_read_owner?(opts) }
+
+    private
+
+    def can_edit
+      Ability.allowed?(options[:user], :update_deploy_key, object) ||
+        Ability.allowed?(options[:user], :update_deploy_keys_project, object.deploy_keys_project_for(options[:project]))
+    end
+
+    def can_read_owner?(opts)
+      opts[:with_owner] && Ability.allowed?(options[:user], :read_user, object.user)
+    end
+  end
+end
diff --git a/app/serializers/deploy_keys/basic_deploy_key_serializer.rb b/app/serializers/deploy_keys/basic_deploy_key_serializer.rb
new file mode 100644
index 0000000000000000000000000000000000000000..699f3baac7843f012c8660fefca2f98ac2b6d055
--- /dev/null
+++ b/app/serializers/deploy_keys/basic_deploy_key_serializer.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+module DeployKeys
+  class BasicDeployKeySerializer < BaseSerializer
+    entity BasicDeployKeyEntity
+  end
+end
diff --git a/app/serializers/deploy_keys/deploy_key_entity.rb b/app/serializers/deploy_keys/deploy_key_entity.rb
new file mode 100644
index 0000000000000000000000000000000000000000..79f386d1529cbc3e48e3cad89a6b8014bdbffc17
--- /dev/null
+++ b/app/serializers/deploy_keys/deploy_key_entity.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+module DeployKeys
+  class DeployKeyEntity < BasicDeployKeyEntity
+    expose :deploy_keys_projects, using: DeployKeysProjectEntity do |deploy_key|
+      deploy_key.deploy_keys_projects.select do |deploy_key_project|
+        !deploy_key_project.project&.pending_delete? &&
+        (allowed_to_read_project?(deploy_key_project.project) || options[:user].can_admin_all_resources?)
+      end
+    end
+
+    private
+
+    def allowed_to_read_project?(project)
+      if options[:readable_project_ids]
+        options[:readable_project_ids].include?(project.id)
+      else
+        Ability.allowed?(options[:user], :read_project, project)
+      end
+    end
+  end
+end
diff --git a/app/serializers/deploy_keys/deploy_key_serializer.rb b/app/serializers/deploy_keys/deploy_key_serializer.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b00ef65696f95a65b162fd5c00edc710afecf164
--- /dev/null
+++ b/app/serializers/deploy_keys/deploy_key_serializer.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+module DeployKeys
+  class DeployKeySerializer < BaseSerializer
+    entity DeployKeyEntity
+  end
+end
diff --git a/spec/controllers/autocomplete_controller_spec.rb b/spec/controllers/autocomplete_controller_spec.rb
index 0a809e80fcd936dd18ac86ccf1563eabdf58aae2..e874df62cd7d295b16496bf1744b31beb53f57c8 100644
--- a/spec/controllers/autocomplete_controller_spec.rb
+++ b/spec/controllers/autocomplete_controller_spec.rb
@@ -411,6 +411,7 @@ def request
         expect(json_response.count).to eq(1)
         expect(json_response.first['title']).to eq(deploy_key.title)
         expect(json_response.first['owner']['id']).to eq(deploy_key.user.id)
+        expect(json_response.first['deploy_keys_projects']).to be_nil
       end
 
       context 'with an unknown project' do
@@ -433,6 +434,7 @@ def request
           expect(json_response.count).to eq(1)
           expect(json_response.first['title']).to eq(deploy_key.title)
           expect(json_response.first['owner']).to be_nil
+          expect(json_response.first['deploy_keys_projects']).to be_nil
         end
       end
     end
diff --git a/spec/serializers/deploy_key_entity_spec.rb b/spec/serializers/deploy_keys/basic_deploy_key_entity_spec.rb
similarity index 87%
rename from spec/serializers/deploy_key_entity_spec.rb
rename to spec/serializers/deploy_keys/basic_deploy_key_entity_spec.rb
index e8d9701be6778373619c0be120b8d76338ec7097..c39eb14e339d15e4d69d28d589e12fb5153a8194 100644
--- a/spec/serializers/deploy_key_entity_spec.rb
+++ b/spec/serializers/deploy_keys/basic_deploy_key_entity_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-RSpec.describe DeployKeyEntity do
+RSpec.describe DeployKeys::BasicDeployKeyEntity do
   include RequestAwareEntity
 
   let(:user) { create(:user) }
@@ -18,7 +18,7 @@
     project_private.deploy_keys << deploy_key
   end
 
-  describe 'returns deploy keys with projects a user can read' do
+  describe 'returns deploy keys' do
     let(:expected_result) do
       {
         id: deploy_key.id,
@@ -30,19 +30,7 @@
         almost_orphaned: false,
         created_at: deploy_key.created_at,
         updated_at: deploy_key.updated_at,
-        can_edit: false,
-        deploy_keys_projects: [
-          {
-            can_push: false,
-            project:
-            {
-              id: project.id,
-              name: project.name,
-              full_path: project_path(project),
-              full_name: project.full_name
-            }
-          }
-        ]
+        can_edit: false
       }
     end
 
diff --git a/spec/serializers/deploy_keys/deploy_key_entity_spec.rb b/spec/serializers/deploy_keys/deploy_key_entity_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e989aa8656c80a107859cfc43307e622119a8a1d
--- /dev/null
+++ b/spec/serializers/deploy_keys/deploy_key_entity_spec.rb
@@ -0,0 +1,51 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe DeployKeys::DeployKeyEntity do
+  include RequestAwareEntity
+
+  let(:user) { create(:user) }
+  let(:project) { create(:project, :internal)}
+  let(:project_private) { create(:project, :private)}
+  let(:deploy_key) { create(:deploy_key) }
+  let(:options) { { user: user } }
+
+  let(:entity) { described_class.new(deploy_key, options) }
+
+  before do
+    project.deploy_keys << deploy_key
+    project_private.deploy_keys << deploy_key
+  end
+
+  describe 'returns deploy keys with projects a user can read' do
+    let(:expected_result) do
+      {
+        id: deploy_key.id,
+        user_id: deploy_key.user_id,
+        title: deploy_key.title,
+        fingerprint: deploy_key.fingerprint,
+        fingerprint_sha256: deploy_key.fingerprint_sha256,
+        destroyed_when_orphaned: true,
+        almost_orphaned: false,
+        created_at: deploy_key.created_at,
+        updated_at: deploy_key.updated_at,
+        can_edit: false,
+        deploy_keys_projects: [
+          {
+            can_push: false,
+            project:
+            {
+              id: project.id,
+              name: project.name,
+              full_path: project_path(project),
+              full_name: project.full_name
+            }
+          }
+        ]
+      }
+    end
+
+    it { expect(entity.as_json).to eq(expected_result) }
+  end
+end