diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index e3fff79d68f5e6115a7314cca2bdf3081bd16bdc..1f2251c9b9c356cb8e9b1a6a518a707a95009b77 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -22,7 +22,12 @@ module API
             projects = projects.search(params[:search])
           end
 
-          projects.reorder(project_order_by => project_sort)
+          if params[:ci_enabled_first].present?
+            projects.includes(:gitlab_ci_service).
+              reorder("services.active DESC, projects.#{project_order_by} #{project_sort}")
+          else
+            projects.reorder(project_order_by => project_sort)
+          end
         end
 
         def project_order_by
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index cc387378d3a824bd464a484b3fb147cf86716ab8..aada7febf6c192d3ce6cb5ce73b49c62751f133d 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -86,6 +86,15 @@ describe API::API, api: true  do
           expect(json_response).to be_an Array
           expect(json_response.first['id']).to eq(project3.id)
         end
+
+        it 'returns projects in the correct order when ci_enabled_first parameter is passed' do
+          [project, project2, project3].each{ |project| project.build_missing_services }
+          project2.gitlab_ci_service.update(active: true, token: "token", project_url: "url")
+          get api('/projects', user), { ci_enabled_first: 'true'}
+          expect(response.status).to eq(200)
+          expect(json_response).to be_an Array
+          expect(json_response.first['id']).to eq(project2.id)
+        end
       end
     end
   end