diff --git a/changelogs/unreleased/api-remove-source-branch.yml b/changelogs/unreleased/api-remove-source-branch.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d1b6507aedb8c37a890c404f698dd8a5b79da851
--- /dev/null
+++ b/changelogs/unreleased/api-remove-source-branch.yml
@@ -0,0 +1,4 @@
+---
+title: 'API: Ability to set ''should_remove_source_branch'' on merge requests'
+merge_request:
+author: Robert Schilling
diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md
index 9460b3f73b1177ae87c55f497c174beaa6ac9721..81df55ab4aba348dfa4fb2b7b9bdc2433a3f8b9f 100644
--- a/doc/api/merge_requests.md
+++ b/doc/api/merge_requests.md
@@ -271,17 +271,18 @@ Creates a new merge request.
 POST /projects/:id/merge_requests
 ```
 
-Parameters:
-
-- `id` (required)                - The ID of a project
-- `source_branch` (required)     - The source branch
-- `target_branch` (required)     - The target branch
-- `assignee_id` (optional)       - Assignee user ID
-- `title` (required)             - Title of MR
-- `description` (optional)       - Description of MR
-- `target_project_id` (optional) - The target project (numeric id)
-- `labels` (optional)            - Labels for MR as a comma-separated list
-- `milestone_id` (optional)      - Milestone ID
+| Attribute | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `id`            | string  | yes | The ID of a project |
+| `source_branch` | string  | yes | The source branch |
+| `target_branch` | string  | yes | The target branch |
+| `title`         | string  | yes | Title of MR |
+| `assignee_id`   | integer | no  | Assignee user ID |
+| `description`   | string  | no  | Description of MR |
+| `target_project_id` | integer  | no | The target project (numeric id) |
+| `labels` | string  | no | Labels for MR as a comma-separated list |
+| `milestone_id` | integer  | no | The ID of a milestone |
+| `remove_source_branch` | boolean  | no | Flag indicating if a merge request should remove the source branch when merging |
 
 ```json
 {
@@ -346,17 +347,19 @@ Updates an existing merge request. You can change the target branch, title, or e
 PUT /projects/:id/merge_requests/:merge_request_id
 ```
 
-Parameters:
-
-- `id` (required)               - The ID of a project
-- `merge_request_id` (required) - ID of MR
-- `target_branch`               - The target branch
-- `assignee_id`                 - Assignee user ID
-- `title`                       - Title of MR
-- `description`                 - Description of MR
-- `state_event`                 - New state (close|reopen|merge)
-- `labels` (optional)           - Labels for MR as a comma-separated list
-- `milestone_id` (optional)     - Milestone ID
+| Attribute | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `id`            | string  | yes | The ID of a project |
+| `merge_request_id` | integer  | yes | The ID of a merge request |
+| `source_branch` | string  | yes | The source branch |
+| `target_branch` | string  | yes | The target branch |
+| `title`         | string  | yes | Title of MR |
+| `assignee_id`   | integer | no  | Assignee user ID |
+| `description`   | string  | no  | Description of MR |
+| `target_project_id` | integer  | no | The target project (numeric id) |
+| `labels` | string  | no | Labels for MR as a comma-separated list |
+| `milestone_id` | integer  | no | The ID of a milestone |
+| `remove_source_branch` | boolean  | no | Flag indicating if a merge request should remove the source branch when merging |
 
 ```json
 {
@@ -807,7 +810,7 @@ Example response:
 
 ## Create a todo
 
-Manually creates a todo for the current user on a merge request. 
+Manually creates a todo for the current user on a merge request.
 If there already exists a todo for the user on that merge request,
 status code `304` is returned.
 
diff --git a/lib/api/merge_requests.rb b/lib/api/merge_requests.rb
index 253460830ffe5d1690b6525eed6a71a5193d280a..55bdbc6a47c6514cfbcbd3dab3b2b32040790ddd 100644
--- a/lib/api/merge_requests.rb
+++ b/lib/api/merge_requests.rb
@@ -30,6 +30,7 @@ module API
           optional :assignee_id, type: Integer, desc: 'The ID of a user to assign the merge request'
           optional :milestone_id, type: Integer, desc: 'The ID of a milestone to assign the merge request'
           optional :labels, type: String, desc: 'Comma-separated list of label names'
+          optional :remove_source_branch, type: Boolean, desc: 'Remove source branch when merging'
         end
       end
 
@@ -78,7 +79,8 @@ module API
       post ":id/merge_requests" do
         authorize! :create_merge_request, user_project
 
-        mr_params = declared_params
+        mr_params = declared_params(include_missing: false)
+        mr_params[:force_remove_source_branch] = mr_params.delete(:remove_source_branch) if mr_params[:remove_source_branch].present?
 
         merge_request = ::MergeRequests::CreateService.new(user_project, current_user, mr_params).execute
 
@@ -147,13 +149,15 @@ module API
                                  desc: 'Status of the merge request'
           use :optional_params
           at_least_one_of :title, :target_branch, :description, :assignee_id,
-                          :milestone_id, :labels, :state_event
+                          :milestone_id, :labels, :state_event,
+                          :remove_source_branch
         end
         put path do
           merge_request = user_project.merge_requests.find(params.delete(:merge_request_id))
           authorize! :update_merge_request, merge_request
 
           mr_params = declared_params(include_missing: false)
+          mr_params[:force_remove_source_branch] = mr_params.delete(:remove_source_branch) if mr_params[:remove_source_branch].present?
 
           merge_request = ::MergeRequests::UpdateService.new(user_project, current_user, mr_params).execute(merge_request)
 
diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb
index 0b89ac7960e9596f5f7e0892515104c1672e1481..75b270aa93c4118801eb8e33e4dc6a298b4a3f9f 100644
--- a/spec/requests/api/merge_requests_spec.rb
+++ b/spec/requests/api/merge_requests_spec.rb
@@ -234,11 +234,14 @@ describe API::MergeRequests, api: true  do
              target_branch: 'master',
              author: user,
              labels: 'label, label2',
-             milestone_id: milestone.id
+             milestone_id: milestone.id,
+             remove_source_branch: true
+
         expect(response).to have_http_status(201)
         expect(json_response['title']).to eq('Test merge_request')
         expect(json_response['labels']).to eq(['label', 'label2'])
         expect(json_response['milestone']['id']).to eq(milestone.id)
+        expect(json_response['force_remove_source_branch']).to be_truthy
       end
 
       it "returns 422 when source_branch equals target_branch" do
@@ -511,6 +514,13 @@ describe API::MergeRequests, api: true  do
       expect(json_response['target_branch']).to eq('wiki')
     end
 
+    it "returns merge_request that removes the source branch" do
+      put api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user), remove_source_branch: true
+
+      expect(response).to have_http_status(200)
+      expect(json_response['force_remove_source_branch']).to be_truthy
+    end
+
     it 'allows special label names' do
       put api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user),
         title: 'new issue',