diff --git a/CHANGELOG b/CHANGELOG
index 7a54700af04f148684f7be3d9fff6c7a2f173da6..a1b17e58156fad817f599e48c5a51d11257b0b4c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -55,6 +55,7 @@ v 8.0.0 (unreleased)
   - Webhook for issue now contains repository field (Jungkook Park)
   - Add ability to add custom text to the help page (Jeroen van Baarsen)
   - Add pg_schema to backup config
+  - Removed API calls from CE to CI
 
 v 7.14.3
   - No changes
diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb
index b1f1c087b9ec0359ffa2a20fe83fffdd85f1d5d3..40b61edb0a9fe3db5c04b584fdf2b0ef55736a5a 100644
--- a/app/controllers/ci/projects_controller.rb
+++ b/app/controllers/ci/projects_controller.rb
@@ -55,7 +55,7 @@ module Ci
         return redirect_to ci_root_path, alert: 'You have to have at least master role to enable CI for this project'
       end
 
-      @project = Ci::CreateProjectService.new.execute(current_user, project_data, ci_project_url(":project_id"))
+      @project = Ci::CreateProjectService.new.execute(current_user, project_data)
 
       if @project.persisted?
         redirect_to ci_project_path(@project, show_guide: true), notice: 'Project was successfully created.'
@@ -86,16 +86,6 @@ module Ci
       redirect_to ci_projects_url
     end
 
-    def build
-      @commit = Ci::CreateCommitService.new.execute(@project, params.dup)
-
-      if @commit && @commit.valid?
-        head 201
-      else
-        head 400
-      end
-    end
-
     # Project status badge
     # Image with build status for sha or ref
     def badge
diff --git a/app/models/ci/project.rb b/app/models/ci/project.rb
index ae901d4ccd0a807d8e1ccf847111b48d10bebcd7..37fbcc287bb2d1a18285db4f11c871c0a2003b3a 100644
--- a/app/models/ci/project.rb
+++ b/app/models/ci/project.rb
@@ -92,21 +92,6 @@ module Ci
         project
       end
 
-      # TODO: remove
-      def from_gitlab(user, scope = :owned, options)
-        opts = user.authenticate_options
-        opts.merge! options
-
-        raise 'Implement me of fix'
-        #projects = Ci::Network.new.projects(opts.compact, scope)
-
-        if projects
-          projects.map { |pr| OpenStruct.new(pr) }
-        else
-          []
-        end
-      end
-
       def already_added?(project)
         where(gitlab_id: project.id).any?
       end
diff --git a/app/models/project_services/gitlab_ci_service.rb b/app/models/project_services/gitlab_ci_service.rb
index 1bba6326949b78cda08167b72e17b47e1322295d..820dd3f567cd0e1ff719be3ce9cb0144a8eb701d 100644
--- a/app/models/project_services/gitlab_ci_service.rb
+++ b/app/models/project_services/gitlab_ci_service.rb
@@ -19,22 +19,12 @@
 #
 
 class GitlabCiService < CiService
