diff --git a/doc/api/commits.md b/doc/api/commits.md
index 53ce381c8ae14f7249fc9ea76116dfefd3b18dab..ef2400aaf3c458d2e0085d5f38f6952c95af2982 100644
--- a/doc/api/commits.md
+++ b/doc/api/commits.md
@@ -444,6 +444,7 @@ POST /projects/:id/statuses/:sha
 | `name` or `context` | string  | no | The label to differentiate this status from the status of other systems. Default value is `default`
 | `target_url` |  string  | no  | The target URL to associate with this status
 | `description` | string  | no  | The short description of the status
+| `coverage` | float  | no    | The total code coverage
 
 ```bash
 curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/17/statuses/18f3e63d05582537db6d183d9d557be09e1f90c8?state=success"
@@ -464,6 +465,7 @@ Example response:
    "name" : "default",
    "sha" : "18f3e63d05582537db6d183d9d557be09e1f90c8",
    "status" : "success",
+   "coverage": 100.0,
    "description" : null,
    "id" : 93,
    "target_url" : null,
diff --git a/lib/api/commit_statuses.rb b/lib/api/commit_statuses.rb
index b6e6820c3f4b41e23445c0023d657522052adcdf..0b6076bd28c3a786de7e4c860e3bd5feead27974 100644
--- a/lib/api/commit_statuses.rb
+++ b/lib/api/commit_statuses.rb
@@ -46,6 +46,7 @@ module API
         optional :description, type: String,  desc: 'A short description of the status'
         optional :name,        type: String,  desc: 'A string label to differentiate this status from the status of other systems. Default: "default"'
         optional :context,     type: String,  desc: 'A string label to differentiate this status from the status of other systems. Default: "default"'
+        optional :coverage,    type: Float,   desc: 'The total code coverage'
       end
       post ':id/statuses/:sha' do
         authorize! :create_commit_status, user_project
@@ -75,7 +76,8 @@ module API
           name: name,
           ref: ref,
           target_url: params[:target_url],
-          description: params[:description]
+          description: params[:description],
+          coverage: params[:coverage]
         )
 
         render_validation_error!(status) if status.invalid?
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 2a071e649fa28908252e5ddcf87b478ab0025d65..d4234ffe818ed8f0efe23a4eba015eec763662fb 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -367,7 +367,7 @@ module API
 
     class CommitStatus < Grape::Entity
       expose :id, :sha, :ref, :status, :name, :target_url, :description,
-             :created_at, :started_at, :finished_at, :allow_failure
+             :created_at, :started_at, :finished_at, :allow_failure, :coverage
       expose :author, using: Entities::UserBasic
     end
 
diff --git a/spec/requests/api/commit_statuses_spec.rb b/spec/requests/api/commit_statuses_spec.rb
index 88361def3cf18999a64e5ded985a8f288a662bf9..eb53fd718721d6c91e9ff3633a709a80d6b17a7f 100644
--- a/spec/requests/api/commit_statuses_spec.rb
+++ b/spec/requests/api/commit_statuses_spec.rb
@@ -156,6 +156,7 @@ describe API::CommitStatuses, api: true do
                               context: 'coverage',
                               ref: 'develop',
                               description: 'test',
+                              coverage: 80.0,
                               target_url: 'http://gitlab.com/status' }
 
           post api(post_url, developer), optional_params
@@ -167,6 +168,7 @@ describe API::CommitStatuses, api: true do
           expect(json_response['status']).to eq('success')
           expect(json_response['name']).to eq('coverage')
           expect(json_response['ref']).to eq('develop')
+          expect(json_response['coverage']).to eq(80.0)
           expect(json_response['description']).to eq('test')
           expect(json_response['target_url']).to eq('http://gitlab.com/status')
         end