diff --git a/core/kg/api/rest/router.go b/core/kg/api/rest/router.go
new file mode 100644
index 0000000..8e695f2
--- /dev/null
+++ b/core/kg/api/rest/router.go
@@ -0,0 +1,39 @@
+package rest
+
+import (
+	"net/http"
+
+	"github.com/gorilla/mux"
+)
+
+const APIURLSuffix = "/api/v1"
+
+type Routers struct {
+	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 {
+	apiRoot := root.PathPrefix(APIURLSuffix).Subrouter()
+	users := apiRoot.PathPrefix("/users").Subrouter()
+	user := apiRoot.PathPrefix("/users/{user_id:[A-Za-z0-9]+}").Subrouter()
+
+	routers := &Routers{
+		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")
+}
diff --git a/core/kg/api/rest/user_service.go b/core/kg/api/rest/user_service.go
new file mode 100644
index 0000000..91c7cb6
--- /dev/null
+++ b/core/kg/api/rest/user_service.go
@@ -0,0 +1,12 @@
+package rest
+
+import "net/http"
+
+func createUser(w http.ResponseWriter, r *http.Request) {
+}
+
+func getUsers(w http.ResponseWriter, r *http.Request) {
+}
+
+func getUser(w http.ResponseWriter, r *http.Request) {
+}
diff --git a/core/kg/api/rpc/user_service.go b/core/kg/api/rpc/user_service.go
new file mode 100644
index 0000000..c424cee
--- /dev/null
+++ b/core/kg/api/rpc/user_service.go
@@ -0,0 +1,47 @@
+package rpc
+
+import (
+	"context"
+
+	"github.com/giolekva/pcloud/core/kg/common"
+	"github.com/giolekva/pcloud/core/kg/model/proto"
+	"github.com/pkg/errors"
+	"google.golang.org/protobuf/types/known/timestamppb"
+)
+
+type userService struct {
+	proto.UnimplementedUserServiceServer
+	app common.AppIface
+}
+
+// NewService returns new user service
+func NewService(app common.AppIface) proto.UserServiceServer {
+	s := &userService{
+		app: app,
+	}
+	return s
+}
+
+func (us *userService) GetUser(c context.Context, r *proto.GetUserRequest) (*proto.GetUserResponse, error) {
+	user, err := us.app.GetUser(r.GetId())
+	if err != nil {
+		return nil, errors.Wrap(err, "can't get user from application")
+	}
+	return &proto.GetUserResponse{
+		User: &proto.User{
+			Id:                 &user.ID,
+			CreateAt:           &timestamppb.Timestamp{Seconds: user.CreateAt},
+			UpdateAt:           &timestamppb.Timestamp{Seconds: user.UpdateAt},
+			DeleteAt:           &timestamppb.Timestamp{Seconds: user.DeleteAt},
+			Username:           user.Username,
+			Password:           user.Password,
+			LastPasswordUpdate: &timestamppb.Timestamp{Seconds: user.LastPasswordUpdate},
+		},
+	}, nil
+}
+func (us *userService) ListUsers(context.Context, *proto.ListUserRequest) (*proto.ListUserResponse, error) {
+	return nil, nil
+}
+func (us *userService) CreateUser(context.Context, *proto.CreateUserRequest) (*proto.CreateUserResponse, error) {
+	return nil, nil
+}
diff --git a/core/kg/api/rpc/user_service_test.go b/core/kg/api/rpc/user_service_test.go
new file mode 100644
index 0000000..ec53f89
--- /dev/null
+++ b/core/kg/api/rpc/user_service_test.go
@@ -0,0 +1,32 @@
+package rpc_test
+
+import (
+	"context"
+	"fmt"
+	"testing"
+
+	"github.com/giolekva/pcloud/core/kg/model/proto"
+	"github.com/giolekva/pcloud/core/kg/server"
+	"github.com/stretchr/testify/assert"
+	"google.golang.org/grpc"
+)
+
+func TestUserService(t *testing.T) {
+	ts := server.Setup(t)
+	defer ts.ShutdownServers()
+	_, err := ts.App.GetUser("id")
+	assert.NotNil(t, err)
+
+	ctx := context.Background()
+	address := fmt.Sprintf("localhost:%d", ts.Config.GRPC.Port)
+	conn, err := grpc.Dial(address, grpc.WithInsecure())
+	if err != nil {
+		t.Fatalf("did not connect: %v", err)
+	}
+	defer conn.Close()
+
+	client := proto.NewUserServiceClient(conn)
+	request := &proto.GetUserRequest{Id: "id"}
+	_, err = client.GetUser(ctx, request)
+	assert.NotNil(t, err)
+}
