diff --git a/lib/ci/api/api.rb b/lib/ci/api/api.rb
index 741a81ca8f05b69042aeb0021d2533a3e63efd33..00572e6efdb7dfed7e9bf282ae963bd93bb2d461 100644
--- a/lib/ci/api/api.rb
+++ b/lib/ci/api/api.rb
@@ -22,9 +22,9 @@ module Ci
       helpers Gitlab::CurrentSettings
 
       mount ::Ci::API::Builds
+      mount ::Ci::API::Lint
       mount ::Ci::API::Runners
       mount ::Ci::API::Triggers
-      mount ::Ci::API::Lint
     end
   end
 end
diff --git a/lib/ci/api/lint.rb b/lib/ci/api/lint.rb
index fab4f8d5925d4c774aa6e5f0f902bf51fe0c10d0..6ea91ac34ddbeb0a476f06bb33919d6728ccaac5 100644
--- a/lib/ci/api/lint.rb
+++ b/lib/ci/api/lint.rb
@@ -1,35 +1,35 @@
 module Ci
   module API
     class Lint < Grape::API
-      before { authenticate! }
-
-      resources :lint do
+      resource :lint do
         post do
-          begin
-            response = {}
-            @content = params[:content]
+          status 200
+          params do
+            requires :content, type: String, desc: 'content of .gitlab-ci.yml'
+          end
 
-            if @content
-              @config_processor = Ci::GitlabCiYamlProcessor.new(@content)
-              @stages = @config_processor.stages
-              @builds = @config_processor.builds
+          begin
+            response = {
+              status: '',
+              errors: [],
+              jobs: []
+            }
 
-              response = {
-                content: @content,
-                status: "syntax is correct"
-              }
+            config_processor = Ci::GitlabCiYamlProcessor.new(params[:content])
 
-              @stages.each do |stage|
-                response["#{stage}"] = @builds.select { |build| build[:stage] == stage }
-              end
-            else
-              render_api_error!("Please provide content of .gitlab-ci.yml", 400)
+            config_processor.builds.each do |build|
+              response[:jobs].push("#{build[:name]}")
+              response[:status] = 'valid'
             end
 
             response
 
           rescue Ci::GitlabCiYamlProcessor::ValidationError, Psych::SyntaxError => e
-            error!({ content: @content, status: "syntax is incorrect", message: e.message })
+            status 200
+            response[:errors].push(e.message)
+            response[:status] = 'invalid'
+
+            response
           end
         end
       end
diff --git a/spec/requests/ci/api/lint_spec.rb b/spec/requests/ci/api/lint_spec.rb
index 4a18fd0b6b306bae63625984980fd5dd0659ac79..cc3d77f3b38ccbb40afe09803a779ea48e8481e3 100644
--- a/spec/requests/ci/api/lint_spec.rb
+++ b/spec/requests/ci/api/lint_spec.rb
@@ -9,41 +9,32 @@ describe Ci::API::API do
   end
 
   describe 'POST /ci/lint' do
-    context "with valid .gitlab-ci.yaml content" do
-      context "authorized user" do
-        it "validate content" do
-          post ci_api('/lint'), { private_token: user.private_token, content: yaml_content }
-
-          expect(response).to have_http_status(201)
-          expect(json_response).to be_an Hash
-          expect(json_response['status']).to eq('syntax is correct')
-        end
-      end
-
-      context "unauthorized user" do
-        it "does not validate content" do
+    context 'with valid .gitlab-ci.yaml content' do
+      context 'authorized user' do
+        it 'validate content' do
           post ci_api('/lint'), { content: yaml_content }
 
-          expect(response).to have_http_status(401)
+          expect(response).to have_http_status(200)
+          expect(json_response).to be_an Hash
+          expect(json_response['status']).to eq('valid')
         end
       end
     end
 
-    context "with invalid .gitlab_ci.yml content" do
-      it "validate content" do
-        post ci_api('/lint'), { private_token: user.private_token, content: 'invalid content' }
+    context 'with invalid .gitlab_ci.yml content' do
+      it 'validate content' do
+        post ci_api('/lint'), { content: 'invalid content' }
 
-        expect(response).to have_http_status(500)
-        expect(json_response['status']).to eq('syntax is incorrect')
+        expect(response).to have_http_status(200)
+        expect(json_response['status']).to eq('invalid')
       end
     end
 
-    context "no content" do
-      it "shows error message" do
-        post ci_api('/lint'), { private_token: user.private_token }
+    context 'no content parameters' do
+      it 'shows error message' do
+        post ci_api('/lint')
 
         expect(response).to have_http_status(400)
-        expect(json_response['message']).to eq('Please provide content of .gitlab-ci.yml')
       end
     end
   end