-  API_PREFIX = "api/v1"
-
-  prop_accessor :project_url, :token, :enable_ssl_verification
-  validates :project_url,
-    presence: true,
-    format: { with: /\A#{URI.regexp(%w(http https))}\z/, message: "should be a valid url" }, if: :activated?
-  validates :token,
-    presence: true,
-    format: { with: /\A([A-Za-z0-9]+)\z/ },  if: :activated?
+  prop_accessor :token
 
   after_save :compose_service_hook, if: :activated?
 
   def compose_service_hook
     hook = service_hook || build_service_hook
-    hook.url = [project_url, "/build", "?token=#{token}"].join("")
-    hook.enable_ssl_verification = enable_ssl_verification
     hook.save
   end
 
@@ -55,7 +45,8 @@ class GitlabCiService < CiService
       end
     end
 
-    service_hook.execute(data)
+    ci_project = Ci::Project.find_by(gitlab_id: project.id)
+    Ci::CreateCommitService.new.execute(ci_project, data)
   end
 
   def get_ci_commit(sha, ref)
@@ -68,24 +59,22 @@ class GitlabCiService < CiService
     :error
   end
 
-  def fork_registration(new_project, private_token)
-    params = {
+  def fork_registration(new_project, current_user)
+    params = OpenStruct.new({
       id:                  new_project.id,
       name_with_namespace: new_project.name_with_namespace,
       path_with_namespace: new_project.path_with_namespace,
       web_url:             new_project.web_url,
       default_branch:      new_project.default_branch,
       ssh_url_to_repo:     new_project.ssh_url_to_repo
-    }
-
-    HTTParty.post(
-      fork_registration_path,
-      body: {
-        project_id: project.id,
-        project_token: token,
-        private_token: private_token,
-        data: params },
-      verify: false
+    })
+
+    ci_project = Ci::Project.find_by!(gitlab_id: project.id)
+    
+    Ci::CreateProjectService.new.execute(
+      current_user,
+      params,
+      ci_project
     )
   end
 
@@ -112,11 +101,7 @@ class GitlabCiService < CiService
   end
 
   def fields
-    [
-      { type: 'text', name: 'token', placeholder: 'GitLab CI project specific token' },
-      { type: 'text', name: 'project_url', placeholder: 'http://ci.gitlabhq.com/projects/3' },
-      { type: 'checkbox', name: 'enable_ssl_verification', title: "Enable SSL verification" }
-    ]
+    []
   end
 
   private
@@ -125,10 +110,6 @@ class GitlabCiService < CiService
     repository.blob_at(sha, '.gitlab-ci.yml')
   end
 
-  def fork_registration_path
-    project_url.sub(/projects\/\d*/, "#{API_PREFIX}/forks")
-  end
-
   def repository
     project.repository
   end
diff --git a/app/services/ci/create_project_service.rb b/app/services/ci/create_project_service.rb
index 0419612d52148c0735bb37c5cbff213d3fe435d0..839d3f6b444b8261b8fe4c2bb055ad898a5608e8 100644
--- a/app/services/ci/create_project_service.rb
+++ b/app/services/ci/create_project_service.rb
@@ -2,20 +2,15 @@ module Ci
   class CreateProjectService
     include Gitlab::Application.routes.url_helpers
 
-    def execute(current_user, params, project_route, forked_project = nil)
+    def execute(current_user, params, forked_project = nil)
       @project = Ci::Project.parse(params)
 
       Ci::Project.transaction do
         @project.save!
 
-        data = {
-          token: @project.token,
-          project_url: project_route.gsub(":project_id", @project.id.to_s),
-        }
-
         gl_project = ::Project.find(@project.gitlab_id)
         gl_project.build_missing_services
-        gl_project.gitlab_ci_service.update_attributes(data.merge(active: true))
+        gl_project.gitlab_ci_service.update_attributes(active: true, token: @project.token)
       end
 
       if forked_project
diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb
index 50f208b11d15c396c3ecb1f253e6e28d7e52245f..2e995d6fd518181e277b73b0348299a91aebb1f0 100644
--- a/app/services/projects/fork_service.rb
+++ b/app/services/projects/fork_service.rb
@@ -18,7 +18,7 @@ module Projects
 
       if new_project.persisted?
         if @project.gitlab_ci?
-          ForkRegistrationWorker.perform_async(@project.id, new_project.id, @current_user.private_token)
+          @project.gitlab_ci_service.fork_registration(new_project, @current_user)
         end
       end
 
diff --git a/app/workers/fork_registration_worker.rb b/app/workers/fork_registration_worker.rb
deleted file mode 100644
index fffa8b3a65913c12759c76c604ee8d10967f7c1b..0000000000000000000000000000000000000000
--- a/app/workers/fork_registration_worker.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class ForkRegistrationWorker
-  include Sidekiq::Worker
-
-  sidekiq_options queue: :default
-
-  def perform(from_project_id, to_project_id, private_token)
-    from_project = Project.find(from_project_id)
-    to_project = Project.find(to_project_id)
-
-    from_project.gitlab_ci_service.fork_registration(to_project, private_token)
-  end
-end
diff --git a/config/routes.rb b/config/routes.rb
index c3b9475146df571bad51b0347390657cedb89866..512dda7b5476a0fd0efbfadd91ce11c088cf776b 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -18,7 +18,6 @@ Gitlab::Application.routes.draw do
       member do
         get :status, to: 'projects#badge'
         get :integration
-        post :build
         post :toggle_shared_runners
         get :dumped_yaml
       end
diff --git a/doc/ci/api/README.md b/doc/ci/api/README.md
index e47e5c467322816e0ec1d543605708078a0eaf5d..33c5b172e988fe9223483bd6a0723c748f1234a8 100644
--- a/doc/ci/api/README.md
+++ b/doc/ci/api/README.md
@@ -6,7 +6,6 @@
 - [Runners](runners.md)
 - [Commits](commits.md)
 - [Builds](builds.md)
-- [Forks](forks.md)
 
 
 ## Authentication
diff --git a/doc/ci/api/forks.md b/doc/ci/api/forks.md
deleted file mode 100644
index 8f32e2d3b40c0b18afa78beb9b85df260ecc61d5..0000000000000000000000000000000000000000
--- a/doc/ci/api/forks.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Forks API
-
-This API is intended to aid in the setup and configuration of
-forked projects on Gitlab CI. 
-
-__Authentication is done by GitLab user token & GitLab project token__
-
-## Forks
-
-### Create fork for project
-
-
-
-```
-POST /ci/forks
-```
-
-Parameters:
-
-    project_id (required) - The ID of a project
-    project_token (requires) - Project token
-    private_token(required) - User private token
-    data (required) - GitLab project data (name_with_namespace, web_url, default_branch, ssh_url_to_repo)
diff --git a/features/steps/project/services.rb b/features/steps/project/services.rb
index 0327fd61981d3656dcc6e28b20183c120513615e..d3b462bfd31116eebff6aa694c2aaf7a0f1eb94d 100644
--- a/features/steps/project/services.rb
+++ b/features/steps/project/services.rb
@@ -26,13 +26,11 @@ class Spinach::Features::ProjectServices < Spinach::FeatureSteps
 
   step 'I fill gitlab-ci settings' do
     check 'Active'
-    fill_in 'Project url', with: 'http://ci.gitlab.org/projects/3'
-    fill_in 'Token', with: 'verySecret'
     click_button 'Save'
   end
 
   step 'I should see service settings saved' do
-    expect(find_field('Project url').value).to eq 'http://ci.gitlab.org/projects/3'
+    expect(find_field('Active').value).to eq '1'
   end
 
   step 'I click hipchat service link' do
diff --git a/lib/ci/api/api.rb b/lib/ci/api/api.rb
index 7bb8869d61aa016ad8f0ff106926b8d724324fb8..5109c84e0ea564988fb0e48bdc975d11471c5f7d 100644
--- a/lib/ci/api/api.rb
+++ b/lib/ci/api/api.rb
@@ -36,7 +36,6 @@ module Ci
       mount Commits
       mount Runners
       mount Projects
-      mount Forks
       mount Triggers
     end
   end
diff --git a/lib/ci/api/forks.rb b/lib/ci/api/forks.rb
deleted file mode 100644
index 152883a599face96d5b3cbfd5adf82248e6b7dd9..0000000000000000000000000000000000000000
--- a/lib/ci/api/forks.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module Ci
-  module API
-    class Forks < Grape::API
-      resource :forks do
-        # Create a fork
-        #
-        # Parameters:
-        #   project_id (required) - The ID of a project
-        #   project_token (requires) - Project token
-        #   private_token(required) - User private token
-        #   data (required) - GitLab project data (name_with_namespace, web_url, default_branch, ssh_url_to_repo)
-        #
-        #
-        # Example Request:
-        #   POST /forks
-        post do
-          required_attributes! [:project_id, :data, :project_token, :private_token]
-          project = Ci::Project.find_by!(gitlab_id: params[:project_id])
-          authenticate_project_token!(project)
-
-          fork = Ci::CreateProjectService.new.execute(
-            current_user,
-            params[:data],
-            Ci::RoutesHelper.ci_project_url(":project_id"),
-            project
-          )
-
-          if fork
-            present fork, with: Entities::Project
-          else
-            not_found!
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec/controllers/ci/projects_controller_spec.rb b/spec/controllers/ci/projects_controller_spec.rb
index c7a3cd50c200e57e9a8af3741eec681b0a79a342..3e579f9a7d6068bb7e671a9f36e0b8ba6bc97241 100644
--- a/spec/controllers/ci/projects_controller_spec.rb
+++ b/spec/controllers/ci/projects_controller_spec.rb
@@ -5,49 +5,6 @@ describe Ci::ProjectsController do
     @project = FactoryGirl.create :ci_project
   end
 
-  describe "POST #build" do
-    it 'should respond 200 if params is ok' do
-      post :build, {
-        id:           @project.id,
-        ref:          'master',
-        before:       '2aa371379db71ac89ae20843fcff3b3477cf1a1d',
-        after:        '1c8a9df454ef68c22c2a33cca8232bb50849e5c5',
-        token:        @project.token,
-        ci_yaml_file: gitlab_ci_yaml,
-        commits:      [ { message: "Message" } ]
-      }
-
-      expect(response).to be_success
-      expect(response.code).to eq('201')
-    end
-
-    it 'should respond 400 if push about removed branch' do
-      post :build, {
-        id:           @project.id,
-        ref:          'master',
-        before:       '2aa371379db71ac89ae20843fcff3b3477cf1a1d',
-        after:        '0000000000000000000000000000000000000000',
-        token:        @project.token,
-        ci_yaml_file: gitlab_ci_yaml
-      }
-
-      expect(response).not_to be_success
-      expect(response.code).to eq('400')
-    end
-
-    it 'should respond 400 if some params missed' do
-      post :build, id: @project.id, token: @project.token, ci_yaml_file: gitlab_ci_yaml
-      expect(response).not_to be_success
-      expect(response.code).to eq('400')
-    end
-
-    it 'should respond 403 if token is wrong' do
-      post :build, id: @project.id, token: 'invalid-token'
-      expect(response).not_to be_success
-      expect(response.code).to eq('403')
-    end
-  end
-
   describe "POST /projects" do
     let(:project_dump) { OpenStruct.new({ id: @project.gitlab_id }) }
 
diff --git a/spec/lib/gitlab/backend/grack_auth_spec.rb b/spec/lib/gitlab/backend/grack_auth_spec.rb
index d9676445908c09d5979cef1e7e4859b7a5437b71..9bed8f8ee5c43a4c547244d4a3a66a04a7812573 100644
--- a/spec/lib/gitlab/backend/grack_auth_spec.rb
+++ b/spec/lib/gitlab/backend/grack_auth_spec.rb
@@ -180,7 +180,6 @@ describe Grack::Auth do
             gitlab_ci_service = project.build_gitlab_ci_service
             gitlab_ci_service.active = true
             gitlab_ci_service.token = token
-            gitlab_ci_service.project_url = "http://google.com"
             gitlab_ci_service.save
 
             env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Basic.encode_credentials("gitlab-ci-token", token)
diff --git a/spec/models/project_services/gitlab_ci_service_spec.rb b/spec/models/project_services/gitlab_ci_service_spec.rb
index 516d1d4fc1dee671c8594af2a59d64c7bd41edb3..e0da04a3f4006f9972e1d2c627f637965433bfd7 100644
--- a/spec/models/project_services/gitlab_ci_service_spec.rb
+++ b/spec/models/project_services/gitlab_ci_service_spec.rb
@@ -26,33 +26,6 @@ describe GitlabCiService do
     it { is_expected.to have_one(:service_hook) }
   end
 
-  describe 'validations' do
-    context 'active' do
-      before { allow(subject).to receive(:activated?).and_return(true) }
-
-      it { is_expected.to validate_presence_of(:token) }
-      it { is_expected.to validate_presence_of(:project_url) }
-      it { is_expected.to allow_value('ewf9843kdnfdfs89234n').for(:token) }
-      it { is_expected.to allow_value('http://ci.example.com/project/1').for(:project_url) }
-      it { is_expected.not_to allow_value('token with spaces').for(:token) }
-      it { is_expected.not_to allow_value('token/with%spaces').for(:token) }
-      it { is_expected.not_to allow_value('this is not url').for(:project_url) }
-      it { is_expected.not_to allow_value('http//noturl').for(:project_url) }
-      it { is_expected.not_to allow_value('ftp://ci.example.com/projects/3').for(:project_url) }
-    end
-
-    context 'inactive' do
-      before { allow(subject).to receive(:activated?).and_return(false) }
-
-      it { is_expected.not_to validate_presence_of(:token) }
-      it { is_expected.not_to validate_presence_of(:project_url) }
-      it { is_expected.to allow_value('ewf9843kdnfdfs89234n').for(:token) }
-      it { is_expected.to allow_value('http://ci.example.com/project/1').for(:project_url) }
-      it { is_expected.to allow_value('token with spaces').for(:token) }
-      it { is_expected.to allow_value('ftp://ci.example.com/projects/3').for(:project_url) }
-    end
-  end
-
   describe 'commits methods' do
     before do
       @ci_project = create(:ci_project)
@@ -77,8 +50,6 @@ describe GitlabCiService do
 
       it "calls ci_yaml_file" do
         service_hook = double
-        expect(service_hook).to receive(:execute)
-        expect(@service).to receive(:service_hook).and_return(service_hook)
         expect(@service).to receive(:ci_yaml_file).with(push_sample_data[:checkout_sha])
 
         @service.execute(push_sample_data)
@@ -88,7 +59,7 @@ describe GitlabCiService do
 
   describe "Fork registration" do
     before do
-      @old_project = create(:empty_project)
+      @old_project = create(:ci_project).gl_project
       @project = create(:empty_project)
       @user = create(:user)
 
@@ -101,9 +72,9 @@ describe GitlabCiService do
       )
     end
 
-    it "performs http reuquest to ci" do
-      stub_request(:post, "http://ci.gitlab.org/api/v1/forks")
-      @service.fork_registration(@project, @user.private_token)
+    it "creates fork on CI" do
+      expect_any_instance_of(Ci::CreateProjectService).to receive(:execute)
+      @service.fork_registration(@project, @user)
     end
   end
 end
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index 5bd8206b8900e71ed9e88c96f0a4c1859f72cdf8..3007a15b0b1bec5ffd3b734b3385d70a165a8ff7 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -89,7 +89,7 @@ describe API::API, api: true  do
 
         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: "http://ci.example.com/projects/1")
