diff --git a/config/open_api.yml b/config/open_api.yml
index d4000f296e7311c97d7d9a285d928cf03988122e..0c8ba5bdfd87679e722aee9da2ee3730e1a06f8f 100644
--- a/config/open_api.yml
+++ b/config/open_api.yml
@@ -83,6 +83,8 @@ metadata:
     description: Operations related to issue links
   - name: jira_connect_subscriptions
     description: Operations related to JiraConnect subscriptions
+  - name: maven_packages
+    description: Operations related to Maven packages
   - name: merge_requests
     description: Operations related to merge requests
   - name: metadata
diff --git a/lib/api/api.rb b/lib/api/api.rb
index 2d1e74149236ffb890de3957b4fa26994b7ec876..f5749c76334c830ea82a893d1d7656fd57ddc52a 100644
--- a/lib/api/api.rb
+++ b/lib/api/api.rb
@@ -235,6 +235,7 @@ class API < ::API::Base
         mount ::API::Keys
         mount ::API::Lint
         mount ::API::Markdown
+        mount ::API::MavenPackages
         mount ::API::Members
         mount ::API::MergeRequestApprovals
         mount ::API::MergeRequests
@@ -310,7 +311,6 @@ class API < ::API::Base
       mount ::API::GroupMilestones
       mount ::API::Issues
       mount ::API::Labels
-      mount ::API::MavenPackages
       mount ::API::Notes
       mount ::API::NotificationSettings
       mount ::API::NpmInstancePackages
diff --git a/lib/api/maven_packages.rb b/lib/api/maven_packages.rb
index 638ce6dbedc9a9ce347cbfd2b1f30b5190a54c3a..411a53a481b933f4d501549d87062cecbee64840 100644
--- a/lib/api/maven_packages.rb
+++ b/lib/api/maven_packages.rb
@@ -150,10 +150,17 @@ def find_and_present_package_file(package, file_name, format, params)
 
     desc 'Download the maven package file at instance level' do
       detail 'This feature was introduced in GitLab 11.6'
+      success code: 200
+      failure [
+        { code: 401, message: 'Unauthorized' },
+        { code: 403, message: 'Forbidden' },
+        { code: 404, message: 'Not Found' }
+      ]
+      tags %w[maven_packages]
     end
     params do
-      requires :path, type: String, desc: 'Package path'
-      requires :file_name, type: String, desc: 'Package file name'
+      requires :path, type: String, desc: 'Package path', documentation: { example: 'foo/bar/mypkg/1.0-SNAPSHOT' }
+      requires :file_name, type: String, desc: 'Package file name', documentation: { example: 'mypkg-1.0-SNAPSHOT.jar' }
     end
     route_setting :authentication, job_token_allowed: true, deploy_token_allowed: true
     get 'packages/maven/*path/:file_name', requirements: MAVEN_ENDPOINT_REQUIREMENTS do
@@ -190,14 +197,24 @@ def find_and_present_package_file(package, file_name, format, params)
 
     desc 'Download the maven package file at a group level' do
       detail 'This feature was introduced in GitLab 11.7'
+      success [
+        { code: 200 },
+        { code: 302 }
+      ]
+      failure [
+        { code: 401, message: 'Unauthorized' },
+        { code: 403, message: 'Forbidden' },
+        { code: 404, message: 'Not Found' }
+      ]
+      tags %w[maven_packages]
     end
     params do
-      requires :id, type: String, desc: 'The ID of a group'
+      requires :id, types: [String, Integer], desc: 'The ID or URL-encoded path of the group'
     end
     resource :groups, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
       params do
-        requires :path, type: String, desc: 'Package path'
-        requires :file_name, type: String, desc: 'Package file name'
+        requires :path, type: String, desc: 'Package path', documentation: { example: 'foo/bar/mypkg/1.0-SNAPSHOT' }
+        requires :file_name, type: String, desc: 'Package file name', documentation: { example: 'mypkg-1.0-SNAPSHOT.jar' }
       end
       route_setting :authentication, job_token_allowed: true, deploy_token_allowed: true
       get ':id/-/packages/maven/*path/:file_name', requirements: MAVEN_ENDPOINT_REQUIREMENTS do
