diff --git a/changelogs/unreleased/32301-filter-archive-project-on-param-present.yml b/changelogs/unreleased/32301-filter-archive-project-on-param-present.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d6534ed4e1a9bee30d0560bbeb87599c9da993eb
--- /dev/null
+++ b/changelogs/unreleased/32301-filter-archive-project-on-param-present.yml
@@ -0,0 +1,4 @@
+---
+title: Filter archived project in API v3 only if param present
+merge_request: 12245
+author: Ivan Chernov
diff --git a/lib/api/v3/helpers.rb b/lib/api/v3/helpers.rb
index d9e76560d03b15463dbf7251449c92b4129cd275..4e63aa01c1a355c7434e99d227a5e42028ba4786 100644
--- a/lib/api/v3/helpers.rb
+++ b/lib/api/v3/helpers.rb
@@ -38,7 +38,10 @@ module API
           projects = projects.where(visibility_level: Gitlab::VisibilityLevel.level_value(params[:visibility]))
         end
 
-        projects = projects.where(archived: params[:archived])
+        unless params[:archived].nil?
+          projects = projects.where(archived: to_boolean(params[:archived]))
+        end
+
         projects.reorder(params[:order_by] => params[:sort])
       end
     end
diff --git a/lib/api/v3/projects.rb b/lib/api/v3/projects.rb
index 20976b9dd08c83910fd2ee43573a5ead727b4ab9..eb090453b48ab0852e88cc675deae79941397e1b 100644
--- a/lib/api/v3/projects.rb
+++ b/lib/api/v3/projects.rb
@@ -69,7 +69,7 @@ module API
           end
 
           params :filter_params do
-            optional :archived, type: Boolean, default: false, desc: 'Limit by archived status'
+            optional :archived, type: Boolean, default: nil, desc: 'Limit by archived status'
             optional :visibility, type: String, values: %w[public internal private],
                                   desc: 'Limit by visibility'
             optional :search, type: String, desc: 'Return list of authorized projects matching the search criteria'
diff --git a/spec/requests/api/v3/projects_spec.rb b/spec/requests/api/v3/projects_spec.rb
index af4b6f92b644d0b7b17f9e12ec6430abc0a7c39c..cb74868324c5b835abb7c5aeb1ceacab78a82ca3 100644
--- a/spec/requests/api/v3/projects_spec.rb
+++ b/spec/requests/api/v3/projects_spec.rb
@@ -124,6 +124,36 @@ describe API::V3::Projects do
         end
       end
 
+      context 'and using archived' do
+        let!(:archived_project) { create(:empty_project, creator_id: user.id, namespace: user.namespace, archived: true) }
+
+        it 'returns archived project' do
+          get v3_api('/projects?archived=true', user)
+
+          expect(response).to have_http_status(200)
+          expect(json_response).to be_an Array
+          expect(json_response.length).to eq(1)
+          expect(json_response.first['id']).to eq(archived_project.id)
+        end
+
+        it 'returns non-archived project' do
+          get v3_api('/projects?archived=false', user)
+
+          expect(response).to have_http_status(200)
+          expect(json_response).to be_an Array
+          expect(json_response.length).to eq(1)
+          expect(json_response.first['id']).to eq(project.id)
+        end
+
+        it 'returns all project' do
+          get v3_api('/projects', user)
+
+          expect(response).to have_http_status(200)
+          expect(json_response).to be_an Array
+          expect(json_response.length).to eq(2)
+        end
+      end
+
       context 'and using sorting' do
         before do
           project2