+          project2.gitlab_ci_service.update(active: true, token: "token")
           get api('/projects', user), { ci_enabled_first: 'true' }
           expect(response.status).to eq(200)
           expect(json_response).to be_an Array
diff --git a/spec/requests/api/services_spec.rb b/spec/requests/api/services_spec.rb
index fb3b235446f82643e83c25f74ba0b2ac0209b4e6..9aa60826f21448cd4360eafde6b5049a2562eec8 100644
--- a/spec/requests/api/services_spec.rb
+++ b/spec/requests/api/services_spec.rb
@@ -17,9 +17,9 @@ describe API::API, api: true  do
 
       it "should return if required fields missing" do
         attrs = service_attrs
-        
+
         required_attributes = service_attrs_list.select do |attr|
-          service_klass.validators_on(attr).any? do |v| 
+          service_klass.validators_on(attr).any? do |v|
             v.class == ActiveRecord::Validations::PresenceValidator
           end
         end
diff --git a/spec/requests/ci/api/forks_spec.rb b/spec/requests/ci/api/forks_spec.rb
deleted file mode 100644
index 37fa1e82f25b0cfdedb50e23ac927ad66a834b44..0000000000000000000000000000000000000000
--- a/spec/requests/ci/api/forks_spec.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-require 'spec_helper'
-
-describe Ci::API::API do
-  include ApiHelpers
-
-  let(:project) { FactoryGirl.create(:ci_project) }
-  let(:private_token) { create(:user).private_token }
-
-  let(:options) do
-    {
-      private_token: private_token,
-      url: GitlabCi.config.gitlab_ci.url
-    }
-  end
-
-  before do
-    stub_gitlab_calls
-  end
-
-
-  describe "POST /forks" do
-    let(:project_info) do
-      {
-        project_id: project.gitlab_id,
-        project_token: project.token,
-        data: {
-          id:                  create(:empty_project).id,
-          name_with_namespace: "Gitlab.org / Underscore",
-          path_with_namespace: "gitlab-org/underscore",
-          default_branch:      "master",
-          ssh_url_to_repo:     "git@example.com:gitlab-org/underscore"
-        }
-      }
-    end
-
-    context "with valid info" do
-      before do
-        options.merge!(project_info)
-      end
-
-      it "should create a project with valid data" do
-        post ci_api("/forks"), options
-        expect(response.status).to eq(201)
-        expect(json_response['name']).to eq("Gitlab.org / Underscore")
-      end
-    end
-
-    context "with invalid project info" do
-      before do
-        options.merge!({})
-      end
-
-      it "should error with invalid data" do
-        post ci_api("/forks"), options
-        expect(response.status).to eq(400)
-      end
-    end
-  end
-end
diff --git a/spec/services/ci/create_project_service_spec.rb b/spec/services/ci/create_project_service_spec.rb
index 64041b8d5a28b7a04eb894b6fa461a78c3bdfb11..c0af515aa8fc184a248c9d630a7f5fc78350e0d2 100644
--- a/spec/services/ci/create_project_service_spec.rb
+++ b/spec/services/ci/create_project_service_spec.rb
@@ -7,7 +7,7 @@ describe Ci::CreateProjectService do
 
   describe :execute do
     context 'valid params' do
