diff --git a/apps/provisioning_api/lib/groups.php b/apps/provisioning_api/lib/groups.php
index 7e27eeafb087fade0b7e27c3310ee3a274ee3521..6a18e6b37fcb882d82d567cb459af8311724b38f 100644
--- a/apps/provisioning_api/lib/groups.php
+++ b/apps/provisioning_api/lib/groups.php
@@ -23,7 +23,58 @@
 
 class OC_Provisioning_API_Groups{
 	
+	/**
+	 * returns a list of groups
+	 */
 	public static function getGroups($parameters){
-		
+		$groups = OC_Group::getGroups();
+		return empty($groups) ? 404 : $groups;
 	}
+	
+	/**
+	 * returns an array of users in the group specified
+	 */
+	public static function getGroup($parameters){
+		// Check the group exists
+		if(!OC_Group::groupExists($parameters['groupid'])){
+			return 404;
+		}
+		return OC_Group::usersInGroup($parameters['groupid']);
+	}
+	
+	/**
+	 * creates a new group
+	 */
+	public static function addGroup($parameters){
+		// Validate name
+		if( preg_match( '/[^a-zA-Z0-9 _\.@\-]/', $parameters['groupid'] ) || empty($parameters['groupid'])){
+			return 401;
+		}
+		// Check if it exists
+		if(OC_Group::groupExists($parameters['groupid'])){
+			return 409;
+		}
+		if(OC_Group::createGroup($parameters['groupid'])){
+			return 200;
+		} else {
+			return 500;
+		}
+	}
+	
+	public static function deleteGroup($parameters){
+		// Check it exists
+		if(!OC_Group::groupExists($parameters['groupid'])){
+			return 404;
+		} else if($parameters['groupid'] == 'admin'){
+			// Cannot delete admin group
+			return 403;
+		} else {
+			if(OC_Group::deleteGroup($parameters['groupid'])){
+				return 200;
+			} else {
+				return 500;
+			}
+		}
+	}
+	
 }
\ No newline at end of file