@@ -225,10 +242,20 @@ def find_and_present_package_file(package, file_name, format, params)
     resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
       desc 'Download the maven package file' do
         detail 'This feature was introduced in GitLab 11.3'
+        success [
+          { code: 200 },
+          { code: 302 }
+        ]
+        failure [
+          { code: 401, message: 'Unauthorized' },
+          { code: 403, message: 'Forbidden' },
+          { code: 404, message: 'Not Found' }
+        ]
+        tags %w[maven_packages]
       end
       params do
-        requires :path, type: String, desc: 'Package path'
-        requires :file_name, type: String, desc: 'Package file name'
+        requires :path, type: String, desc: 'Package path', documentation: { example: 'foo/bar/mypkg/1.0-SNAPSHOT' }
+        requires :file_name, type: String, desc: 'Package file name', documentation: { example: 'mypkg-1.0-SNAPSHOT.jar' }
       end
       route_setting :authentication, job_token_allowed: true, deploy_token_allowed: true
       get ':id/packages/maven/*path/:file_name', requirements: MAVEN_ENDPOINT_REQUIREMENTS do
@@ -250,10 +277,18 @@ def find_and_present_package_file(package, file_name, format, params)
 
       desc 'Workhorse authorize the maven package file upload' do
         detail 'This feature was introduced in GitLab 11.3'
+        success code: 200
+        failure [
+          { code: 400, message: 'Bad Request' },
+          { code: 401, message: 'Unauthorized' },
+          { code: 403, message: 'Forbidden' },
+          { code: 404, message: 'Not Found' }
+        ]
+        tags %w[maven_packages]
       end
       params do
-        requires :path, type: String, desc: 'Package path'
-        requires :file_name, type: String, desc: 'Package file name', regexp: Gitlab::Regex.maven_file_name_regex
+        requires :path, type: String, desc: 'Package path', documentation: { example: 'foo/bar/mypkg/1.0-SNAPSHOT' }
+        requires :file_name, type: String, desc: 'Package file name', regexp: Gitlab::Regex.maven_file_name_regex, documentation: { example: 'mypkg-1.0-SNAPSHOT.pom' }
       end
       route_setting :authentication, job_token_allowed: true, deploy_token_allowed: true
       put ':id/packages/maven/*path/:file_name/authorize', requirements: MAVEN_ENDPOINT_REQUIREMENTS do
@@ -266,10 +301,19 @@ def find_and_present_package_file(package, file_name, format, params)
 
       desc 'Upload the maven package file' do
         detail 'This feature was introduced in GitLab 11.3'
+        success code: 200
+        failure [
+          { code: 400, message: 'Bad Request' },
+          { code: 401, message: 'Unauthorized' },
+          { code: 403, message: 'Forbidden' },
+          { code: 404, message: 'Not Found' },
+          { code: 422, message: 'Unprocessable Entity' }
+        ]
+        tags %w[maven_packages]
       end
       params do
-        requires :path, type: String, desc: 'Package path'
-        requires :file_name, type: String, desc: 'Package file name', regexp: Gitlab::Regex.maven_file_name_regex
+        requires :path, type: String, desc: 'Package path', documentation: { example: 'foo/bar/mypkg/1.0-SNAPSHOT' }
+        requires :file_name, type: String, desc: 'Package file name', regexp: Gitlab::Regex.maven_file_name_regex, documentation: { example: 'mypkg-1.0-SNAPSHOT.pom' }
         requires :file, type: ::API::Validations::Types::WorkhorseFile, desc: 'The package file to be published (generated by Multipart middleware)', documentation: { type: 'file' }
       end
       route_setting :authentication, job_token_allowed: true, deploy_token_allowed: true