-      subject { service.execute(current_user, project, 'http://localhost/projects/:project_id') }
+      subject { service.execute(current_user, project) }
 
       it { is_expected.to be_kind_of(Ci::Project) }
       it { is_expected.to be_persisted }
@@ -24,7 +24,7 @@ describe Ci::CreateProjectService do
         FactoryGirl.create(:ci_project, shared_runners_enabled: true, public: true, allow_git_fetch: true)
       end
 
-      subject { service.execute(current_user, project, 'http://localhost/projects/:project_id', ci_origin_project) }
+      subject { service.execute(current_user, project, ci_origin_project) }
 
       it "uses project as a template for settings and jobs" do
         expect(subject.shared_runners_enabled).to be_truthy
diff --git a/spec/services/projects/fork_service_spec.rb b/spec/services/projects/fork_service_spec.rb
index 7c4bb74b77f37e4ae1d6f939255af05cbd38acd7..18ab333c1d17a5805fd2d4eba7098daae632b6aa 100644
--- a/spec/services/projects/fork_service_spec.rb
+++ b/spec/services/projects/fork_service_spec.rb
@@ -44,10 +44,11 @@ describe Projects::ForkService do
 
     context 'GitLab CI is enabled' do
       it "calls fork registrator for CI" do
+        create(:ci_project, gl_project: @from_project)
         @from_project.build_missing_services
         @from_project.gitlab_ci_service.update_attributes(active: true)
 
-        expect(ForkRegistrationWorker).to receive(:perform_async)
+        expect_any_instance_of(Ci::CreateProjectService).to receive(:execute)
 
         fork_project(@from_project, @to_user)
       end
diff --git a/spec/workers/fork_registration_worker_spec.rb b/spec/workers/fork_registration_worker_spec.rb
deleted file mode 100644
index cc6f574b29c640977822092cb268ea8845e05cd3..0000000000000000000000000000000000000000
--- a/spec/workers/fork_registration_worker_spec.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-
-require 'spec_helper'
-
-describe ForkRegistrationWorker do
-  context "as a resque worker" do
-    it "reponds to #perform" do
-      expect(ForkRegistrationWorker.new).to respond_to(:perform)
-    end
-  end
-end