diff --git a/core/kg/api/rest/handler.go b/core/kg/api/rest/handler.go
new file mode 100644
index 0000000..dbc5882
--- /dev/null
+++ b/core/kg/api/rest/handler.go
@@ -0,0 +1,43 @@
+package rest
+
+import (
+	"encoding/json"
+	"net/http"
+)
+
+type HandlerFunc func(w http.ResponseWriter, r *http.Request) error
+
+// ServeHTTP calls f(w, r) and handles error
+func (f HandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+	if err := f(w, r); err != nil {
+		jsoner(w, http.StatusBadRequest, err.Error()) // TODO detect the correct statusCode from error
+	}
+}
+
+func jsoner(w http.ResponseWriter, statusCode int, payload interface{}) error {
+	w.Header().Set("Content-Type", "application/json")
+
+	// If there is nothing to marshal then set status code and return.
+	if payload == nil {
+		_, err := w.Write([]byte("{}"))
+		return err
+	}
+
+	if statusCode != http.StatusOK {
+		w.WriteHeader(statusCode)
+	}
+
+	encoder := json.NewEncoder(w)
+	encoder.SetEscapeHTML(true)
+	encoder.SetIndent("", "")
+
+	if err := encoder.Encode(payload); err != nil {
+		return err
+	}
+
+	if f, ok := w.(http.Flusher); ok {
+		f.Flush()
+	}
+
+	return nil
+}
diff --git a/core/kg/api/rest/router.go b/core/kg/api/rest/router.go
index 8e695f2..c0bb33a 100644
--- a/core/kg/api/rest/router.go
+++ b/core/kg/api/rest/router.go
@@ -3,37 +3,43 @@
 import (
 	"net/http"
 
+	"github.com/giolekva/pcloud/core/kg/common"
 	"github.com/gorilla/mux"
 )
 
 const APIURLSuffix = "/api/v1"
 
-type Routers struct {
+type Router struct {
+	App    common.AppIface
+	Logger common.LoggerIface
+
 	Root    *mux.Router // ''
 	APIRoot *mux.Router // 'api/v1'
 	Users   *mux.Router // 'api/v1/users'
 	User    *mux.Router // 'api/v1/users/{user_id:[A-Za-z0-9]+}'
 }
 
-func NewRouter(root *mux.Router) *Routers {
+func NewRouter(root *mux.Router, app common.AppIface, logger common.LoggerIface) *Router {
 	apiRoot := root.PathPrefix(APIURLSuffix).Subrouter()
 	users := apiRoot.PathPrefix("/users").Subrouter()
 	user := apiRoot.PathPrefix("/users/{user_id:[A-Za-z0-9]+}").Subrouter()
 
-	routers := &Routers{
+	routers := &Router{
+		App:    app,
+		Logger: logger,
+
 		Root:    root,
 		APIRoot: apiRoot,
 		Users:   users,
 		User:    user,
 	}
+
 	root.Handle("/api/v1/{anything:.*}", http.HandlerFunc(http.NotFound))
 	routers.initUsers()
 
 	return routers
 }
 
-func (r *Routers) initUsers() {
-	r.Users.Handle("", http.HandlerFunc(createUser)).Methods("POST")
-	r.Users.Handle("", http.HandlerFunc(getUsers)).Methods("GET")
-	r.User.Handle("", http.HandlerFunc(getUser)).Methods("GET")
+func (router *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+	router.Root.ServeHTTP(w, req)
 }
diff --git a/core/kg/api/rest/user_service.go b/core/kg/api/rest/user_service.go
index 91c7cb6..c129b78 100644
--- a/core/kg/api/rest/user_service.go
+++ b/core/kg/api/rest/user_service.go
@@ -1,12 +1,52 @@
 package rest
 
-import "net/http"
+import (
+	"net/http"
 
-func createUser(w http.ResponseWriter, r *http.Request) {
+	"github.com/gorilla/mux"
+	"github.com/pkg/errors"
+)
+
+func (router *Router) initUsers() {
+	router.Users.Handle("", router.buildCreateUserHandler()).Methods("POST")
+	router.Users.Handle("", router.buildGetUsersHandler()).Methods("GET")
+	router.User.Handle("", router.buildGetUserHandler()).Methods("GET")
 }
 
-func getUsers(w http.ResponseWriter, r *http.Request) {
+func (router *Router) buildCreateUserHandler() http.Handler {
+	fn := func(w http.ResponseWriter, r *http.Request) error {
+		router.Logger.Debug("Rest API: create user")
+		return nil
+	}
+	return HandlerFunc(fn)
 }
 
-func getUser(w http.ResponseWriter, r *http.Request) {
+func (router *Router) buildGetUsersHandler() http.Handler {
+	fn := func(w http.ResponseWriter, r *http.Request) error {
+		router.Logger.Debug("Rest API: get users")
+		return nil
+	}
+	return HandlerFunc(fn)
+}
+
+func (router *Router) buildGetUserHandler() http.Handler {
+	fn := func(w http.ResponseWriter, r *http.Request) error {
+		router.Logger.Debug("Rest API: get user")
+		params := mux.Vars(r)
+
+		var userID string
+		var ok bool
+		if userID, ok = params["user_id"]; !ok {
+			return errors.New("missing parameter: user_id")
+		}
+		user, err := router.App.GetUser(userID)
+
+		if err != nil {
+			return errors.Wrapf(err, "can't get user from app")
+		}
+
+		jsoner(w, http.StatusOK, user)
+		return nil
+	}
+	return HandlerFunc(fn)
 }
