diff --git a/core/kg/api/rest/user_service.go b/core/kg/api/rest/user_service.go
index 42cf40c..d966305 100644
--- a/core/kg/api/rest/user_service.go
+++ b/core/kg/api/rest/user_service.go
@@ -3,6 +3,7 @@
 import (
 	"encoding/json"
 	"net/http"
+	"strconv"
 
 	"github.com/giolekva/pcloud/core/kg/model"
 	"github.com/gorilla/mux"
@@ -38,6 +39,23 @@
 func (router *Router) buildGetUsersHandler() http.Handler {
 	fn := func(w http.ResponseWriter, r *http.Request) error {
 		router.Logger.Debug("Rest API: get users")
+		page := r.URL.Query().Get("page")
+		perPage := r.URL.Query().Get("per_page")
+
+		pageInt, err := strconv.Atoi(page)
+		if err != nil {
+			return errors.New("parameter page should be an int")
+		}
+		perPageInt, err := strconv.Atoi(perPage)
+		if err != nil {
+			return errors.New("parameter per_page should be an int")
+		}
+		users, err := router.App.GetUsers(pageInt, perPageInt)
+		if err != nil {
+			return errors.Wrap(err, "can't get users from app")
+		}
+
+		jsoner(w, http.StatusOK, users)
 		return nil
 	}
 	return HandlerFunc(fn)
diff --git a/core/kg/app/app.go b/core/kg/app/app.go
index 0d8b312..8cdc0d6 100644
--- a/core/kg/app/app.go
+++ b/core/kg/app/app.go
@@ -1,6 +1,7 @@
 package app
 
 import (
+	"github.com/giolekva/pcloud/core/kg/common"
 	"github.com/giolekva/pcloud/core/kg/model"
 	"github.com/giolekva/pcloud/core/kg/store"
 )
@@ -9,11 +10,11 @@
 type App struct {
 	store  store.Store
 	config *model.Config
-	logger logger
+	logger common.LoggerIface
 }
 
 // NewApp creates new app
-func NewApp(store store.Store, config *model.Config, logger logger) *App {
+func NewApp(store store.Store, config *model.Config, logger common.LoggerIface) *App {
 	return &App{
 		store:  store,
 		config: config,
diff --git a/core/kg/app/app_mock.go b/core/kg/app/app_mock.go
index f85e754..41575ff 100644
--- a/core/kg/app/app_mock.go
+++ b/core/kg/app/app_mock.go
@@ -2,6 +2,7 @@
 
 import (
 	"github.com/giolekva/pcloud/core/kg/log"
+	"github.com/giolekva/pcloud/core/kg/model"
 	"github.com/giolekva/pcloud/core/kg/store/memory"
 )
 
@@ -13,6 +14,7 @@
 func NewTestApp() *MockApp {
 	memStore := memory.New()
 	logger := &log.NoOpLogger{}
-	a := NewApp(memStore, logger)
+	config := model.NewConfig()
+	a := NewApp(memStore, config, logger)
 	return &MockApp{a}
 }
diff --git a/core/kg/app/interfaces.go b/core/kg/app/interfaces.go
deleted file mode 100644
index 53cb1aa..0000000
--- a/core/kg/app/interfaces.go
+++ /dev/null
@@ -1,10 +0,0 @@
-package app
-
-import "github.com/giolekva/pcloud/core/kg/log"
-
-type logger interface {
-	Debug(message string, fields ...log.Field)
-	Info(message string, fields ...log.Field)
-	Warn(message string, fields ...log.Field)
-	Error(message string, fields ...log.Field)
-}
diff --git a/core/kg/app/user.go b/core/kg/app/user.go
index dd25e84..063c084 100644
--- a/core/kg/app/user.go
+++ b/core/kg/app/user.go
@@ -15,6 +15,7 @@
 	return user, nil
 }
 
+// CreateUser creates a user. For now it is used only for creation of the very first user
 func (a *App) CreateUser(user *model.User) (*model.User, error) {
 	if !a.isFirstUserAccount() {
 		return nil, errors.New("not a first user")
@@ -28,6 +29,15 @@
 	return updatedUser, nil
 }
 
+//GetUsers returns list of users
+func (a *App) GetUsers(page, perPage int) ([]*model.User, error) {
+	users, err := a.store.User().GetAllWithOptions(page, perPage)
+	if err != nil {
+		return nil, errors.Wrap(err, "can't get users with options from store")
+	}
+	return users, nil
+}
+
 func (a *App) isFirstUserAccount() bool {
 	count, err := a.store.User().Count()
 	if err != nil {
diff --git a/core/kg/common/interfaces.go b/core/kg/common/interfaces.go
index 2c20e28..4966c13 100644
--- a/core/kg/common/interfaces.go
+++ b/core/kg/common/interfaces.go
@@ -15,4 +15,5 @@
 type AppIface interface {
 	GetUser(userID string) (*model.User, error)
 	CreateUser(user *model.User) (*model.User, error)
+	GetUsers(page, perPage int) ([]*model.User, error)
 }
diff --git a/core/kg/store/memory/user_store.go b/core/kg/store/memory/user_store.go
index 62d1ea6..c551131 100644
--- a/core/kg/store/memory/user_store.go
+++ b/core/kg/store/memory/user_store.go
@@ -64,6 +64,23 @@
 	return users, nil
 }
 
+func (us *memoryUserStore) GetAllWithOptions(page, perPage int) ([]*model.User, error) {
+	us.mutex.RLock()
+	defer us.mutex.RUnlock()
+
+	// Not an ideal way to implement a pagination over a map but memory store is for testing anyway.
+	v := make([]*model.User, 0, len(us.users))
+	for _, value := range us.users {
+		v = append(v, value)
+	}
+	users := make([]*model.User, 0, perPage)
+	startIndex := page * perPage
+	for i := startIndex; i < startIndex+perPage && i < len(us.users); i++ {
+		users = append(users, v[i].Clone())
+	}
+	return users, nil
+}
+
 func (us *memoryUserStore) Count() (int64, error) {
 	return int64(us.maxID) - 1, nil
 }
diff --git a/core/kg/store/sqlstore/user_store.go b/core/kg/store/sqlstore/user_store.go
index 38a196a..34ca081 100644
--- a/core/kg/store/sqlstore/user_store.go
+++ b/core/kg/store/sqlstore/user_store.go
@@ -53,3 +53,7 @@
 func (us SqlUserStore) Count() (int64, error) {
 	return 0, nil
 }
+
+func (us SqlUserStore) GetAllWithOptions(page, perPage int) ([]*model.User, error) {
+	return nil, nil
+}
diff --git a/core/kg/store/store.go b/core/kg/store/store.go
index 3d4f4f7..d8ca29d 100644
--- a/core/kg/store/store.go
+++ b/core/kg/store/store.go
@@ -13,4 +13,5 @@
 	Get(id string) (*model.User, error)
 	GetAll() ([]*model.User, error)
 	Count() (int64, error)
+	GetAllWithOptions(page, perPage int) ([]*model.User, error)
 }
