diff --git a/lib/api.rb b/lib/api.rb
index f58b82ff98ebb99cfba84e027e573937ca3c4ca6..81a5919f1d35402bb79dac35f957b61c1c0b7728 100644
--- a/lib/api.rb
+++ b/lib/api.rb
@@ -11,7 +11,8 @@ module Gitlab
     format :json
     error_format :json
     helpers APIHelpers
-
+    
+    mount Groups
     mount Users
     mount Projects
     mount Issues
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 5cbb1118a89c8a16ade7f814a774eb22b08c9ec2..3bbbd831548e09cd5021dac0e40e1c865a80df93 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -32,6 +32,16 @@ module Gitlab
       end
     end
 
+    class Group < Grape::Entity
+      expose :id, :name, :path, :name, :owner_id, :type
+    end
+    
+    class GroupDetail < Grape::Entity
+      expose :id, :name, :path, :name, :owner_id, :type
+      expose :projects, using: Entities::Project
+    end
+
+    
     class RepoObject < Grape::Entity
       expose :name, :commit
       expose :protected do |repo, options|
diff --git a/lib/api/groups.rb b/lib/api/groups.rb
new file mode 100644
index 0000000000000000000000000000000000000000..bc856eccdaba6609cfc05c784568991d10f55595
--- /dev/null
+++ b/lib/api/groups.rb
@@ -0,0 +1,50 @@
+module Gitlab
+  # groups API
+  class Groups < Grape::API
+    before { authenticate! }
+   
+       resource :groups do
+         # Get a groups list
+         #
+         # Example Request:
+         #  GET /groups
+         get do
+           @groups = paginate Group
+           present @groups, with: Entities::Group
+
+         end
+         
+         # Create group. Available only for admin
+         #
+         # Parameters:
+         #   name (required)                   - Name
+         #   path (required)                   - Path
+         # Example Request:
+         #   POST /groups
+         post do
+           authenticated_as_admin!
+           attrs = attributes_for_keys [:name, :path]
+           @group = Group.new(attrs)
+           @group.owner = current_user
+           
+           if @group.save
+             present @group, with: Entities::Group
+           else
+             not_found!
+           end
+         end
+         
+         # Get a single group, with containing projects
+         #
+         # Parameters:
+         #   id (required) - The ID of a group
+         # Example Request:
+         #   GET /groups/:id
+         get ":id" do
+           @group = Group.find(params[:id])
+           present @group, with: Entities::GroupDetail
+         end
+         
+       end
+  end
+end