diff --git a/bff/api/account.go b/bff/api/account.go
deleted file mode 100644
index 2d95c35..0000000
--- a/bff/api/account.go
+++ /dev/null
@@ -1,271 +0,0 @@
-package api
-
-import (
-	"database/sql"
-	"errors"
-	"net/http"
-	"time"
-
-	"github.com/gin-gonic/gin"
-	db "github.com/itsscb/df/bff/db/sqlc"
-	"github.com/itsscb/df/bff/token"
-)
-
-type createAccountRequest struct {
-	Passwordhash    string    `binding:"required" json:"passwordhash"`
-	PrivacyAccepted bool      `json:"privacy_accepted"`
-	Firstname       string    `binding:"required" json:"firstname"`
-	Lastname        string    `binding:"required" json:"lastname"`
-	Birthday        time.Time `binding:"required" json:"birthday"`
-	Email           string    `binding:"required" json:"email"`
-	Phone           string    `json:"phone"`
-	City            string    `binding:"required" json:"city"`
-	Zip             string    `binding:"required" json:"zip"`
-	Street          string    `binding:"required" json:"street"`
-	Country         string    `binding:"required" json:"country"`
-}
-
-func (server *Server) createAccount(ctx *gin.Context) {
-	var req createAccountRequest
-	if err := ctx.ShouldBindJSON(&req); err != nil {
-		ctx.JSON(http.StatusBadRequest, errorResponse(err))
-		return
-	}
-
-	arg := db.CreateAccountTxParams{
-		CreateAccountParams: db.CreateAccountParams{
-			Passwordhash: req.Passwordhash,
-			PrivacyAccepted: sql.NullBool{
-				Valid: true,
-				Bool:  req.PrivacyAccepted,
-			},
-			Firstname: req.Firstname,
-			Lastname:  req.Lastname,
-			Birthday:  req.Birthday,
-			Email:     req.Email,
-			City:      req.City,
-			Zip:       req.Zip,
-			Street:    req.Street,
-			Country:   req.Country,
-			Creator:   req.Email,
-			Phone: sql.NullString{
-				Valid:  req.Phone != "",
-				String: req.Phone,
-			},
-		},
-		AfterCreate: func(a db.Account) error { return nil },
-	}
-
-	account, err := server.store.CreateAccountTx(ctx, arg)
-	if err != nil {
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	ctx.JSON(http.StatusOK, account)
-}
-
-type getAccountRequest struct {
-	ID uint64 `uri:"id" binding:"required,min=1" json:"id"`
-}
-
-func (server *Server) getAccount(ctx *gin.Context) {
-	var req getAccountRequest
-
-	if err := ctx.ShouldBindUri(&req); err != nil {
-		ctx.JSON(http.StatusBadRequest, errorResponse(err))
-		return
-	}
-
-	account, err := server.store.GetAccount(ctx, req.ID)
-	if err != nil {
-		if err == sql.ErrNoRows {
-			ctx.JSON(http.StatusNotFound, errorResponse(err))
-			return
-		}
-
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	authPayload := ctx.MustGet(authorizationPayloadKey).(*token.Payload)
-	if account.ID != authPayload.AccountID {
-		err := errors.New("account doesn't belong to the authenticated user")
-		ctx.JSON(http.StatusUnauthorized, errorResponse(err))
-		return
-	}
-
-	ctx.JSON(http.StatusOK, account)
-}
-
-type listAccountRequest struct {
-	PageID   int32 `form:"page_id" binding:"required,min=1"`
-	PageSize int32 `form:"page_size" binding:"required,min=5,max=50"`
-}
-
-func (server *Server) listAccounts(ctx *gin.Context) {
-	var req listAccountRequest
-
-	if err := ctx.ShouldBindQuery(&req); err != nil {
-		ctx.JSON(http.StatusBadRequest, errorResponse(err))
-		return
-	}
-
-	authPayload := ctx.MustGet(authorizationPayloadKey).(*token.Payload)
-
-	account, err := server.store.GetAccount(ctx, authPayload.AccountID)
-	if err != nil {
-		if err == sql.ErrNoRows {
-			ctx.JSON(http.StatusNotFound, errorResponse(err))
-			return
-		}
-
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	if account.PermissionLevel < 1 {
-		err := errors.New("only for admin users")
-		ctx.JSON(http.StatusUnauthorized, errorResponse(err))
-		return
-	}
-
-	arg := db.ListAccountsParams{
-		Limit:  req.PageSize,
-		Offset: (req.PageID - 1) * req.PageSize,
-	}
-
-	accounts, err := server.store.ListAccounts(ctx, arg)
-	if err != nil {
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	ctx.JSON(http.StatusOK, accounts)
-}
-
-type updateAccountPrivacyRequest struct {
-	ID              uint64 `binding:"required" json:"ID"`
-	PrivacyAccepted *bool  `binding:"required" json:"privacy_accepted"`
-}
-
-func (server *Server) updateAccountPrivacy(ctx *gin.Context) {
-	var req updateAccountPrivacyRequest
-	if err := ctx.ShouldBindJSON(&req); err != nil {
-		ctx.JSON(http.StatusBadRequest, errorResponse(err))
-		return
-	}
-
-	account, err := server.store.GetAccount(ctx, req.ID)
-	if err != nil {
-		ctx.JSON(http.StatusNotFound, errorResponse(err))
-		return
-	}
-
-	authPayload := ctx.MustGet(authorizationPayloadKey).(*token.Payload)
-	if account.ID != authPayload.AccountID {
-		err := errors.New("account doesn't belong to the authenticated user")
-		ctx.JSON(http.StatusUnauthorized, errorResponse(err))
-		return
-	}
-
-	account, err = server.store.UpdateAccountPrivacyTx(ctx, db.UpdateAccountPrivacyTxParams{
-		ID:              req.ID,
-		Changer:         account.Email,
-		PrivacyAccepted: req.PrivacyAccepted,
-	})
-	if err != nil {
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	ctx.JSON(http.StatusOK, account)
-}
-
-type updateAccountRequest struct {
-	ID          uint64    `binding:"required" json:"ID"`
-	NewPassword string    `json:"new_password"`
-	Firstname   string    `json:"firstname"`
-	Lastname    string    `json:"lastname"`
-	Birthday    time.Time `json:"birthday"`
-	Email       string    `json:"email"`
-	Phone       string    `json:"phone"`
-	City        string    `json:"city"`
-	Zip         string    `json:"zip"`
-	Street      string    `json:"street"`
-	Country     string    `json:"country"`
-}
-
-func (server *Server) updateAccount(ctx *gin.Context) {
-	var req updateAccountRequest
-	if err := ctx.ShouldBindJSON(&req); err != nil {
-		ctx.JSON(http.StatusBadRequest, errorResponse(err))
-		return
-	}
-
-	account, err := server.store.GetAccount(ctx, req.ID)
-	if err != nil {
-		ctx.JSON(http.StatusNotFound, errorResponse(err))
-		return
-	}
-
-	authPayload := ctx.MustGet(authorizationPayloadKey).(*token.Payload)
-	if account.ID != authPayload.AccountID {
-		err := errors.New("account doesn't belong to the authenticated user")
-		ctx.JSON(http.StatusUnauthorized, errorResponse(err))
-		return
-	}
-
-	arg := db.UpdateAccountTxParams{
-		ID:      req.ID,
-		Changer: account.Email,
-		Passwordhash: sql.NullString{
-			String: req.NewPassword,
-			Valid:  req.NewPassword != "",
-		},
-		Firstname: sql.NullString{
-			String: req.Firstname,
-			Valid:  req.Firstname != "",
-		},
-		Lastname: sql.NullString{
-			String: req.Lastname,
-			Valid:  req.Lastname != "",
-		},
-		Birthday: sql.NullTime{
-			Time:  req.Birthday,
-			Valid: req.Birthday != time.Time{},
-		},
-		Email: sql.NullString{
-			String: req.Email,
-			Valid:  req.Email != "",
-		},
-		City: sql.NullString{
-			String: req.City,
-			Valid:  req.City != "",
-		},
-		Zip: sql.NullString{
-			String: req.Zip,
-			Valid:  req.Zip != "",
-		},
-		Street: sql.NullString{
-			String: req.Street,
-			Valid:  req.Street != "",
-		},
-		Country: sql.NullString{
-			String: req.Country,
-			Valid:  req.Country != "",
-		},
-		Phone: sql.NullString{
-			String: req.Phone,
-			Valid:  req.Phone != "",
-		},
-	}
-
-	account, err = server.store.UpdateAccountTx(ctx, arg)
-	if err != nil {
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	ctx.JSON(http.StatusOK, account)
-}
diff --git a/bff/api/account_test.go b/bff/api/account_test.go
deleted file mode 100644
index f62868c..0000000
--- a/bff/api/account_test.go
+++ /dev/null
@@ -1,964 +0,0 @@
-package api
-
-import (
-	"bytes"
-	"database/sql"
-	"encoding/json"
-	"fmt"
-	"io"
-	"net/http"
-	"net/http/httptest"
-	"reflect"
-	"testing"
-	"time"
-
-	"github.com/gin-gonic/gin"
-	mockdb "github.com/itsscb/df/bff/db/mock"
-	db "github.com/itsscb/df/bff/db/sqlc"
-	"github.com/itsscb/df/bff/token"
-	"github.com/itsscb/df/bff/util"
-	"github.com/stretchr/testify/require"
-	"go.uber.org/mock/gomock"
-)
-
-var timestamp = time.Now()
-
-type eqCreateAccountTxParamsMatcher struct {
-	arg      db.CreateAccountTxParams
-	password string
-	user     db.Account
-}
-
-func (expected eqCreateAccountTxParamsMatcher) Matches(x interface{}) bool {
-	actualArg, ok := x.(db.CreateAccountTxParams)
-	if !ok {
-		return false
-	}
-
-	err := util.CheckPassword(expected.password, actualArg.Passwordhash)
-	if err != nil {
-		return false
-	}
-
-	expected.arg.Passwordhash = actualArg.Passwordhash
-	if !reflect.DeepEqual(expected.arg.CreateAccountParams, actualArg.CreateAccountParams) {
-		return false
-	}
-
-	err = actualArg.AfterCreate(expected.user)
-	return err == nil
-}
-
-func (e eqCreateAccountTxParamsMatcher) String() string {
-	return fmt.Sprintf("matches arg %v and password %v", e.arg, e.password)
-}
-
-func EqCreateAccountTxParams(arg db.CreateAccountTxParams, password string, user db.Account) gomock.Matcher {
-	return eqCreateAccountTxParamsMatcher{arg, password, user}
-}
-
-func TestCreateAccountAPI(t *testing.T) {
-	account, password := randomAccount()
-
-	// fn := func(db.Account) error { return nil}
-
-	testCases := []struct {
-		name          string
-		body          gin.H
-		setupAuth     func(t *testing.T, request *http.Request, tokenMaker token.Maker)
-		buildStubs    func(store *mockdb.MockStore)
-		checkResponse func(recorder *httptest.ResponseRecorder)
-	}{
-		{
-			name: "OK",
-			body: gin.H{
-				"passwordhash":     account.Passwordhash,
-				"privacy_accepted": account.PrivacyAccepted.Bool,
-				"firstname":        account.Firstname,
-				"lastname":         account.Lastname,
-				"birthday":         account.Birthday,
-				"email":            account.Email,
-				"city":             account.City,
-				"zip":              account.Zip,
-				"street":           account.Street,
-				"country":          account.Country,
-				"phone":            account.Phone.String,
-				"creator":          account.Email,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				arg := db.CreateAccountTxParams{
-					CreateAccountParams: db.CreateAccountParams{
-						Passwordhash:    account.Passwordhash,
-						PrivacyAccepted: account.PrivacyAccepted,
-						Firstname:       account.Firstname,
-						Lastname:        account.Lastname,
-						Birthday:        account.Birthday,
-						Email:           account.Email,
-						City:            account.City,
-						Zip:             account.Zip,
-						Street:          account.Street,
-						Country:         account.Country,
-						Phone:           account.Phone,
-						Creator:         account.Email,
-					},
-					AfterCreate: func(a db.Account) error { return nil },
-				}
-
-				store.EXPECT().
-					CreateAccountTx(gomock.Any(), EqCreateAccountTxParams(arg, password, account)).
-					Times(1).
-					Return(account, nil)
-
-				// store.EXPECT().
-				// 	CreateAccountTx(gomock.Any(), gomock.Eq(arg)).
-				// 	Times(1).
-				// 	Return(account, nil)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusOK, recorder.Code)
-				requireBodyMatchAccount(t, recorder.Body, account)
-			},
-		},
-		// {
-		// 	name: "NoAuthorization",
-		// 	body: gin.H{
-		// 		"passwordhash":     account.Passwordhash,
-		// 		"privacy_accepted": account.PrivacyAccepted.Bool,
-		// 		"firstname":        account.Firstname,
-		// 		"lastname":         account.Lastname,
-		// 		"birthday":         account.Birthday,
-		// 		"email":            account.Email,
-		// 		"city":             account.City,
-		// 		"zip":              account.Zip,
-		// 		"street":           account.Street,
-		// 		"country":          account.Country,
-		// 		"phone":            account.Phone.String,
-		// 		"creator":          account.Email,
-		// 	},
-		// 	setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-		// 	},
-		// 	buildStubs: func(store *mockdb.MockStore) {
-		// 		store.EXPECT().
-		// 			CreateAccountTx(gomock.Any(), gomock.Any()).
-		// 			Times(0)
-		// 	},
-		// 	checkResponse: func(recorder *httptest.ResponseRecorder) {
-		// 		require.Equal(t, http.StatusUnauthorized, recorder.Code)
-		// 	},
-		// },
-		{
-			name: "BadRequest",
-			body: gin.H{
-				"email": account.Email,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					CreateAccountTx(gomock.Any(), gomock.Any()).
-					Times(0)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusBadRequest, recorder.Code)
-			},
-		},
-		{
-			name: "InternalServerError",
-			body: gin.H{
-				"passwordhash":          account.Passwordhash,
-				"privacy_accepted":      account.PrivacyAccepted.Bool,
-				"privacy_accepted_date": account.PrivacyAcceptedDate.Time,
-				"firstname":             account.Firstname,
-				"lastname":              account.Lastname,
-				"birthday":              account.Birthday,
-				"email":                 account.Email,
-				"city":                  account.City,
-				"zip":                   account.Zip,
-				"street":                account.Street,
-				"country":               account.Country,
-				"phone":                 account.Phone.String,
-				"creator":               account.Email,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					CreateAccountTx(gomock.Any(), gomock.Any()).
-					Times(1).
-					Return(db.Account{}, sql.ErrConnDone)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusInternalServerError, recorder.Code)
-			},
-		},
-	}
-
-	for i := range testCases {
-		tc := testCases[i]
-
-		t.Run(tc.name, func(t *testing.T) {
-			ctrl := gomock.NewController(t)
-			defer ctrl.Finish()
-
-			store := mockdb.NewMockStore(ctrl)
-			tc.buildStubs(store)
-
-			server, err := NewServer(config, store, nil)
-			require.NoError(t, err)
-
-			recorder := httptest.NewRecorder()
-
-			// Marshal body data to JSON
-			data, err := json.Marshal(tc.body)
-			require.NoError(t, err)
-
-			url := "/accounts"
-			request, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(data))
-			require.NoError(t, err)
-
-			tc.setupAuth(t, request, server.tokenMaker)
-			server.router.ServeHTTP(recorder, request)
-			tc.checkResponse(recorder)
-		})
-	}
-}
-
-func TestGetAccountAPI(t *testing.T) {
-	account, _ := randomAccount()
-
-	testCases := []struct {
-		name          string
-		accountID     uint64
-		setupAuth     func(t *testing.T, request *http.Request, tokenMaker token.Maker)
-		buildStubs    func(store *mockdb.MockStore)
-		checkResponse func(t *testing.T, recorder *httptest.ResponseRecorder)
-	}{
-		{
-			name:      "OK",
-			accountID: account.ID,
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Eq(account.ID)).
-					Times(1).
-					Return(account, nil)
-			},
-			checkResponse: func(t *testing.T, recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusOK, recorder.Code)
-				requireBodyMatchAccount(t, recorder.Body, account)
-			},
-		},
-		{
-			name:      "UnauthorizedUser",
-			accountID: account.ID,
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, 2, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Eq(account.ID)).
-					Times(1).
-					Return(account, nil)
-			},
-			checkResponse: func(t *testing.T, recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusUnauthorized, recorder.Code)
-			},
-		},
-		{
-			name:      "NoAuthorization",
-			accountID: account.ID,
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Any()).
-					Times(0)
-			},
-			checkResponse: func(t *testing.T, recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusUnauthorized, recorder.Code)
-			},
-		},
-		{
-			name:      "NotFound",
-			accountID: account.ID,
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Eq(account.ID)).
-					Times(1).
-					Return(db.Account{}, sql.ErrNoRows)
-			},
-			checkResponse: func(t *testing.T, recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusNotFound, recorder.Code)
-			},
-		},
-		{
-			name:      "InternalError",
-			accountID: account.ID,
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Eq(account.ID)).
-					Times(1).
-					Return(db.Account{}, sql.ErrConnDone)
-			},
-			checkResponse: func(t *testing.T, recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusInternalServerError, recorder.Code)
-			},
-		},
-		{
-			name:      "InvalidID",
-			accountID: 0,
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Any()).
-					Times(0)
-			},
-			checkResponse: func(t *testing.T, recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusBadRequest, recorder.Code)
-			},
-		},
-	}
-
-	for i := range testCases {
-		tc := testCases[i]
-
-		t.Run(tc.name, func(t *testing.T) {
-			ctrl := gomock.NewController(t)
-			defer ctrl.Finish()
-
-			store := mockdb.NewMockStore(ctrl)
-			tc.buildStubs(store)
-
-			server, err := NewServer(config, store, nil)
-			require.NoError(t, err)
-			recorder := httptest.NewRecorder()
-
-			url := fmt.Sprintf("/accounts/%d", tc.accountID)
-			request, err := http.NewRequest(http.MethodGet, url, nil)
-			require.NoError(t, err)
-
-			tc.setupAuth(t, request, server.tokenMaker)
-			server.router.ServeHTTP(recorder, request)
-			tc.checkResponse(t, recorder)
-		})
-	}
-}
-
-func TestUpdateAccountTxAPI(t *testing.T) {
-	account, _ := randomAccount()
-	newLastname := util.RandomName()
-
-	testCases := []struct {
-		name          string
-		body          gin.H
-		accountID     string
-		setupAuth     func(t *testing.T, request *http.Request, tokenMaker token.Maker)
-		buildStubs    func(store *mockdb.MockStore)
-		checkResponse func(recorder *httptest.ResponseRecorder)
-	}{
-		// {
-		// 	name: "OK_PasswordHash",
-		// 	body: gin.H{
-		// 		"id":           account.ID,
-		// 		"passwordhash": newPassword,
-		// 		"changer":      changer,
-		// 	},
-		// 	setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-		// 		addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.Email, time.Minute)
-		// 	},
-		// 	buildStubs: func(store *mockdb.MockStore) {
-		// 		var err error
-		// 		accountTemp := account
-		// 		accountTemp.Passwordhash, err = util.HashPassword(newPassword)
-		// 		require.NoError(t, err)
-		// 		accountTemp.Changer = changer
-		// 		arg := db.UpdateAccountTxParams{
-		// 			ID: account.ID,
-		// 			Passwordhash: sql.NullString{
-		// 				Valid:  true,
-		// 				String: newPassword,
-		// 			},
-		// 			Changer: changer,
-		// 		}
-
-		// 		store.EXPECT().
-		// 			UpdateAccountTx(gomock.Any(), gomock.Eq(arg)).
-		// 			Times(1).
-		// 			Return(accountTemp, nil)
-		// 	},
-		// 	checkResponse: func(recorder *httptest.ResponseRecorder) {
-		// 		require.Equal(t, http.StatusOK, recorder.Code)
-
-		// 		accountTemp := account
-		// 		accountTemp.Passwordhash = newPassword
-		// 		accountTemp.Changer = changer
-
-		// 		requireBodyMatchAccount(t, recorder.Body, accountTemp)
-		// 	},
-		// },
-		{
-			name: "OK_Lastname",
-			body: gin.H{
-				"id":       account.ID,
-				"lastname": newLastname,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				arg := db.UpdateAccountTxParams{
-					ID: account.ID,
-					Lastname: sql.NullString{
-						Valid:  true,
-						String: newLastname,
-					},
-					Changer: account.Email,
-				}
-
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Eq(account.ID)).
-					Times(1).
-					Return(account, nil)
-
-				store.EXPECT().
-					UpdateAccountTx(gomock.Any(), gomock.Eq(arg)).
-					Times(1).
-					Return(account, nil)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusOK, recorder.Code)
-				requireBodyMatchAccount(t, recorder.Body, account)
-			},
-		},
-		{
-			name: "NoAuthorization",
-			body: gin.H{
-				"id":       account.ID,
-				"lastname": newLastname,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					CreateAccount(gomock.Any(), gomock.Any()).
-					Times(0)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusUnauthorized, recorder.Code)
-			},
-		},
-		{
-			name: "BadRequest",
-			body: gin.H{
-				"email": account.Email,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					CreateAccount(gomock.Any(), gomock.Any()).
-					Times(0).
-					Return(db.Account{}, sql.ErrConnDone)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusBadRequest, recorder.Code)
-			},
-		},
-	}
-
-	for i := range testCases {
-		tc := testCases[i]
-
-		t.Run(tc.name, func(t *testing.T) {
-			ctrl := gomock.NewController(t)
-			defer ctrl.Finish()
-
-			store := mockdb.NewMockStore(ctrl)
-			tc.buildStubs(store)
-
-			server, err := NewServer(config, store, nil)
-			require.NoError(t, err)
-
-			recorder := httptest.NewRecorder()
-
-			// Marshal body data to JSON
-			data, err := json.Marshal(tc.body)
-			require.NoError(t, err)
-
-			url := "/accounts"
-			request, err := http.NewRequest(http.MethodPut, url, bytes.NewReader(data))
-			require.NoError(t, err)
-
-			tc.setupAuth(t, request, server.tokenMaker)
-			server.router.ServeHTTP(recorder, request)
-			tc.checkResponse(recorder)
-		})
-	}
-}
-
-func TestListAccountsAPI(t *testing.T) {
-
-	n := 5
-	accounts := make([]db.Account, n)
-	for i := 0; i < n; i++ {
-		accounts[i], _ = randomAccount()
-	}
-	account := accounts[1]
-
-	type Query struct {
-		pageID   int
-		pageSize int
-	}
-
-	testCases := []struct {
-		name          string
-		query         Query
-		setupAuth     func(t *testing.T, request *http.Request, tokenMaker token.Maker)
-		buildStubs    func(store *mockdb.MockStore)
-		checkResponse func(recorder *httptest.ResponseRecorder)
-	}{
-		{
-			name: "OK",
-			query: Query{
-				pageID:   1,
-				pageSize: n,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				arg := db.ListAccountsParams{
-					Limit:  int32(n),
-					Offset: 0,
-				}
-
-				accountAdmin := account
-				accountAdmin.PermissionLevel = 1
-
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Eq(account.ID)).
-					Times(1).
-					Return(accountAdmin, nil)
-
-				store.EXPECT().
-					ListAccounts(gomock.Any(), gomock.Eq(arg)).
-					Times(1).
-					Return(accounts, nil)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusOK, recorder.Code)
-				requireBodyMatchAccounts(t, recorder.Body, accounts)
-			},
-		},
-		{
-			name: "NoAuthorization",
-			query: Query{
-				pageID:   1,
-				pageSize: n,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					ListAccounts(gomock.Any(), gomock.Any()).
-					Times(0)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusUnauthorized, recorder.Code)
-			},
-		},
-		{
-			name:  "EmptyQuery",
-			query: Query{},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					ListAccounts(gomock.Any(), gomock.Any()).
-					Times(0)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusBadRequest, recorder.Code)
-			},
-		},
-		{
-			name: "InvalidPageID",
-			query: Query{
-				pageID:   -1,
-				pageSize: n,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					ListAccounts(gomock.Any(), gomock.Any()).
-					Times(0)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusBadRequest, recorder.Code)
-			},
-		},
-		{
-			name: "InvalidPageSize",
-			query: Query{
-				pageID:   1,
-				pageSize: 100000,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					ListAccounts(gomock.Any(), gomock.Any()).
-					Times(0)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusBadRequest, recorder.Code)
-			},
-		},
-	}
-
-	for i := range testCases {
-		tc := testCases[i]
-
-		t.Run(tc.name, func(t *testing.T) {
-			ctrl := gomock.NewController(t)
-			defer ctrl.Finish()
-
-			store := mockdb.NewMockStore(ctrl)
-			tc.buildStubs(store)
-
-			server, err := NewServer(config, store, nil)
-			require.NoError(t, err)
-
-			recorder := httptest.NewRecorder()
-
-			url := "/accounts"
-			request, err := http.NewRequest(http.MethodGet, url, nil)
-			require.NoError(t, err)
-
-			// Add query parameters to request URL
-			q := request.URL.Query()
-			q.Add("page_id", fmt.Sprintf("%d", tc.query.pageID))
-			q.Add("page_size", fmt.Sprintf("%d", tc.query.pageSize))
-			request.URL.RawQuery = q.Encode()
-
-			tc.setupAuth(t, request, server.tokenMaker)
-			server.router.ServeHTTP(recorder, request)
-			tc.checkResponse(recorder)
-		})
-	}
-}
-
-func TestUpdateAccountPrivacyTxAPI(t *testing.T) {
-	account, _ := randomAccount()
-
-	testCases := []struct {
-		name          string
-		body          gin.H
-		setupAuth     func(t *testing.T, request *http.Request, tokenMaker token.Maker)
-		buildStubs    func(store *mockdb.MockStore)
-		checkResponse func(recorder *httptest.ResponseRecorder)
-	}{
-		{
-			name: "OK",
-			body: gin.H{
-				"id":               account.ID,
-				"privacy_accepted": true,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				trueBool := true
-				arg := db.UpdateAccountPrivacyTxParams{
-					ID:              account.ID,
-					PrivacyAccepted: &trueBool,
-					Changer:         account.Email,
-				}
-
-				account2 := account
-				account2.PrivacyAccepted.Valid = true
-				account2.PrivacyAccepted.Bool = true
-				account2.Changer = account.Email
-
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Eq(account.ID)).
-					Times(1).
-					Return(account, nil)
-
-				store.EXPECT().
-					UpdateAccountPrivacyTx(gomock.Any(), gomock.Eq(arg)).
-					Times(1).
-					Return(account2, nil)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusOK, recorder.Code)
-				data, err := io.ReadAll(recorder.Body)
-				require.NoError(t, err)
-
-				var getAccount db.Account
-				err = json.Unmarshal(data, &getAccount)
-				require.NoError(t, err)
-
-				require.Equal(t, account.ID, getAccount.ID)
-				require.Equal(t, true, getAccount.PrivacyAccepted.Bool)
-				require.Equal(t, true, getAccount.PrivacyAccepted.Valid)
-				require.WithinDuration(t, timestamp, getAccount.PrivacyAcceptedDate.Time, time.Second)
-			},
-		},
-		{
-			name: "OK",
-			body: gin.H{
-				"id":               account.ID,
-				"privacy_accepted": true,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				trueBool := true
-
-				arg := db.UpdateAccountPrivacyTxParams{
-					ID:              account.ID,
-					PrivacyAccepted: &trueBool,
-					Changer:         account.Email,
-				}
-
-				account2 := account
-				account2.PrivacyAccepted.Valid = true
-				account2.PrivacyAccepted.Bool = true
-				account2.Changer = account.Email
-
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Eq(account.ID)).
-					Times(1).
-					Return(account, nil)
-
-				store.EXPECT().
-					UpdateAccountPrivacyTx(gomock.Any(), gomock.Eq(arg)).
-					Times(1).
-					Return(account2, nil)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusOK, recorder.Code)
-				data, err := io.ReadAll(recorder.Body)
-				require.NoError(t, err)
-
-				var getAccount db.Account
-				err = json.Unmarshal(data, &getAccount)
-				require.NoError(t, err)
-
-				require.Equal(t, account.ID, getAccount.ID)
-				require.Equal(t, true, getAccount.PrivacyAccepted.Bool)
-				require.Equal(t, true, getAccount.PrivacyAccepted.Valid)
-				require.WithinDuration(t, timestamp, getAccount.PrivacyAcceptedDate.Time, time.Second)
-			},
-		},
-		{
-			name: "Revoked",
-			body: gin.H{
-				"id":               account.ID,
-				"privacy_accepted": false,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				falseBool := false
-
-				arg := db.UpdateAccountPrivacyTxParams{
-					ID:              account.ID,
-					PrivacyAccepted: &falseBool,
-					Changer:         account.Email,
-				}
-
-				account2 := account
-				account2.PrivacyAccepted.Valid = true
-				account2.PrivacyAccepted.Bool = false
-				account2.PrivacyAcceptedDate.Valid = true
-				account2.PrivacyAcceptedDate.Time = time.Time{}
-				account2.Changer = account.Email
-
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Eq(account.ID)).
-					Times(1).
-					Return(account, nil)
-
-				store.EXPECT().
-					UpdateAccountPrivacyTx(gomock.Any(), gomock.Eq(arg)).
-					Times(1).
-					Return(account2, nil)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusOK, recorder.Code)
-				data, err := io.ReadAll(recorder.Body)
-				require.NoError(t, err)
-
-				var getAccount db.Account
-				err = json.Unmarshal(data, &getAccount)
-				require.NoError(t, err)
-
-				require.Equal(t, account.ID, getAccount.ID)
-				require.Equal(t, false, getAccount.PrivacyAccepted.Bool)
-				require.Equal(t, true, getAccount.PrivacyAccepted.Valid)
-				require.Equal(t, time.Time{}, getAccount.PrivacyAcceptedDate.Time)
-
-			},
-		}, {
-			name: "InvalidRequest",
-			body: gin.H{
-				"id": account.ID,
-			},
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, account.ID, time.Minute)
-			},
-			buildStubs: func(store *mockdb.MockStore) {
-				store.EXPECT().
-					GetAccount(gomock.Any(), gomock.Eq(account.ID)).
-					Times(0)
-
-				store.EXPECT().
-					UpdateAccountPrivacyTx(gomock.Any(), gomock.Any()).
-					Times(0)
-			},
-			checkResponse: func(recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusBadRequest, recorder.Code)
-			},
-		},
-	}
-
-	for i := range testCases {
-		tc := testCases[i]
-
-		t.Run(tc.name, func(t *testing.T) {
-			ctrl := gomock.NewController(t)
-			defer ctrl.Finish()
-
-			store := mockdb.NewMockStore(ctrl)
-			tc.buildStubs(store)
-
-			server, err := NewServer(config, store, nil)
-			require.NoError(t, err)
-
-			recorder := httptest.NewRecorder()
-
-			// Marshal body data to JSON
-			data, err := json.Marshal(tc.body)
-			require.NoError(t, err)
-			fmt.Println("privacy revoked", "body", string(data))
-
-			url := "/accounts/privacy"
-			request, err := http.NewRequest(http.MethodPut, url, bytes.NewReader(data))
-			require.NoError(t, err)
-
-			tc.setupAuth(t, request, server.tokenMaker)
-			server.router.ServeHTTP(recorder, request)
-			tc.checkResponse(recorder)
-		})
-	}
-}
-
-func randomAccount() (db.Account, string) {
-	password := util.RandomString(6)
-	hashedPassword, _ := util.HashPassword(password)
-
-	email := util.RandomEmail()
-	acc := db.Account{
-		ID:           util.RandomInt(1, 1000),
-		Passwordhash: hashedPassword,
-		Firstname:    util.RandomName(),
-		Lastname:     util.RandomName(),
-		Email:        email,
-		PrivacyAccepted: sql.NullBool{
-			Valid: true,
-			Bool:  true,
-		},
-		PrivacyAcceptedDate: sql.NullTime{
-			Valid: true,
-			Time:  timestamp,
-		},
-		Phone: sql.NullString{
-			String: util.RandomPhone(),
-			Valid:  true,
-		},
-		Zip:      util.RandomName(),
-		Street:   util.RandomName(),
-		City:     util.RandomName(),
-		Country:  util.RandomName(),
-		Creator:  email,
-		Changer:  email,
-		Created:  time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC),
-		Changed:  time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC),
-		Birthday: time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC),
-	}
-
-	return acc, password
-}
-
-func requireBodyMatchAccount(t *testing.T, body *bytes.Buffer, account db.Account) {
-	data, err := io.ReadAll(body)
-	require.NoError(t, err)
-
-	var getAccount db.Account
-	err = json.Unmarshal(data, &getAccount)
-	require.NoError(t, err)
-	require.Equal(t, account.Firstname, getAccount.Firstname)
-	require.Equal(t, account.Lastname, getAccount.Lastname)
-	require.Equal(t, account.Passwordhash, getAccount.Passwordhash)
-	require.Equal(t, account.Email, getAccount.Email)
-	require.Equal(t, account.Phone, getAccount.Phone)
-	require.Equal(t, account.City, getAccount.City)
-	require.Equal(t, account.Street, getAccount.Street)
-	require.Equal(t, account.Country, getAccount.Country)
-	require.Equal(t, account.Zip, getAccount.Zip)
-	require.Equal(t, account.Email, getAccount.Creator)
-	require.Equal(t, account.PrivacyAccepted, getAccount.PrivacyAccepted)
-	// require.WithinDuration(t, account.PrivacyAcceptedDate.Time, getAccount.PrivacyAcceptedDate.Time, time.Minute)
-}
-
-func requireBodyMatchAccounts(t *testing.T, body *bytes.Buffer, accounts []db.Account) {
-	data, err := io.ReadAll(body)
-	require.NoError(t, err)
-
-	var gotAccounts []db.Account
-	err = json.Unmarshal(data, &gotAccounts)
-	require.NoError(t, err)
-
-	for i := range accounts {
-		a := accounts[i]
-		b := gotAccounts[i]
-
-		require.Equal(t, a.Firstname, b.Firstname)
-		require.Equal(t, a.Lastname, b.Lastname)
-		require.Equal(t, a.Passwordhash, b.Passwordhash)
-		require.Equal(t, a.Email, b.Email)
-		require.Equal(t, a.Phone, b.Phone)
-		require.Equal(t, a.City, b.City)
-		require.Equal(t, a.Street, b.Street)
-		require.Equal(t, a.Country, b.Country)
-		require.Equal(t, a.Zip, b.Zip)
-		require.Equal(t, a.Creator, b.Creator)
-		require.Equal(t, a.PrivacyAccepted, b.PrivacyAccepted)
-	}
-	// require.Equal(t, accounts, gotAccounts)
-
-}
diff --git a/bff/api/logger.go b/bff/api/logger.go
deleted file mode 100644
index 05154e7..0000000
--- a/bff/api/logger.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package api
-
-import (
-	"bytes"
-	"fmt"
-	"io"
-	"log/slog"
-	"time"
-
-	"github.com/gin-gonic/gin"
-)
-
-type responseBodyWriter struct {
-	gin.ResponseWriter
-	body *bytes.Buffer
-}
-
-func (r responseBodyWriter) Write(b []byte) (int, error) {
-	r.body.Write(b)
-	return r.ResponseWriter.Write(b)
-}
-
-func Logger() gin.HandlerFunc {
-	return func(c *gin.Context) {
-		t := time.Now()
-
-		var body []byte
-		var w *responseBodyWriter
-
-		if c.Request.Method != "GET" {
-			body, _ = io.ReadAll(c.Request.Body)
-			w = &responseBodyWriter{body: &bytes.Buffer{}, ResponseWriter: c.Writer}
-			c.Writer = w
-			c.Request.Body = io.NopCloser(bytes.NewReader(body))
-		}
-		c.Next()
-
-		duration := time.Since(t).Milliseconds()
-
-		if c.Request.Method != "GET" {
-			slog.LogAttrs(
-				c,
-				slog.LevelDebug,
-				"http",
-				slog.Group(
-					"request",
-					slog.Int("STATUS", c.Writer.Status()),
-					slog.String("METHOD", c.Request.Method),
-					slog.String("PATH", c.Request.RequestURI),
-					slog.String("DURATION", fmt.Sprintf("%d ms", duration)),
-					slog.String("BODY", string(body)),
-				),
-				slog.Group(
-					"response",
-					slog.String("BODY", w.body.String()),
-				),
-			)
-		} else {
-			slog.LogAttrs(
-				c,
-				slog.LevelDebug,
-				"http",
-				slog.Group(
-					"request",
-					slog.Int("STATUS", c.Writer.Status()),
-					slog.String("METHOD", c.Request.Method),
-					slog.String("PATH", c.Request.RequestURI),
-					slog.String("DURATION", fmt.Sprintf("%d ms", duration)),
-				),
-			)
-
-		}
-	}
-}
diff --git a/bff/api/main_test.go b/bff/api/main_test.go
deleted file mode 100644
index 070f91c..0000000
--- a/bff/api/main_test.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package api
-
-import (
-	"os"
-	"testing"
-	"time"
-
-	"github.com/gin-gonic/gin"
-	"github.com/itsscb/df/bff/util"
-)
-
-var config util.Config
-
-func TestMain(m *testing.M) {
-	config = util.Config{
-		Environment:          "production",
-		TokenPrivateKeyHex:   "099c0b96725b99e95719c92aec580809ac58fc14be2105ed2656f1f6c464593d8cacd6c7bed924b9cf207ab3cff1c59be4e5865260c4dafa29699244bd4ea2de",
-		AccessTokenDuration:  time.Minute * 1,
-		RefreshTokenDuration: time.Minute * 2,
-	}
-
-	gin.SetMode(gin.TestMode)
-
-	os.Exit(m.Run())
-}
diff --git a/bff/api/middleware.go b/bff/api/middleware.go
deleted file mode 100644
index 5f81445..0000000
--- a/bff/api/middleware.go
+++ /dev/null
@@ -1,54 +0,0 @@
-package api
-
-import (
-	"errors"
-	"fmt"
-	"net/http"
-	"strings"
-
-	"github.com/gin-gonic/gin"
-	"github.com/itsscb/df/bff/token"
-)
-
-const (
-	authorizationHeaderKey  = "authorization"
-	authorizationTypeBearer = "bearer"
-	authorizationPayloadKey = "authorization_payload"
-)
-
-// AuthMiddleware creates a gin middleware for authorization
-func authMiddleware(tokenMaker token.Maker) gin.HandlerFunc {
-	return func(ctx *gin.Context) {
-		authorizationHeader := ctx.GetHeader(authorizationHeaderKey)
-
-		if len(authorizationHeader) == 0 {
-			err := errors.New("authorization header is not provided")
-			ctx.AbortWithStatusJSON(http.StatusUnauthorized, errorResponse(err))
-			return
-		}
-
-		fields := strings.Fields(authorizationHeader)
-		if len(fields) < 2 {
-			err := errors.New("invalid authorization header format")
-			ctx.AbortWithStatusJSON(http.StatusUnauthorized, errorResponse(err))
-			return
-		}
-
-		authorizationType := strings.ToLower(fields[0])
-		if authorizationType != authorizationTypeBearer {
-			err := fmt.Errorf("unsupported authorization type %s", authorizationType)
-			ctx.AbortWithStatusJSON(http.StatusUnauthorized, errorResponse(err))
-			return
-		}
-
-		accessToken := fields[1]
-		payload, err := tokenMaker.VerifyToken(accessToken)
-		if err != nil {
-			ctx.AbortWithStatusJSON(http.StatusUnauthorized, errorResponse(err))
-			return
-		}
-
-		ctx.Set(authorizationPayloadKey, payload)
-		ctx.Next()
-	}
-}
diff --git a/bff/api/middleware_test.go b/bff/api/middleware_test.go
deleted file mode 100644
index f746c5a..0000000
--- a/bff/api/middleware_test.go
+++ /dev/null
@@ -1,117 +0,0 @@
-package api
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-	"time"
-
-	"github.com/gin-gonic/gin"
-	mockdb "github.com/itsscb/df/bff/db/mock"
-	"github.com/itsscb/df/bff/token"
-	"github.com/stretchr/testify/require"
-	"go.uber.org/mock/gomock"
-)
-
-func addAuthorization(
-	t *testing.T,
-	request *http.Request,
-	tokenMaker token.Maker,
-	authorizationType string,
-	account_id uint64,
-	duration time.Duration,
-) {
-	id, err := tokenMaker.NewTokenID()
-	require.NoError(t, err)
-
-	token, payload, err := tokenMaker.CreateToken(account_id, id, duration)
-	require.NoError(t, err)
-	require.NotEmpty(t, payload)
-
-	authorizationHeader := fmt.Sprintf("%s %s", authorizationType, token)
-	request.Header.Set(authorizationHeaderKey, authorizationHeader)
-}
-
-func TestAuthMiddleware(t *testing.T) {
-	testCases := []struct {
-		name          string
-		setupAuth     func(t *testing.T, request *http.Request, tokenMaker token.Maker)
-		checkResponse func(t *testing.T, recorder *httptest.ResponseRecorder)
-	}{
-		{
-			name: "OK",
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, 1, time.Minute)
-			},
-			checkResponse: func(t *testing.T, recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusOK, recorder.Code)
-			},
-		},
-		{
-			name: "NoAuthorization",
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-			},
-			checkResponse: func(t *testing.T, recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusUnauthorized, recorder.Code)
-			},
-		},
-		{
-			name: "UnsupportedAuthorization",
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, "unsupported", 1, time.Minute)
-			},
-			checkResponse: func(t *testing.T, recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusUnauthorized, recorder.Code)
-			},
-		},
-		{
-			name: "InvalidAuthorizationFormat",
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, "", 1, time.Minute)
-			},
-			checkResponse: func(t *testing.T, recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusUnauthorized, recorder.Code)
-			},
-		},
-		{
-			name: "ExpiredToken",
-			setupAuth: func(t *testing.T, request *http.Request, tokenMaker token.Maker) {
-				addAuthorization(t, request, tokenMaker, authorizationTypeBearer, 1, -time.Minute)
-			},
-			checkResponse: func(t *testing.T, recorder *httptest.ResponseRecorder) {
-				require.Equal(t, http.StatusUnauthorized, recorder.Code)
-			},
-		},
-	}
-
-	for i := range testCases {
-		tc := testCases[i]
-
-		t.Run(tc.name, func(t *testing.T) {
-			ctrl := gomock.NewController(t)
-			defer ctrl.Finish()
-
-			store := mockdb.NewMockStore(ctrl)
-
-			server, err := NewServer(config, store, nil)
-			require.NoError(t, err)
-			authPath := "/auth"
-			server.router.GET(
-				authPath,
-				authMiddleware(server.tokenMaker),
-				func(ctx *gin.Context) {
-					ctx.JSON(http.StatusOK, gin.H{})
-				},
-			)
-
-			recorder := httptest.NewRecorder()
-			request, err := http.NewRequest(http.MethodGet, authPath, nil)
-			require.NoError(t, err)
-
-			tc.setupAuth(t, request, server.tokenMaker)
-			server.router.ServeHTTP(recorder, request)
-			tc.checkResponse(t, recorder)
-		})
-	}
-}
diff --git a/bff/api/server.go b/bff/api/server.go
deleted file mode 100644
index e13e06d..0000000
--- a/bff/api/server.go
+++ /dev/null
@@ -1,84 +0,0 @@
-package api
-
-import (
-	"fmt"
-	"log/slog"
-	"net/http"
-	"os"
-
-	"github.com/gin-gonic/gin"
-	db "github.com/itsscb/df/bff/db/sqlc"
-	"github.com/itsscb/df/bff/token"
-	"github.com/itsscb/df/bff/util"
-)
-
-// Server serves HTTP requests for df service
-type Server struct {
-	store        db.Store
-	router       *gin.Engine
-	config       util.Config
-	tokenMaker   token.Maker
-	swaggerFiles http.FileSystem
-}
-
-// NewServer creates a new HTTP server and sets up routing
-func NewServer(config util.Config, store db.Store, swaggerFS http.FileSystem) (*Server, error) {
-	tokenMaker, err := token.NewPasetoMaker(config.TokenPrivateKeyHex)
-	if err != nil {
-		return nil, fmt.Errorf("cannot create token maker: %w", err)
-	}
-
-	server := &Server{
-		store:        store,
-		config:       config,
-		tokenMaker:   tokenMaker,
-		swaggerFiles: swaggerFS,
-	}
-	router := gin.New()
-
-	router.Use(gin.Recovery())
-
-	logLevel := slog.LevelError
-	if config.Environment == "development" {
-		logLevel = slog.LevelDebug
-	}
-
-	if swaggerFS != nil {
-		router.StaticFS("/swagger/", swaggerFS)
-	}
-
-	opts := slog.HandlerOptions{
-		Level: logLevel,
-	}
-	logger := slog.New(slog.NewTextHandler(os.Stdout, &opts))
-
-	if config.LogOutput == "json" {
-		logger = slog.New(slog.NewJSONHandler(os.Stdout, &opts))
-	}
-
-	slog.SetDefault(logger)
-
-	router.Use(Logger())
-
-	router.POST("/login", server.loginAccount)
-	router.POST("/tokens/renew_access", server.renewAccessToken)
-	router.POST("/accounts", server.createAccount)
-
-	authRoutes := router.Group("/").Use(authMiddleware(server.tokenMaker))
-	authRoutes.PUT("/accounts", server.updateAccount)
-	authRoutes.PUT("/accounts/privacy", server.updateAccountPrivacy)
-	authRoutes.GET("/accounts/:id", server.getAccount)
-	authRoutes.GET("/accounts", server.listAccounts)
-	authRoutes.POST("/sessions", server.blockSession)
-
-	server.router = router
-	return server, nil
-}
-
-func (server *Server) Start(address string) error {
-	return server.router.Run(address)
-}
-
-func errorResponse(err error) gin.H {
-	return gin.H{"error": err.Error()}
-}
diff --git a/bff/api/session.go b/bff/api/session.go
deleted file mode 100644
index ab7de2b..0000000
--- a/bff/api/session.go
+++ /dev/null
@@ -1,151 +0,0 @@
-package api
-
-import (
-	"database/sql"
-	"errors"
-	"net/http"
-	"time"
-
-	"github.com/gin-gonic/gin"
-	"github.com/google/uuid"
-	db "github.com/itsscb/df/bff/db/sqlc"
-	"github.com/itsscb/df/bff/token"
-	"github.com/itsscb/df/bff/util"
-)
-
-type loginAccountRequest struct {
-	Email    string `json:"email" binding:"required"`
-	Password string `json:"password" binding:"required,min=6"`
-}
-
-type loginAccountResponse struct {
-	SessionID             uuid.UUID `json:"session_id"`
-	AccessToken           string    `json:"access_token"`
-	AccessTokenExpiresAt  time.Time `json:"access_token_expires_at"`
-	RefreshToken          string    `json:"refresh_token"`
-	RefreshTokenExpiresAt time.Time `json:"refresh_token_expires_at"`
-	AccountID             uint64    `json:"account_id"`
-}
-
-func (server *Server) loginAccount(ctx *gin.Context) {
-	var req loginAccountRequest
-	if err := ctx.ShouldBindJSON(&req); err != nil {
-		ctx.JSON(http.StatusBadRequest, errorResponse(err))
-		return
-	}
-
-	account, err := server.store.GetAccountByEmail(ctx, req.Email)
-	if err != nil {
-		if errors.Is(err, sql.ErrNoRows) {
-			ctx.JSON(http.StatusNotFound, errorResponse(err))
-			return
-		}
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	err = util.CheckPassword(req.Password, account.Passwordhash)
-	if err != nil {
-		ctx.JSON(http.StatusUnauthorized, errorResponse(err))
-		return
-	}
-
-	id, err := server.tokenMaker.NewTokenID()
-	if err != nil {
-		ctx.JSON(http.StatusInternalServerError, errorResponse(errors.New("failed to create session token")))
-	}
-	refreshToken, refreshPayload, err := server.tokenMaker.CreateToken(
-		account.ID,
-		id,
-		server.config.RefreshTokenDuration,
-	)
-
-	accessToken, accessPayload, err := server.tokenMaker.CreateToken(
-		account.ID,
-		id,
-		server.config.AccessTokenDuration,
-	)
-
-	if err != nil {
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	session, err := server.store.CreateSession(ctx, db.CreateSessionParams{
-		ID:           refreshPayload.ID,
-		AccountID:    refreshPayload.AccountID,
-		RefreshToken: refreshToken,
-		UserAgent:    ctx.Request.UserAgent(),
-		ClientIp:     ctx.ClientIP(),
-		IsBlocked:    false,
-		ExpiresAt:    refreshPayload.ExpiredAt,
-	})
-	if err != nil {
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	rsp := loginAccountResponse{
-		SessionID:             session.ID,
-		AccessToken:           accessToken,
-		AccessTokenExpiresAt:  accessPayload.ExpiredAt,
-		RefreshToken:          refreshToken,
-		RefreshTokenExpiresAt: refreshPayload.ExpiredAt,
-		AccountID:             refreshPayload.AccountID,
-	}
-	ctx.JSON(http.StatusOK, rsp)
-}
-
-type blockSessionRequest struct {
-	ID uuid.UUID `json:"session_id"`
-}
-
-func (server *Server) blockSession(ctx *gin.Context) {
-	var req blockSessionRequest
-	if err := ctx.ShouldBindJSON(&req); err != nil {
-		ctx.JSON(http.StatusBadRequest, errorResponse(err))
-		return
-	}
-
-	authorizationPayload, ok := ctx.Get(authorizationPayloadKey)
-	if !ok {
-		ctx.JSON(http.StatusUnauthorized, nil)
-		return
-	}
-
-	payload := authorizationPayload.(*token.Payload)
-
-	session, err := server.store.GetSession(ctx, req.ID)
-	if err != nil {
-		if errors.Is(err, sql.ErrNoRows) {
-			ctx.JSON(http.StatusUnauthorized, errorResponse(errors.New("unauthorized")))
-			return
-		}
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	if session.IsBlocked {
-		ctx.JSON(http.StatusAlreadyReported, errorResponse(errors.New("already blocked")))
-		return
-	}
-
-	if session.AccountID != payload.AccountID {
-		ctx.JSON(http.StatusUnauthorized, errorResponse(errors.New("unauthorized")))
-		return
-	}
-
-	err = server.store.BlockSession(ctx, session.ID)
-	if err != nil {
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	rsp := struct {
-		Ok bool
-	}{
-		Ok: true,
-	}
-
-	ctx.JSON(http.StatusOK, rsp)
-}
diff --git a/bff/api/token.go b/bff/api/token.go
deleted file mode 100644
index 21a8821..0000000
--- a/bff/api/token.go
+++ /dev/null
@@ -1,89 +0,0 @@
-package api
-
-import (
-	"database/sql"
-	"errors"
-	"fmt"
-	"net/http"
-	"time"
-
-	"github.com/gin-gonic/gin"
-)
-
-type renewAccessTokenRequest struct {
-	RefreshToken string `json:"refresh_token" binding:"required"`
-}
-
-type renewAccessTokenResponse struct {
-	AccessToken          string    `json:"access_token"`
-	AccessTokenExpiresAt time.Time `json:"access_token_expires_at"`
-}
-
-func (server *Server) renewAccessToken(ctx *gin.Context) {
-	var req renewAccessTokenRequest
-	if err := ctx.ShouldBindJSON(&req); err != nil {
-		ctx.JSON(http.StatusBadRequest, errorResponse(err))
-		return
-	}
-
-	refreshPayload, err := server.tokenMaker.VerifyToken(req.RefreshToken)
-	if err != nil {
-		ctx.JSON(http.StatusUnauthorized, errorResponse(err))
-		return
-	}
-
-	session, err := server.store.GetSession(ctx, refreshPayload.ID)
-	if err != nil {
-		if errors.Is(err, sql.ErrNoRows) {
-			ctx.JSON(http.StatusNotFound, errorResponse(err))
-			return
-		}
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	if session.IsBlocked {
-		err := fmt.Errorf("blocked session")
-		ctx.JSON(http.StatusUnauthorized, errorResponse(err))
-		return
-	}
-
-	if session.AccountID != refreshPayload.AccountID {
-		err := fmt.Errorf("incorrect session user")
-		ctx.JSON(http.StatusUnauthorized, errorResponse(err))
-		return
-	}
-
-	if session.RefreshToken != req.RefreshToken {
-		err := fmt.Errorf("mismatched session token")
-		ctx.JSON(http.StatusUnauthorized, errorResponse(err))
-		return
-	}
-
-	if time.Now().After(session.ExpiresAt) {
-		err := fmt.Errorf("expired session")
-		ctx.JSON(http.StatusUnauthorized, errorResponse(err))
-		return
-	}
-
-	id, err := server.tokenMaker.NewTokenID()
-	if err != nil {
-		ctx.JSON(http.StatusInternalServerError, errorResponse(errors.New("failed to create session token")))
-	}
-	accessToken, accessPayload, err := server.tokenMaker.CreateToken(
-		refreshPayload.AccountID,
-		id,
-		server.config.AccessTokenDuration,
-	)
-
-	if err != nil {
-		ctx.JSON(http.StatusInternalServerError, errorResponse(err))
-		return
-	}
-
-	rsp := renewAccessTokenResponse{
-		AccessToken:          accessToken,
-		AccessTokenExpiresAt: accessPayload.ExpiredAt,
-	}
-	ctx.JSON(http.StatusOK, rsp)
-}
diff --git a/bff/db/migration/000001_init_schema.down.sql b/bff/db/migration/000001_init_schema.down.sql
index 283346c..83eaede 100644
--- a/bff/db/migration/000001_init_schema.down.sql
+++ b/bff/db/migration/000001_init_schema.down.sql
@@ -6,6 +6,7 @@ DROP TABLE IF EXISTS "mails";
 DROP TABLE IF EXISTS "persons";
 DROP TABLE IF EXISTS "providers";
 DROP TABLE IF EXISTS "sessions";
+DROP TABLE IF EXISTS "account_info";
 DROP TABLE IF EXISTS "accounts";
 
 
diff --git a/bff/db/migration/000001_init_schema.up.sql b/bff/db/migration/000001_init_schema.up.sql
index 5a083d0..858ce6e 100644
--- a/bff/db/migration/000001_init_schema.up.sql
+++ b/bff/db/migration/000001_init_schema.up.sql
@@ -1,5 +1,5 @@
 CREATE TABLE "mails" (
-  "id" bigserial UNIQUE PRIMARY KEY NOT NULL,
+  "id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL,
   "from" varchar NOT NULL,
   "to" varchar[] NOT NULL,
   "cc" varchar[],
@@ -13,18 +13,22 @@ CREATE TABLE "mails" (
 );
 
 CREATE TABLE "accounts" (
-  "id" bigserial UNIQUE PRIMARY KEY NOT NULL,
+  "id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL,
   "permission_level" int NOT NULL DEFAULT 0,
   "passwordhash" varchar NOT NULL,
+  "email" varchar UNIQUE NOT NULL,
+  "secret_key" varchar,
+  "email_verified" boolean DEFAULT false,
+  "email_verified_time" timestamptz
+);
+
+CREATE TABLE "account_info" (
+  "account_id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL,
   "firstname" varchar NOT NULL,
   "lastname" varchar NOT NULL,
   "birthday" timestamptz NOT NULL,
   "privacy_accepted" boolean DEFAULT false,
   "privacy_accepted_date" timestamptz,
-  "email" varchar UNIQUE NOT NULL,
-  "secret_key" varchar,
-  "email_verified" boolean DEFAULT false,
-  "email_verified_time" timestamptz,
   "phone" varchar,
   "city" varchar NOT NULL,
   "zip" varchar NOT NULL,
@@ -48,7 +52,7 @@ CREATE TABLE "sessions" (
 );
 
 CREATE TABLE "persons" (
-  "id" bigserial UNIQUE PRIMARY KEY NOT NULL,
+  "id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL,
   "account_id" bigint NOT NULL,
   "firstname" varchar NOT NULL,
   "lastname" varchar NOT NULL,
@@ -64,7 +68,7 @@ CREATE TABLE "persons" (
 );
 
 CREATE TABLE "documents" (
-  "id" bigserial UNIQUE PRIMARY KEY NOT NULL,
+  "id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL,
   "person_id" bigint,
   "name" varchar NOT NULL,
   "type" varchar NOT NULL,
@@ -81,7 +85,7 @@ CREATE TABLE "documents" (
 );
 
 CREATE TABLE "payments" (
-  "id" bigserial UNIQUE PRIMARY KEY NOT NULL,
+  "id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL,
   "account_id" bigint NOT NULL,
   "payment_category" varchar NOT NULL,
   "bankname" varchar,
@@ -98,7 +102,7 @@ CREATE TABLE "payments" (
 );
 
 CREATE TABLE "providers" (
-  "id" bigserial UNIQUE PRIMARY KEY NOT NULL,
+  "id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL,
   "name" varchar NOT NULL,
   "description" text NOT NULL,
   "category" varchar NOT NULL,
@@ -110,7 +114,7 @@ CREATE TABLE "providers" (
 );
 
 CREATE TABLE "returns" (
-  "id" bigserial UNIQUE PRIMARY KEY NOT NULL,
+  "id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL,
   "person_id" bigint NOT NULL,
   "provider_id" bigint NOT NULL,
   "name" varchar NOT NULL,
@@ -125,7 +129,7 @@ CREATE TABLE "returns" (
 );
 
 CREATE TABLE "returnsLog" (
-  "id" bigserial UNIQUE PRIMARY KEY NOT NULL,
+  "id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL,
   "return_id" bigint NOT NULL,
   "mail_id" bigint NOT NULL,
   "status" varchar NOT NULL DEFAULT 'created',
@@ -135,6 +139,9 @@ CREATE TABLE "returnsLog" (
   "changed" timestamptz NOT NULL DEFAULT (now())
 );
 
+
+ALTER TABLE "account_info" ADD FOREIGN KEY ("account_id") REFERENCES "accounts" ("id");
+
 ALTER TABLE "sessions" ADD FOREIGN KEY ("account_id") REFERENCES "accounts" ("id");
 
 ALTER TABLE "persons" ADD FOREIGN KEY ("account_id") REFERENCES "accounts" ("id");
diff --git a/bff/db/mock/store.go b/bff/db/mock/store.go
index 1748e6a..082f9ff 100644
--- a/bff/db/mock/store.go
+++ b/bff/db/mock/store.go
@@ -85,6 +85,21 @@ func (mr *MockStoreMockRecorder) CreateAccount(arg0, arg1 any) *gomock.Call {
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAccount", reflect.TypeOf((*MockStore)(nil).CreateAccount), arg0, arg1)
 }
 
+// CreateAccountInfo mocks base method.
+func (m *MockStore) CreateAccountInfo(arg0 context.Context, arg1 db.CreateAccountInfoParams) (db.AccountInfo, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateAccountInfo", arg0, arg1)
+	ret0, _ := ret[0].(db.AccountInfo)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CreateAccountInfo indicates an expected call of CreateAccountInfo.
+func (mr *MockStoreMockRecorder) CreateAccountInfo(arg0, arg1 any) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAccountInfo", reflect.TypeOf((*MockStore)(nil).CreateAccountInfo), arg0, arg1)
+}
+
 // CreateAccountTx mocks base method.
 func (m *MockStore) CreateAccountTx(arg0 context.Context, arg1 db.CreateAccountTxParams) (db.Account, error) {
 	m.ctrl.T.Helper()
@@ -295,6 +310,20 @@ func (mr *MockStoreMockRecorder) DeleteAccount(arg0, arg1 any) *gomock.Call {
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAccount", reflect.TypeOf((*MockStore)(nil).DeleteAccount), arg0, arg1)
 }
 
+// DeleteAccountInfo mocks base method.
+func (m *MockStore) DeleteAccountInfo(arg0 context.Context, arg1 uint64) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DeleteAccountInfo", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// DeleteAccountInfo indicates an expected call of DeleteAccountInfo.
+func (mr *MockStoreMockRecorder) DeleteAccountInfo(arg0, arg1 any) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAccountInfo", reflect.TypeOf((*MockStore)(nil).DeleteAccountInfo), arg0, arg1)
+}
+
 // DeleteDocument mocks base method.
 func (m *MockStore) DeleteDocument(arg0 context.Context, arg1 uint64) error {
 	m.ctrl.T.Helper()
@@ -494,19 +523,19 @@ func (mr *MockStoreMockRecorder) GetAccountByEmail(arg0, arg1 any) *gomock.Call
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAccountByEmail", reflect.TypeOf((*MockStore)(nil).GetAccountByEmail), arg0, arg1)
 }
 
-// GetAccountForUpdate mocks base method.
-func (m *MockStore) GetAccountForUpdate(arg0 context.Context, arg1 uint64) (db.Account, error) {
+// GetAccountInfo mocks base method.
+func (m *MockStore) GetAccountInfo(arg0 context.Context, arg1 uint64) (db.AccountInfo, error) {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "GetAccountForUpdate", arg0, arg1)
-	ret0, _ := ret[0].(db.Account)
+	ret := m.ctrl.Call(m, "GetAccountInfo", arg0, arg1)
+	ret0, _ := ret[0].(db.AccountInfo)
 	ret1, _ := ret[1].(error)
 	return ret0, ret1
 }
 
-// GetAccountForUpdate indicates an expected call of GetAccountForUpdate.
-func (mr *MockStoreMockRecorder) GetAccountForUpdate(arg0, arg1 any) *gomock.Call {
+// GetAccountInfo indicates an expected call of GetAccountInfo.
+func (mr *MockStoreMockRecorder) GetAccountInfo(arg0, arg1 any) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAccountForUpdate", reflect.TypeOf((*MockStore)(nil).GetAccountForUpdate), arg0, arg1)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAccountInfo", reflect.TypeOf((*MockStore)(nil).GetAccountInfo), arg0, arg1)
 }
 
 // GetDocument mocks base method.
@@ -704,6 +733,21 @@ func (mr *MockStoreMockRecorder) InvalidateDocument(arg0, arg1 any) *gomock.Call
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InvalidateDocument", reflect.TypeOf((*MockStore)(nil).InvalidateDocument), arg0, arg1)
 }
 
+// ListAccountInfo mocks base method.
+func (m *MockStore) ListAccountInfo(arg0 context.Context, arg1 db.ListAccountInfoParams) ([]db.AccountInfo, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "ListAccountInfo", arg0, arg1)
+	ret0, _ := ret[0].([]db.AccountInfo)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// ListAccountInfo indicates an expected call of ListAccountInfo.
+func (mr *MockStoreMockRecorder) ListAccountInfo(arg0, arg1 any) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListAccountInfo", reflect.TypeOf((*MockStore)(nil).ListAccountInfo), arg0, arg1)
+}
+
 // ListAccounts mocks base method.
 func (m *MockStore) ListAccounts(arg0 context.Context, arg1 db.ListAccountsParams) ([]db.Account, error) {
 	m.ctrl.T.Helper()
@@ -854,26 +898,41 @@ func (mr *MockStoreMockRecorder) ListSessions(arg0, arg1 any) *gomock.Call {
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSessions", reflect.TypeOf((*MockStore)(nil).ListSessions), arg0, arg1)
 }
 
-// UpdateAccount mocks base method.
-func (m *MockStore) UpdateAccount(arg0 context.Context, arg1 db.UpdateAccountParams) (db.Account, error) {
+// UpdateAccountInfo mocks base method.
+func (m *MockStore) UpdateAccountInfo(arg0 context.Context, arg1 db.UpdateAccountInfoParams) (db.AccountInfo, error) {
 	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "UpdateAccount", arg0, arg1)
-	ret0, _ := ret[0].(db.Account)
+	ret := m.ctrl.Call(m, "UpdateAccountInfo", arg0, arg1)
+	ret0, _ := ret[0].(db.AccountInfo)
 	ret1, _ := ret[1].(error)
 	return ret0, ret1
 }
 
-// UpdateAccount indicates an expected call of UpdateAccount.
-func (mr *MockStoreMockRecorder) UpdateAccount(arg0, arg1 any) *gomock.Call {
+// UpdateAccountInfo indicates an expected call of UpdateAccountInfo.
+func (mr *MockStoreMockRecorder) UpdateAccountInfo(arg0, arg1 any) *gomock.Call {
 	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAccount", reflect.TypeOf((*MockStore)(nil).UpdateAccount), arg0, arg1)
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAccountInfo", reflect.TypeOf((*MockStore)(nil).UpdateAccountInfo), arg0, arg1)
+}
+
+// UpdateAccountInfoTx mocks base method.
+func (m *MockStore) UpdateAccountInfoTx(arg0 context.Context, arg1 db.UpdateAccountInfoTxParams) (db.AccountInfo, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "UpdateAccountInfoTx", arg0, arg1)
+	ret0, _ := ret[0].(db.AccountInfo)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// UpdateAccountInfoTx indicates an expected call of UpdateAccountInfoTx.
+func (mr *MockStoreMockRecorder) UpdateAccountInfoTx(arg0, arg1 any) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAccountInfoTx", reflect.TypeOf((*MockStore)(nil).UpdateAccountInfoTx), arg0, arg1)
 }
 
 // UpdateAccountPrivacy mocks base method.
-func (m *MockStore) UpdateAccountPrivacy(arg0 context.Context, arg1 db.UpdateAccountPrivacyParams) (db.Account, error) {
+func (m *MockStore) UpdateAccountPrivacy(arg0 context.Context, arg1 db.UpdateAccountPrivacyParams) (db.AccountInfo, error) {
 	m.ctrl.T.Helper()
 	ret := m.ctrl.Call(m, "UpdateAccountPrivacy", arg0, arg1)
-	ret0, _ := ret[0].(db.Account)
+	ret0, _ := ret[0].(db.AccountInfo)
 	ret1, _ := ret[1].(error)
 	return ret0, ret1
 }
@@ -885,10 +944,10 @@ func (mr *MockStoreMockRecorder) UpdateAccountPrivacy(arg0, arg1 any) *gomock.Ca
 }
 
 // UpdateAccountPrivacyTx mocks base method.
-func (m *MockStore) UpdateAccountPrivacyTx(arg0 context.Context, arg1 db.UpdateAccountPrivacyTxParams) (db.Account, error) {
+func (m *MockStore) UpdateAccountPrivacyTx(arg0 context.Context, arg1 db.UpdateAccountPrivacyTxParams) (db.AccountInfo, error) {
 	m.ctrl.T.Helper()
 	ret := m.ctrl.Call(m, "UpdateAccountPrivacyTx", arg0, arg1)
-	ret0, _ := ret[0].(db.Account)
+	ret0, _ := ret[0].(db.AccountInfo)
 	ret1, _ := ret[1].(error)
 	return ret0, ret1
 }
@@ -899,21 +958,6 @@ func (mr *MockStoreMockRecorder) UpdateAccountPrivacyTx(arg0, arg1 any) *gomock.
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAccountPrivacyTx", reflect.TypeOf((*MockStore)(nil).UpdateAccountPrivacyTx), arg0, arg1)
 }
 
-// UpdateAccountTx mocks base method.
-func (m *MockStore) UpdateAccountTx(arg0 context.Context, arg1 db.UpdateAccountTxParams) (db.Account, error) {
-	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "UpdateAccountTx", arg0, arg1)
-	ret0, _ := ret[0].(db.Account)
-	ret1, _ := ret[1].(error)
-	return ret0, ret1
-}
-
-// UpdateAccountTx indicates an expected call of UpdateAccountTx.
-func (mr *MockStoreMockRecorder) UpdateAccountTx(arg0, arg1 any) *gomock.Call {
-	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAccountTx", reflect.TypeOf((*MockStore)(nil).UpdateAccountTx), arg0, arg1)
-}
-
 // UpdateDocument mocks base method.
 func (m *MockStore) UpdateDocument(arg0 context.Context, arg1 db.UpdateDocumentParams) (db.Document, error) {
 	m.ctrl.T.Helper()
diff --git a/bff/db/query/account.sql b/bff/db/query/account.sql
index 4fe1c0a..36a89a5 100644
--- a/bff/db/query/account.sql
+++ b/bff/db/query/account.sql
@@ -1,85 +1,39 @@
 -- name: GetAccount :one
 SELECT * FROM accounts
-WHERE "id" = $1 LIMIT 1;
+WHERE "id" = sqlc.arg(id);
 
 -- name: GetAccountByEmail :one
 SELECT * FROM accounts
-WHERE "email" = $1 LIMIT 1;
-
--- name: GetAccountForUpdate :one
-SELECT * FROM accounts
-WHERE "id" = $1 LIMIT 1
-FOR NO KEY UPDATE;
+WHERE "email" = sqlc.arg(email);
 
 -- name: CreateAccount :one
 INSERT INTO accounts (
-    "passwordhash",
-    "privacy_accepted",
-    "privacy_accepted_date",
-    "firstname",
-    "lastname",
-    "birthday",
     "email",
-    "secret_key",
-    "phone",
-    "city",
-    "zip",
-    "street",
-    "country",
-    "creator",
-    "changer"
-) VALUES (
-    sqlc.arg(passwordhash),
-    sqlc.arg(privacy_accepted),
-    sqlc.arg(privacy_accepted_date),
-    sqlc.arg(firstname),
-    sqlc.arg(lastname),
-    sqlc.arg(birthday),
+    "passwordhash",
+    "secret_key"
+)
+VALUES (    
     sqlc.arg(email),
-    sqlc.arg(secret_key),
-    sqlc.arg(phone),
-    sqlc.arg(city),
-    sqlc.arg(zip),
-    sqlc.arg(street),
-    sqlc.arg(country),
-    sqlc.arg(creator),
-    sqlc.arg(creator)
-) RETURNING *;
+    sqlc.arg(passwordhash),
+    sqlc.arg(secret_key)
+)
+RETURNING *;
+
+-- name: UpdateAccount :one
+UPDATE accounts 
+SET
+    "email" = COALESCE(sqlc.narg(email), "email"),
+    "passwordhash" = COALESCE(sqlc.narg(passwordhash), "passwordhash"),
+    "secret_key" = COALESCE(sqlc.narg(secret_key), "secret_key")
+WHERE "id" = sqlc.arg(id)
+RETURNING *;
 
 -- name: ListAccounts :many
 SELECT * FROM accounts
-ORDER BY "lastname", "firstname"
+ORDER BY "email"
 LIMIT $1
 OFFSET $2;
 
--- name: UpdateAccount :one
-UPDATE accounts
-SET
-    "passwordhash" = COALESCE(sqlc.narg(passwordhash), "passwordhash"),
-    "firstname" = COALESCE(sqlc.narg(firstname), "firstname"),
-    "lastname" = COALESCE(sqlc.narg(lastname), "lastname"),
-    "birthday" = COALESCE(sqlc.narg(birthday), "birthday"),
-    "email" = COALESCE(sqlc.narg(email), "email"),
-    "phone" = COALESCE(sqlc.narg(phone), "phone"),
-    "city" = COALESCE(sqlc.narg(city), "city"),
-    "zip" = COALESCE(sqlc.narg(zip), "zip"),
-    "street" = COALESCE(sqlc.narg(street), "street"),
-    "country" = COALESCE(sqlc.narg(country), "country"),
-    "changer" = $2,
-    "changed" = now()
-WHERE "id" = $1
-RETURNING *;
-
--- name: UpdateAccountPrivacy :one
-UPDATE accounts
-SET
-    "privacy_accepted" = sqlc.arg(privacy_accepted),
-    "privacy_accepted_date" = sqlc.arg(privacy_accepted_date),
-    "changer" = sqlc.arg(changer),
-    "changed" = now()
-WHERE "id" = sqlc.arg(id)
-RETURNING *;
-
 -- name: VerifyAccountEmail :exec
 UPDATE accounts
 SET
@@ -90,4 +44,4 @@ WHERE "id" = sqlc.arg(id);
 
 -- name: DeleteAccount :exec
 DELETE FROM accounts
-WHERE "id" = $1;
\ No newline at end of file
+WHERE "id" = sqlc.arg(id);
\ No newline at end of file
diff --git a/bff/db/query/account_info.sql b/bff/db/query/account_info.sql
new file mode 100644
index 0000000..0afa9d7
--- /dev/null
+++ b/bff/db/query/account_info.sql
@@ -0,0 +1,70 @@
+-- name: GetAccountInfo :one
+SELECT * FROM account_info
+WHERE "account_id" = $1 LIMIT 1;
+
+-- name: CreateAccountInfo :one
+INSERT INTO account_info (
+    "account_id",
+    "privacy_accepted",
+    "privacy_accepted_date",
+    "firstname",
+    "lastname",
+    "birthday",
+    "phone",
+    "city",
+    "zip",
+    "street",
+    "country",
+    "creator",
+    "changer"
+) VALUES (
+    sqlc.arg(account_id),
+    sqlc.arg(privacy_accepted),
+    sqlc.arg(privacy_accepted_date),
+    sqlc.arg(firstname),
+    sqlc.arg(lastname),
+    sqlc.arg(birthday),
+    sqlc.arg(phone),
+    sqlc.arg(city),
+    sqlc.arg(zip),
+    sqlc.arg(street),
+    sqlc.arg(country),
+    sqlc.arg(creator),
+    sqlc.arg(creator)
+) RETURNING *;
+
+-- name: ListAccountInfo :many
+SELECT * FROM account_info
+ORDER BY "lastname", "firstname"
+LIMIT $1
+OFFSET $2;
+
+-- name: UpdateAccountInfo :one
+UPDATE account_info
+SET
+    "firstname" = COALESCE(sqlc.narg(firstname), "firstname"),
+    "lastname" = COALESCE(sqlc.narg(lastname), "lastname"),
+    "birthday" = COALESCE(sqlc.narg(birthday), "birthday"),
+    "phone" = COALESCE(sqlc.narg(phone), "phone"),
+    "city" = COALESCE(sqlc.narg(city), "city"),
+    "zip" = COALESCE(sqlc.narg(zip), "zip"),
+    "street" = COALESCE(sqlc.narg(street), "street"),
+    "country" = COALESCE(sqlc.narg(country), "country"),
+    "changer" = $2,
+    "changed" = now()
+WHERE "account_id" = $1
+RETURNING *;
+
+-- name: UpdateAccountPrivacy :one
+UPDATE account_info
+SET
+    "privacy_accepted" = sqlc.arg(privacy_accepted),
+    "privacy_accepted_date" = sqlc.arg(privacy_accepted_date),
+    "changer" = sqlc.arg(changer),
+    "changed" = now()
+WHERE "account_id" = sqlc.arg(id)
+RETURNING *;
+
+-- name: DeleteAccountInfo :exec
+DELETE FROM account_info
+WHERE "account_id" = $1;
\ No newline at end of file
diff --git a/bff/db/sqlc/account.sql.go b/bff/db/sqlc/account.sql.go
index 634eca4..8f8bab1 100644
--- a/bff/db/sqlc/account.sql.go
+++ b/bff/db/sqlc/account.sql.go
@@ -8,102 +8,39 @@ package db
 import (
 	"context"
 	"database/sql"
-	"time"
 )
 
 const createAccount = `-- name: CreateAccount :one
 INSERT INTO accounts (
-    "passwordhash",
-    "privacy_accepted",
-    "privacy_accepted_date",
-    "firstname",
-    "lastname",
-    "birthday",
     "email",
-    "secret_key",
-    "phone",
-    "city",
-    "zip",
-    "street",
-    "country",
-    "creator",
-    "changer"
-) VALUES (
+    "passwordhash",
+    "secret_key"
+)
+VALUES (    
     $1,
     $2,
-    $3,
-    $4,
-    $5,
-    $6,
-    $7,
-    $8,
-    $9,
-    $10,
-    $11,
-    $12,
-    $13,
-    $14,
-    $14
-) RETURNING id, permission_level, passwordhash, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, email, secret_key, email_verified, email_verified_time, phone, city, zip, street, country, creator, created, changer, changed
+    $3
+)
+RETURNING id, permission_level, passwordhash, email, secret_key, email_verified, email_verified_time
 `
 
 type CreateAccountParams struct {
-	Passwordhash        string         `json:"passwordhash"`
-	PrivacyAccepted     sql.NullBool   `json:"privacy_accepted"`
-	PrivacyAcceptedDate sql.NullTime   `json:"privacy_accepted_date"`
-	Firstname           string         `json:"firstname"`
-	Lastname            string         `json:"lastname"`
-	Birthday            time.Time      `json:"birthday"`
-	Email               string         `json:"email"`
-	SecretKey           sql.NullString `json:"secret_key"`
-	Phone               sql.NullString `json:"phone"`
-	City                string         `json:"city"`
-	Zip                 string         `json:"zip"`
-	Street              string         `json:"street"`
-	Country             string         `json:"country"`
-	Creator             string         `json:"creator"`
+	Email        string         `json:"email"`
+	Passwordhash string         `json:"passwordhash"`
+	SecretKey    sql.NullString `json:"secret_key"`
 }
 
 func (q *Queries) CreateAccount(ctx context.Context, arg CreateAccountParams) (Account, error) {
-	row := q.db.QueryRowContext(ctx, createAccount,
-		arg.Passwordhash,
-		arg.PrivacyAccepted,
-		arg.PrivacyAcceptedDate,
-		arg.Firstname,
-		arg.Lastname,
-		arg.Birthday,
-		arg.Email,
-		arg.SecretKey,
-		arg.Phone,
-		arg.City,
-		arg.Zip,
-		arg.Street,
-		arg.Country,
-		arg.Creator,
-	)
+	row := q.db.QueryRowContext(ctx, createAccount, arg.Email, arg.Passwordhash, arg.SecretKey)
 	var i Account
 	err := row.Scan(
 		&i.ID,
 		&i.PermissionLevel,
 		&i.Passwordhash,
-		&i.Firstname,
-		&i.Lastname,
-		&i.Birthday,
-		&i.PrivacyAccepted,
-		&i.PrivacyAcceptedDate,
 		&i.Email,
 		&i.SecretKey,
 		&i.EmailVerified,
 		&i.EmailVerifiedTime,
-		&i.Phone,
-		&i.City,
-		&i.Zip,
-		&i.Street,
-		&i.Country,
-		&i.Creator,
-		&i.Created,
-		&i.Changer,
-		&i.Changed,
 	)
 	return i, err
 }
@@ -119,8 +56,8 @@ func (q *Queries) DeleteAccount(ctx context.Context, id uint64) error {
 }
 
 const getAccount = `-- name: GetAccount :one
-SELECT id, permission_level, passwordhash, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, email, secret_key, email_verified, email_verified_time, phone, city, zip, street, country, creator, created, changer, changed FROM accounts
-WHERE "id" = $1 LIMIT 1
+SELECT id, permission_level, passwordhash, email, secret_key, email_verified, email_verified_time FROM accounts
+WHERE "id" = $1
 `
 
 func (q *Queries) GetAccount(ctx context.Context, id uint64) (Account, error) {
@@ -130,31 +67,17 @@ func (q *Queries) GetAccount(ctx context.Context, id uint64) (Account, error) {
 		&i.ID,
 		&i.PermissionLevel,
 		&i.Passwordhash,
-		&i.Firstname,
-		&i.Lastname,
-		&i.Birthday,
-		&i.PrivacyAccepted,
-		&i.PrivacyAcceptedDate,
 		&i.Email,
 		&i.SecretKey,
 		&i.EmailVerified,
 		&i.EmailVerifiedTime,
-		&i.Phone,
-		&i.City,
-		&i.Zip,
-		&i.Street,
-		&i.Country,
-		&i.Creator,
-		&i.Created,
-		&i.Changer,
-		&i.Changed,
 	)
 	return i, err
 }
 
 const getAccountByEmail = `-- name: GetAccountByEmail :one
-SELECT id, permission_level, passwordhash, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, email, secret_key, email_verified, email_verified_time, phone, city, zip, street, country, creator, created, changer, changed FROM accounts
-WHERE "email" = $1 LIMIT 1
+SELECT id, permission_level, passwordhash, email, secret_key, email_verified, email_verified_time FROM accounts
+WHERE "email" = $1
 `
 
 func (q *Queries) GetAccountByEmail(ctx context.Context, email string) (Account, error) {
@@ -164,66 +87,17 @@ func (q *Queries) GetAccountByEmail(ctx context.Context, email string) (Account,
 		&i.ID,
 		&i.PermissionLevel,
 		&i.Passwordhash,
-		&i.Firstname,
-		&i.Lastname,
-		&i.Birthday,
-		&i.PrivacyAccepted,
-		&i.PrivacyAcceptedDate,
 		&i.Email,
 		&i.SecretKey,
 		&i.EmailVerified,
 		&i.EmailVerifiedTime,
-		&i.Phone,
-		&i.City,
-		&i.Zip,
-		&i.Street,
-		&i.Country,
-		&i.Creator,
-		&i.Created,
-		&i.Changer,
-		&i.Changed,
-	)
-	return i, err
-}
-
-const getAccountForUpdate = `-- name: GetAccountForUpdate :one
-SELECT id, permission_level, passwordhash, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, email, secret_key, email_verified, email_verified_time, phone, city, zip, street, country, creator, created, changer, changed FROM accounts
-WHERE "id" = $1 LIMIT 1
-FOR NO KEY UPDATE
-`
-
-func (q *Queries) GetAccountForUpdate(ctx context.Context, id uint64) (Account, error) {
-	row := q.db.QueryRowContext(ctx, getAccountForUpdate, id)
-	var i Account
-	err := row.Scan(
-		&i.ID,
-		&i.PermissionLevel,
-		&i.Passwordhash,
-		&i.Firstname,
-		&i.Lastname,
-		&i.Birthday,
-		&i.PrivacyAccepted,
-		&i.PrivacyAcceptedDate,
-		&i.Email,
-		&i.SecretKey,
-		&i.EmailVerified,
-		&i.EmailVerifiedTime,
-		&i.Phone,
-		&i.City,
-		&i.Zip,
-		&i.Street,
-		&i.Country,
-		&i.Creator,
-		&i.Created,
-		&i.Changer,
-		&i.Changed,
 	)
 	return i, err
 }
 
 const listAccounts = `-- name: ListAccounts :many
-SELECT id, permission_level, passwordhash, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, email, secret_key, email_verified, email_verified_time, phone, city, zip, street, country, creator, created, changer, changed FROM accounts
-ORDER BY "lastname", "firstname"
+SELECT id, permission_level, passwordhash, email, secret_key, email_verified, email_verified_time FROM accounts
+ORDER BY "email"
 LIMIT $1
 OFFSET $2
 `
@@ -246,24 +120,10 @@ func (q *Queries) ListAccounts(ctx context.Context, arg ListAccountsParams) ([]A
 			&i.ID,
 			&i.PermissionLevel,
 			&i.Passwordhash,
-			&i.Firstname,
-			&i.Lastname,
-			&i.Birthday,
-			&i.PrivacyAccepted,
-			&i.PrivacyAcceptedDate,
 			&i.Email,
 			&i.SecretKey,
 			&i.EmailVerified,
 			&i.EmailVerifiedTime,
-			&i.Phone,
-			&i.City,
-			&i.Zip,
-			&i.Street,
-			&i.Country,
-			&i.Creator,
-			&i.Created,
-			&i.Changer,
-			&i.Changed,
 		); err != nil {
 			return nil, err
 		}
@@ -279,104 +139,27 @@ func (q *Queries) ListAccounts(ctx context.Context, arg ListAccountsParams) ([]A
 }
 
 const updateAccount = `-- name: UpdateAccount :one
-UPDATE accounts
+UPDATE accounts 
 SET
-    "passwordhash" = COALESCE($3, "passwordhash"),
-    "firstname" = COALESCE($4, "firstname"),
-    "lastname" = COALESCE($5, "lastname"),
-    "birthday" = COALESCE($6, "birthday"),
-    "email" = COALESCE($7, "email"),
-    "phone" = COALESCE($8, "phone"),
-    "city" = COALESCE($9, "city"),
-    "zip" = COALESCE($10, "zip"),
-    "street" = COALESCE($11, "street"),
-    "country" = COALESCE($12, "country"),
-    "changer" = $2,
-    "changed" = now()
-WHERE "id" = $1
-RETURNING id, permission_level, passwordhash, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, email, secret_key, email_verified, email_verified_time, phone, city, zip, street, country, creator, created, changer, changed
+    "email" = COALESCE($1, "email"),
+    "passwordhash" = COALESCE($2, "passwordhash"),
+    "secret_key" = COALESCE($3, "secret_key")
+WHERE "id" = $4
+RETURNING id, permission_level, passwordhash, email, secret_key, email_verified, email_verified_time
 `
 
 type UpdateAccountParams struct {
-	ID           uint64         `json:"id"`
-	Changer      string         `json:"changer"`
-	Passwordhash sql.NullString `json:"passwordhash"`
-	Firstname    sql.NullString `json:"firstname"`
-	Lastname     sql.NullString `json:"lastname"`
-	Birthday     sql.NullTime   `json:"birthday"`
 	Email        sql.NullString `json:"email"`
-	Phone        sql.NullString `json:"phone"`
-	City         sql.NullString `json:"city"`
-	Zip          sql.NullString `json:"zip"`
-	Street       sql.NullString `json:"street"`
-	Country      sql.NullString `json:"country"`
+	Passwordhash sql.NullString `json:"passwordhash"`
+	SecretKey    sql.NullString `json:"secret_key"`
+	ID           uint64         `json:"id"`
 }
 
 func (q *Queries) UpdateAccount(ctx context.Context, arg UpdateAccountParams) (Account, error) {
 	row := q.db.QueryRowContext(ctx, updateAccount,
-		arg.ID,
-		arg.Changer,
-		arg.Passwordhash,
-		arg.Firstname,
-		arg.Lastname,
-		arg.Birthday,
 		arg.Email,
-		arg.Phone,
-		arg.City,
-		arg.Zip,
-		arg.Street,
-		arg.Country,
-	)
-	var i Account
-	err := row.Scan(
-		&i.ID,
-		&i.PermissionLevel,
-		&i.Passwordhash,
-		&i.Firstname,
-		&i.Lastname,
-		&i.Birthday,
-		&i.PrivacyAccepted,
-		&i.PrivacyAcceptedDate,
-		&i.Email,
-		&i.SecretKey,
-		&i.EmailVerified,
-		&i.EmailVerifiedTime,
-		&i.Phone,
-		&i.City,
-		&i.Zip,
-		&i.Street,
-		&i.Country,
-		&i.Creator,
-		&i.Created,
-		&i.Changer,
-		&i.Changed,
-	)
-	return i, err
-}
-
-const updateAccountPrivacy = `-- name: UpdateAccountPrivacy :one
-UPDATE accounts
-SET
-    "privacy_accepted" = $1,
-    "privacy_accepted_date" = $2,
-    "changer" = $3,
-    "changed" = now()
-WHERE "id" = $4
-RETURNING id, permission_level, passwordhash, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, email, secret_key, email_verified, email_verified_time, phone, city, zip, street, country, creator, created, changer, changed
-`
-
-type UpdateAccountPrivacyParams struct {
-	PrivacyAccepted     sql.NullBool `json:"privacy_accepted"`
-	PrivacyAcceptedDate sql.NullTime `json:"privacy_accepted_date"`
-	Changer             string       `json:"changer"`
-	ID                  uint64       `json:"id"`
-}
-
-func (q *Queries) UpdateAccountPrivacy(ctx context.Context, arg UpdateAccountPrivacyParams) (Account, error) {
-	row := q.db.QueryRowContext(ctx, updateAccountPrivacy,
-		arg.PrivacyAccepted,
-		arg.PrivacyAcceptedDate,
-		arg.Changer,
+		arg.Passwordhash,
+		arg.SecretKey,
 		arg.ID,
 	)
 	var i Account
@@ -384,24 +167,10 @@ func (q *Queries) UpdateAccountPrivacy(ctx context.Context, arg UpdateAccountPri
 		&i.ID,
 		&i.PermissionLevel,
 		&i.Passwordhash,
-		&i.Firstname,
-		&i.Lastname,
-		&i.Birthday,
-		&i.PrivacyAccepted,
-		&i.PrivacyAcceptedDate,
 		&i.Email,
 		&i.SecretKey,
 		&i.EmailVerified,
 		&i.EmailVerifiedTime,
-		&i.Phone,
-		&i.City,
-		&i.Zip,
-		&i.Street,
-		&i.Country,
-		&i.Creator,
-		&i.Created,
-		&i.Changer,
-		&i.Changed,
 	)
 	return i, err
 }
diff --git a/bff/db/sqlc/account_info.sql.go b/bff/db/sqlc/account_info.sql.go
new file mode 100644
index 0000000..b17cef3
--- /dev/null
+++ b/bff/db/sqlc/account_info.sql.go
@@ -0,0 +1,294 @@
+// Code generated by sqlc. DO NOT EDIT.
+// versions:
+//   sqlc v1.22.0
+// source: account_info.sql
+
+package db
+
+import (
+	"context"
+	"database/sql"
+	"time"
+)
+
+const createAccountInfo = `-- name: CreateAccountInfo :one
+INSERT INTO account_info (
+    "account_id",
+    "privacy_accepted",
+    "privacy_accepted_date",
+    "firstname",
+    "lastname",
+    "birthday",
+    "phone",
+    "city",
+    "zip",
+    "street",
+    "country",
+    "creator",
+    "changer"
+) VALUES (
+    $1,
+    $2,
+    $3,
+    $4,
+    $5,
+    $6,
+    $7,
+    $8,
+    $9,
+    $10,
+    $11,
+    $12,
+    $12
+) RETURNING account_id, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, phone, city, zip, street, country, creator, created, changer, changed
+`
+
+type CreateAccountInfoParams struct {
+	AccountID           uint64         `json:"account_id"`
+	PrivacyAccepted     sql.NullBool   `json:"privacy_accepted"`
+	PrivacyAcceptedDate sql.NullTime   `json:"privacy_accepted_date"`
+	Firstname           string         `json:"firstname"`
+	Lastname            string         `json:"lastname"`
+	Birthday            time.Time      `json:"birthday"`
+	Phone               sql.NullString `json:"phone"`
+	City                string         `json:"city"`
+	Zip                 string         `json:"zip"`
+	Street              string         `json:"street"`
+	Country             string         `json:"country"`
+	Creator             string         `json:"creator"`
+}
+
+func (q *Queries) CreateAccountInfo(ctx context.Context, arg CreateAccountInfoParams) (AccountInfo, error) {
+	row := q.db.QueryRowContext(ctx, createAccountInfo,
+		arg.AccountID,
+		arg.PrivacyAccepted,
+		arg.PrivacyAcceptedDate,
+		arg.Firstname,
+		arg.Lastname,
+		arg.Birthday,
+		arg.Phone,
+		arg.City,
+		arg.Zip,
+		arg.Street,
+		arg.Country,
+		arg.Creator,
+	)
+	var i AccountInfo
+	err := row.Scan(
+		&i.AccountID,
+		&i.Firstname,
+		&i.Lastname,
+		&i.Birthday,
+		&i.PrivacyAccepted,
+		&i.PrivacyAcceptedDate,
+		&i.Phone,
+		&i.City,
+		&i.Zip,
+		&i.Street,
+		&i.Country,
+		&i.Creator,
+		&i.Created,
+		&i.Changer,
+		&i.Changed,
+	)
+	return i, err
+}
+
+const deleteAccountInfo = `-- name: DeleteAccountInfo :exec
+DELETE FROM account_info
+WHERE "account_id" = $1
+`
+
+func (q *Queries) DeleteAccountInfo(ctx context.Context, accountID uint64) error {
+	_, err := q.db.ExecContext(ctx, deleteAccountInfo, accountID)
+	return err
+}
+
+const getAccountInfo = `-- name: GetAccountInfo :one
+SELECT account_id, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, phone, city, zip, street, country, creator, created, changer, changed FROM account_info
+WHERE "account_id" = $1 LIMIT 1
+`
+
+func (q *Queries) GetAccountInfo(ctx context.Context, accountID uint64) (AccountInfo, error) {
+	row := q.db.QueryRowContext(ctx, getAccountInfo, accountID)
+	var i AccountInfo
+	err := row.Scan(
+		&i.AccountID,
+		&i.Firstname,
+		&i.Lastname,
+		&i.Birthday,
+		&i.PrivacyAccepted,
+		&i.PrivacyAcceptedDate,
+		&i.Phone,
+		&i.City,
+		&i.Zip,
+		&i.Street,
+		&i.Country,
+		&i.Creator,
+		&i.Created,
+		&i.Changer,
+		&i.Changed,
+	)
+	return i, err
+}
+
+const listAccountInfo = `-- name: ListAccountInfo :many
+SELECT account_id, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, phone, city, zip, street, country, creator, created, changer, changed FROM account_info
+ORDER BY "lastname", "firstname"
+LIMIT $1
+OFFSET $2
+`
+
+type ListAccountInfoParams struct {
+	Limit  int32 `json:"limit"`
+	Offset int32 `json:"offset"`
+}
+
+func (q *Queries) ListAccountInfo(ctx context.Context, arg ListAccountInfoParams) ([]AccountInfo, error) {
+	rows, err := q.db.QueryContext(ctx, listAccountInfo, arg.Limit, arg.Offset)
+	if err != nil {
+		return nil, err
+	}
+	defer rows.Close()
+	items := []AccountInfo{}
+	for rows.Next() {
+		var i AccountInfo
+		if err := rows.Scan(
+			&i.AccountID,
+			&i.Firstname,
+			&i.Lastname,
+			&i.Birthday,
+			&i.PrivacyAccepted,
+			&i.PrivacyAcceptedDate,
+			&i.Phone,
+			&i.City,
+			&i.Zip,
+			&i.Street,
+			&i.Country,
+			&i.Creator,
+			&i.Created,
+			&i.Changer,
+			&i.Changed,
+		); err != nil {
+			return nil, err
+		}
+		items = append(items, i)
+	}
+	if err := rows.Close(); err != nil {
+		return nil, err
+	}
+	if err := rows.Err(); err != nil {
+		return nil, err
+	}
+	return items, nil
+}
+
+const updateAccountInfo = `-- name: UpdateAccountInfo :one
+UPDATE account_info
+SET
+    "firstname" = COALESCE($3, "firstname"),
+    "lastname" = COALESCE($4, "lastname"),
+    "birthday" = COALESCE($5, "birthday"),
+    "phone" = COALESCE($6, "phone"),
+    "city" = COALESCE($7, "city"),
+    "zip" = COALESCE($8, "zip"),
+    "street" = COALESCE($9, "street"),
+    "country" = COALESCE($10, "country"),
+    "changer" = $2,
+    "changed" = now()
+WHERE "account_id" = $1
+RETURNING account_id, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, phone, city, zip, street, country, creator, created, changer, changed
+`
+
+type UpdateAccountInfoParams struct {
+	AccountID uint64         `json:"account_id"`
+	Changer   string         `json:"changer"`
+	Firstname sql.NullString `json:"firstname"`
+	Lastname  sql.NullString `json:"lastname"`
+	Birthday  sql.NullTime   `json:"birthday"`
+	Phone     sql.NullString `json:"phone"`
+	City      sql.NullString `json:"city"`
+	Zip       sql.NullString `json:"zip"`
+	Street    sql.NullString `json:"street"`
+	Country   sql.NullString `json:"country"`
+}
+
+func (q *Queries) UpdateAccountInfo(ctx context.Context, arg UpdateAccountInfoParams) (AccountInfo, error) {
+	row := q.db.QueryRowContext(ctx, updateAccountInfo,
+		arg.AccountID,
+		arg.Changer,
+		arg.Firstname,
+		arg.Lastname,
+		arg.Birthday,
+		arg.Phone,
+		arg.City,
+		arg.Zip,
+		arg.Street,
+		arg.Country,
+	)
+	var i AccountInfo
+	err := row.Scan(
+		&i.AccountID,
+		&i.Firstname,
+		&i.Lastname,
+		&i.Birthday,
+		&i.PrivacyAccepted,
+		&i.PrivacyAcceptedDate,
+		&i.Phone,
+		&i.City,
+		&i.Zip,
+		&i.Street,
+		&i.Country,
+		&i.Creator,
+		&i.Created,
+		&i.Changer,
+		&i.Changed,
+	)
+	return i, err
+}
+
+const updateAccountPrivacy = `-- name: UpdateAccountPrivacy :one
+UPDATE account_info
+SET
+    "privacy_accepted" = $1,
+    "privacy_accepted_date" = $2,
+    "changer" = $3,
+    "changed" = now()
+WHERE "account_id" = $4
+RETURNING account_id, firstname, lastname, birthday, privacy_accepted, privacy_accepted_date, phone, city, zip, street, country, creator, created, changer, changed
+`
+
+type UpdateAccountPrivacyParams struct {
+	PrivacyAccepted     sql.NullBool `json:"privacy_accepted"`
+	PrivacyAcceptedDate sql.NullTime `json:"privacy_accepted_date"`
+	Changer             string       `json:"changer"`
+	ID                  uint64       `json:"id"`
+}
+
+func (q *Queries) UpdateAccountPrivacy(ctx context.Context, arg UpdateAccountPrivacyParams) (AccountInfo, error) {
+	row := q.db.QueryRowContext(ctx, updateAccountPrivacy,
+		arg.PrivacyAccepted,
+		arg.PrivacyAcceptedDate,
+		arg.Changer,
+		arg.ID,
+	)
+	var i AccountInfo
+	err := row.Scan(
+		&i.AccountID,
+		&i.Firstname,
+		&i.Lastname,
+		&i.Birthday,
+		&i.PrivacyAccepted,
+		&i.PrivacyAcceptedDate,
+		&i.Phone,
+		&i.City,
+		&i.Zip,
+		&i.Street,
+		&i.Country,
+		&i.Creator,
+		&i.Created,
+		&i.Changer,
+		&i.Changed,
+	)
+	return i, err
+}
diff --git a/bff/db/sqlc/account_test.go b/bff/db/sqlc/account_test.go
index 6d41a84..24b9a8f 100644
--- a/bff/db/sqlc/account_test.go
+++ b/bff/db/sqlc/account_test.go
@@ -14,31 +14,13 @@ var timestamp = time.Now()
 
 func createRandomAccount(t *testing.T) Account {
 
-	creator := util.RandomName()
-
 	arg := CreateAccountParams{
 		Passwordhash: util.RandomString(30),
-		Firstname:    util.RandomName(),
-		Lastname:     util.RandomName(),
-		Birthday:     time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC),
 		Email:        util.RandomEmail(),
-		Phone: sql.NullString{
+		SecretKey: sql.NullString{
+			String: util.RandomString(100),
 			Valid:  true,
-			String: util.RandomPhone(),
 		},
-		PrivacyAccepted: sql.NullBool{
-			Valid: true,
-			Bool:  true,
-		},
-		PrivacyAcceptedDate: sql.NullTime{
-			Valid: true,
-			Time:  timestamp,
-		},
-		City:    util.RandomString(15),
-		Zip:     util.RandomString(5),
-		Street:  util.RandomString(20),
-		Country: util.RandomString(15),
-		Creator: creator,
 	}
 
 	account, err := testQueries.CreateAccount(context.Background(), arg)
@@ -46,20 +28,10 @@ func createRandomAccount(t *testing.T) Account {
 	require.NotEmpty(t, account)
 
 	require.Equal(t, arg.Passwordhash, account.Passwordhash)
-	require.Equal(t, arg.Firstname, account.Firstname)
-	require.Equal(t, arg.Lastname, account.Lastname)
-	require.Equal(t, arg.Birthday, account.Birthday)
 	require.Equal(t, arg.Email, account.Email)
-	require.Equal(t, arg.Phone, account.Phone)
-	require.Equal(t, arg.City, account.City)
-	require.Equal(t, arg.Zip, account.Zip)
-	require.Equal(t, arg.Street, account.Street)
-	require.Equal(t, arg.Country, account.Country)
-	require.Equal(t, arg.Creator, account.Creator)
-	require.Equal(t, arg.Creator, account.Changer)
+	require.Equal(t, arg.SecretKey, account.SecretKey)
 
 	require.NotZero(t, account.ID)
-	require.NotZero(t, account.Created)
 
 	return account
 }
@@ -77,19 +49,8 @@ func TestGetAccount(t *testing.T) {
 	require.NotEmpty(t, account)
 
 	require.Equal(t, newAccount.Passwordhash, account.Passwordhash)
-	require.Equal(t, newAccount.Firstname, account.Firstname)
-	require.Equal(t, newAccount.Lastname, account.Lastname)
-	require.Equal(t, newAccount.Birthday, account.Birthday)
 	require.Equal(t, newAccount.Email, account.Email)
-	require.Equal(t, newAccount.Phone, account.Phone)
-	require.Equal(t, newAccount.City, account.City)
-	require.Equal(t, newAccount.Zip, account.Zip)
-	require.Equal(t, newAccount.Street, account.Street)
-	require.Equal(t, newAccount.Country, account.Country)
-	require.Equal(t, newAccount.Creator, account.Creator)
-	require.Equal(t, newAccount.Changer, account.Changer)
-
-	require.WithinDuration(t, newAccount.Created, account.Created, time.Second)
+	require.Equal(t, newAccount.SecretKey, account.SecretKey)
 }
 
 func TestDeleteAccount(t *testing.T) {
@@ -103,78 +64,6 @@ func TestDeleteAccount(t *testing.T) {
 	require.Empty(t, account2)
 }
 
-func TestUpdateAccount(t *testing.T) {
-	account1 := createRandomAccount(t)
-	require.NotEmpty(t, account1)
-
-	arg := UpdateAccountParams{
-		ID: account1.ID,
-		Phone: sql.NullString{
-			String: util.RandomPhone(),
-			Valid:  true,
-		},
-	}
-
-	account2, err := testQueries.UpdateAccount(context.Background(), arg)
-	require.NoError(t, err)
-	require.NotEmpty(t, account2)
-
-	require.Equal(t, account1.ID, account2.ID)
-	require.Equal(t, account1.Lastname, account2.Lastname)
-	require.NotEqual(t, account1.Phone, account2.Phone)
-	require.NotEqual(t, account1.Changer, account2.Changer)
-}
-
-func TestUpdateAccountPrivacy(t *testing.T) {
-	account1 := createRandomAccount(t)
-	require.NotEmpty(t, account1)
-
-	changer1 := util.RandomName()
-
-	arg := UpdateAccountPrivacyParams{
-		ID: account1.ID,
-		PrivacyAccepted: sql.NullBool{
-			Valid: true,
-			Bool:  false,
-		},
-		PrivacyAcceptedDate: sql.NullTime{
-			Valid: true,
-			Time:  time.Time{},
-		},
-		Changer: changer1,
-	}
-
-	account2, err := testQueries.UpdateAccountPrivacy(context.Background(), arg)
-	require.NoError(t, err)
-	require.NotEmpty(t, account2)
-
-	require.Equal(t, account1.ID, account2.ID)
-	require.Equal(t, account1.Lastname, account2.Lastname)
-	require.WithinDuration(t, time.Time{}, account2.PrivacyAcceptedDate.Time, time.Second)
-	require.NotEqual(t, account1.PrivacyAccepted.Bool, account2.PrivacyAccepted.Bool)
-	require.NotEqual(t, account1.PrivacyAcceptedDate.Time, account2.PrivacyAcceptedDate.Time)
-
-	arg.PrivacyAccepted = sql.NullBool{
-		Valid: true,
-		Bool:  true,
-	}
-
-	arg.PrivacyAcceptedDate = sql.NullTime{
-		Valid: true,
-		Time:  timestamp.UTC(),
-	}
-
-	account1, err = testQueries.UpdateAccountPrivacy(context.Background(), arg)
-	require.NoError(t, err)
-	require.NotEmpty(t, account2)
-
-	require.Equal(t, account1.ID, account2.ID)
-	require.Equal(t, account1.Lastname, account2.Lastname)
-	require.WithinDuration(t, timestamp.UTC(), account1.PrivacyAcceptedDate.Time, time.Second)
-	require.NotEqual(t, account1.PrivacyAccepted.Bool, account2.PrivacyAccepted.Bool)
-	require.NotEqual(t, account1.PrivacyAcceptedDate.Time, account2.PrivacyAcceptedDate.Time)
-}
-
 func TestListAccounts(t *testing.T) {
 	for i := 0; i < 10; i++ {
 		createRandomAccount(t)
diff --git a/bff/db/sqlc/models.go b/bff/db/sqlc/models.go
index 9451cea..56e5782 100644
--- a/bff/db/sqlc/models.go
+++ b/bff/db/sqlc/models.go
@@ -12,18 +12,22 @@ import (
 )
 
 type Account struct {
-	ID                  uint64         `json:"id"`
-	PermissionLevel     int32          `json:"permission_level"`
-	Passwordhash        string         `json:"passwordhash"`
+	ID                uint64         `json:"id"`
+	PermissionLevel   int32          `json:"permission_level"`
+	Passwordhash      string         `json:"passwordhash"`
+	Email             string         `json:"email"`
+	SecretKey         sql.NullString `json:"secret_key"`
+	EmailVerified     sql.NullBool   `json:"email_verified"`
+	EmailVerifiedTime sql.NullTime   `json:"email_verified_time"`
+}
+
+type AccountInfo struct {
+	AccountID           uint64         `json:"account_id"`
 	Firstname           string         `json:"firstname"`
 	Lastname            string         `json:"lastname"`
 	Birthday            time.Time      `json:"birthday"`
 	PrivacyAccepted     sql.NullBool   `json:"privacy_accepted"`
 	PrivacyAcceptedDate sql.NullTime   `json:"privacy_accepted_date"`
-	Email               string         `json:"email"`
-	SecretKey           sql.NullString `json:"secret_key"`
-	EmailVerified       sql.NullBool   `json:"email_verified"`
-	EmailVerifiedTime   sql.NullTime   `json:"email_verified_time"`
 	Phone               sql.NullString `json:"phone"`
 	City                string         `json:"city"`
 	Zip                 string         `json:"zip"`
diff --git a/bff/db/sqlc/querier.go b/bff/db/sqlc/querier.go
index 30bd3b8..c165ec9 100644
--- a/bff/db/sqlc/querier.go
+++ b/bff/db/sqlc/querier.go
@@ -15,6 +15,7 @@ type Querier interface {
 	BlockSession(ctx context.Context, id uuid.UUID) error
 	CloneProviders(ctx context.Context, arg CloneProvidersParams) error
 	CreateAccount(ctx context.Context, arg CreateAccountParams) (Account, error)
+	CreateAccountInfo(ctx context.Context, arg CreateAccountInfoParams) (AccountInfo, error)
 	CreateDocument(ctx context.Context, arg CreateDocumentParams) (Document, error)
 	CreateDocumentMail(ctx context.Context, arg CreateDocumentMailParams) (Document, error)
 	CreateDocumentUpload(ctx context.Context, arg CreateDocumentUploadParams) (Document, error)
@@ -26,6 +27,7 @@ type Querier interface {
 	CreateReturnsLog(ctx context.Context, arg CreateReturnsLogParams) (ReturnsLog, error)
 	CreateSession(ctx context.Context, arg CreateSessionParams) (Session, error)
 	DeleteAccount(ctx context.Context, id uint64) error
+	DeleteAccountInfo(ctx context.Context, accountID uint64) error
 	DeleteDocument(ctx context.Context, id uint64) error
 	DeleteDocumentsByPersonID(ctx context.Context, personID sql.NullInt64) error
 	// -- name: UpdateMail :one
@@ -51,7 +53,7 @@ type Querier interface {
 	DeleteReturnsLogsByPersonID(ctx context.Context, personID uint64) error
 	GetAccount(ctx context.Context, id uint64) (Account, error)
 	GetAccountByEmail(ctx context.Context, email string) (Account, error)
-	GetAccountForUpdate(ctx context.Context, id uint64) (Account, error)
+	GetAccountInfo(ctx context.Context, accountID uint64) (AccountInfo, error)
 	GetDocument(ctx context.Context, id uint64) (Document, error)
 	GetDocumentByHash(ctx context.Context, arg GetDocumentByHashParams) ([]uint64, error)
 	GetDocumentByIDWithAccountID(ctx context.Context, arg GetDocumentByIDWithAccountIDParams) (Document, error)
@@ -65,6 +67,7 @@ type Querier interface {
 	GetReturnsLog(ctx context.Context, id uint64) (ReturnsLog, error)
 	GetSession(ctx context.Context, id uuid.UUID) (Session, error)
 	InvalidateDocument(ctx context.Context, arg InvalidateDocumentParams) (Document, error)
+	ListAccountInfo(ctx context.Context, arg ListAccountInfoParams) ([]AccountInfo, error)
 	ListAccounts(ctx context.Context, arg ListAccountsParams) ([]Account, error)
 	ListDocuments(ctx context.Context, arg ListDocumentsParams) ([]Document, error)
 	ListMails(ctx context.Context, arg ListMailsParams) ([]Mail, error)
@@ -76,7 +79,8 @@ type Querier interface {
 	ListReturnsLogsByPersonID(ctx context.Context, personID uint64) ([]ReturnsLog, error)
 	ListSessions(ctx context.Context, accountID uint64) ([]Session, error)
 	UpdateAccount(ctx context.Context, arg UpdateAccountParams) (Account, error)
-	UpdateAccountPrivacy(ctx context.Context, arg UpdateAccountPrivacyParams) (Account, error)
+	UpdateAccountInfo(ctx context.Context, arg UpdateAccountInfoParams) (AccountInfo, error)
+	UpdateAccountPrivacy(ctx context.Context, arg UpdateAccountPrivacyParams) (AccountInfo, error)
 	UpdateDocument(ctx context.Context, arg UpdateDocumentParams) (Document, error)
 	UpdatePayment(ctx context.Context, arg UpdatePaymentParams) (Payment, error)
 	UpdatePerson(ctx context.Context, arg UpdatePersonParams) (Person, error)
diff --git a/bff/db/sqlc/store.go b/bff/db/sqlc/store.go
index d2cb8a9..d7aa081 100644
--- a/bff/db/sqlc/store.go
+++ b/bff/db/sqlc/store.go
@@ -11,12 +11,13 @@ import (
 type Store interface {
 	Querier
 	CreateAccountTx(ctx context.Context, arg CreateAccountTxParams) (Account, error)
-	UpdateAccountTx(ctx context.Context, arg UpdateAccountTxParams) (Account, error)
-	UpdateAccountPrivacyTx(ctx context.Context, arg UpdateAccountPrivacyTxParams) (Account, error)
+	UpdateAccountInfoTx(ctx context.Context, arg UpdateAccountInfoTxParams) (AccountInfo, error)
+	UpdateAccountPrivacyTx(ctx context.Context, arg UpdateAccountPrivacyTxParams) (AccountInfo, error)
 	CreatePersonTx(ctx context.Context, arg CreatePersonTxParams) (Person, error)
 	DeletePersonTx(ctx context.Context, id uint64) error
 	CreateDocumentTx(ctx context.Context, arg CreateDocumentTxParams) (doc Document, code int, err error)
 	DeleteDocumentTx(ctx context.Context, id uint64) (code codes.Code, err error)
+	UpdateAccountTx(ctx context.Context, arg UpdateAccountTxParams) (Account, error)
 }
 
 // Store provides all functions to execute db queries and transactions
diff --git a/bff/db/sqlc/tx_create_account.go b/bff/db/sqlc/tx_create_account.go
index 5dff46c..caf9e47 100644
--- a/bff/db/sqlc/tx_create_account.go
+++ b/bff/db/sqlc/tx_create_account.go
@@ -3,7 +3,6 @@ package db
 import (
 	"context"
 	"database/sql"
-	"time"
 
 	"github.com/google/uuid"
 )
@@ -28,13 +27,6 @@ func (store *SQLStore) CreateAccountTx(ctx context.Context, arg CreateAccountTxP
 		String: uid.String(),
 	}
 
-	if arg.PrivacyAccepted.Bool && arg.PrivacyAccepted.Valid && !arg.PrivacyAcceptedDate.Valid {
-		arg.PrivacyAcceptedDate = sql.NullTime{
-			Valid: true,
-			Time:  time.Now(),
-		}
-	}
-
 	// arg.Passwordhash, err = util.HashPassword(arg.Passwordhash)
 	// if err != nil {
 	// 	return Account{}, nil
diff --git a/bff/db/sqlc/tx_update_account.go b/bff/db/sqlc/tx_update_account.go
index 7feba5f..e920a8b 100644
--- a/bff/db/sqlc/tx_update_account.go
+++ b/bff/db/sqlc/tx_update_account.go
@@ -5,27 +5,25 @@ import (
 	"database/sql"
 )
 
-type UpdateAccountTxParams struct {
-	ID           uint64         `json:"ID"`
-	Changer      string         `json:"changer"`
-	Passwordhash sql.NullString `json:"passwordhash"`
-	Firstname    sql.NullString `json:"firstname"`
-	Lastname     sql.NullString `json:"lastname"`
-	Birthday     sql.NullTime   `json:"birthday"`
-	Email        sql.NullString `json:"email"`
-	Phone        sql.NullString `json:"phone"`
-	City         sql.NullString `json:"city"`
-	Zip          sql.NullString `json:"zip"`
-	Street       sql.NullString `json:"street"`
-	Country      sql.NullString `json:"country"`
+type UpdateAccountInfoTxParams struct {
+	AccountID uint64         `json:"account_id"`
+	Changer   string         `json:"changer"`
+	Firstname sql.NullString `json:"firstname"`
+	Lastname  sql.NullString `json:"lastname"`
+	Birthday  sql.NullTime   `json:"birthday"`
+	Phone     sql.NullString `json:"phone"`
+	City      sql.NullString `json:"city"`
+	Zip       sql.NullString `json:"zip"`
+	Street    sql.NullString `json:"street"`
+	Country   sql.NullString `json:"country"`
 }
 
-type UpdateAccountTxResult struct {
-	Account Account `json:"account"`
+type UpdateAccountInfoTxResult struct {
+	AccountInfo AccountInfo `json:"account_info"`
 }
 
-func (store *SQLStore) UpdateAccountTx(ctx context.Context, arg UpdateAccountTxParams) (Account, error) {
-	var result UpdateAccountTxResult
+func (store *SQLStore) UpdateAccountInfoTx(ctx context.Context, arg UpdateAccountInfoTxParams) (AccountInfo, error) {
+	var result UpdateAccountInfoTxResult
 
 	// if arg.Passwordhash.Valid {
 	// 	arg.Passwordhash.String, err = util.HashPassword(arg.Passwordhash.String)
@@ -36,9 +34,9 @@ func (store *SQLStore) UpdateAccountTx(ctx context.Context, arg UpdateAccountTxP
 
 	err := store.execTx(ctx, func(q *Queries) error {
 		var err error
-		result.Account, err = q.UpdateAccount(ctx, UpdateAccountParams(arg))
+		result.AccountInfo, err = q.UpdateAccountInfo(ctx, UpdateAccountInfoParams(arg))
 		return err
 	})
 
-	return result.Account, err
+	return result.AccountInfo, err
 }
diff --git a/bff/db/sqlc/tx_update_account_privacy.go b/bff/db/sqlc/tx_update_account_privacy.go
index 9eb02aa..7f1ed54 100644
--- a/bff/db/sqlc/tx_update_account_privacy.go
+++ b/bff/db/sqlc/tx_update_account_privacy.go
@@ -16,9 +16,9 @@ type UpdateAccountPrivacyTxResult struct {
 	Account Account `json:"account"`
 }
 
-func (store *SQLStore) UpdateAccountPrivacyTx(ctx context.Context, arg UpdateAccountPrivacyTxParams) (Account, error) {
+func (store *SQLStore) UpdateAccountPrivacyTx(ctx context.Context, arg UpdateAccountPrivacyTxParams) (AccountInfo, error) {
 	var date sql.NullTime
-	var account Account
+	var account AccountInfo
 
 	if *arg.PrivacyAccepted {
 		date = sql.NullTime{
diff --git a/bff/db/sqlc/tx_update_accountt.go b/bff/db/sqlc/tx_update_accountt.go
new file mode 100644
index 0000000..1803266
--- /dev/null
+++ b/bff/db/sqlc/tx_update_accountt.go
@@ -0,0 +1,42 @@
+package db
+
+import (
+	"context"
+	"database/sql"
+
+	"github.com/google/uuid"
+)
+
+type UpdateAccountTxParams struct {
+	UpdateAccountParams
+	AfterUpdate func(Account) error
+}
+
+type UpdateAccountTxResult struct {
+	Account Account `json:"account"`
+}
+
+func (store *SQLStore) UpdateAccountTx(ctx context.Context, arg UpdateAccountTxParams) (Account, error) {
+	var result UpdateAccountTxResult
+	var err error
+
+	uid, _ := uuid.NewUUID()
+
+	arg.SecretKey = sql.NullString{
+		Valid:  uid.String() != "",
+		String: uid.String(),
+	}
+
+	err = store.execTx(ctx, func(q *Queries) error {
+		var err error
+
+		result.Account, err = q.UpdateAccount(ctx, arg.UpdateAccountParams)
+		if err != nil {
+			return err
+		}
+
+		return arg.AfterUpdate(result.Account)
+	})
+
+	return result.Account, err
+}
diff --git a/bff/doc/swagger/df.swagger.json b/bff/doc/swagger/df.swagger.json
index ab00d82..123493c 100644
--- a/bff/doc/swagger/df.swagger.json
+++ b/bff/doc/swagger/df.swagger.json
@@ -68,7 +68,7 @@
     },
     "/v1/accounts/create_account": {
       "post": {
-        "summary": "Create Account",
+        "summary": "Create AccountInfo",
         "operationId": "df_CreateAccount",
         "responses": {
           "200": {
@@ -100,6 +100,45 @@
         ]
       }
     },
+    "/v1/accounts/create_account_info": {
+      "post": {
+        "summary": "Create AccountInfo",
+        "operationId": "df_CreateAccountInfo",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/pbCreateAccountInfoResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "body",
+            "description": "Create an AccountInfo",
+            "in": "body",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/pbCreateAccountInfoRequest"
+            }
+          }
+        ],
+        "tags": [
+          "df"
+        ],
+        "security": [
+          {
+            "BearerAuth": []
+          }
+        ]
+      }
+    },
     "/v1/accounts/get_account/{id}": {
       "get": {
         "summary": "Get Account by account_id",
@@ -137,6 +176,87 @@
         ]
       }
     },
+    "/v1/accounts/get_account_info/{accountId}": {
+      "get": {
+        "summary": "Get AccountInfo by account_id",
+        "operationId": "df_GetAccountInfo",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/pbGetAccountInfoResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "accountId",
+            "in": "path",
+            "required": true,
+            "type": "string",
+            "format": "uint64"
+          }
+        ],
+        "tags": [
+          "df"
+        ],
+        "security": [
+          {
+            "BearerAuth": []
+          }
+        ]
+      }
+    },
+    "/v1/accounts/list_account_info": {
+      "get": {
+        "summary": "List AccountInfos [admin only]",
+        "operationId": "df_ListAccountInfo",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/pbListAccountInfoResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "pageId",
+            "in": "query",
+            "required": true,
+            "type": "integer",
+            "format": "int64"
+          },
+          {
+            "name": "pageSize",
+            "in": "query",
+            "required": true,
+            "type": "integer",
+            "format": "int64"
+          }
+        ],
+        "tags": [
+          "df"
+        ],
+        "security": [
+          {
+            "BearerAuth": []
+          }
+        ]
+      }
+    },
     "/v1/accounts/list_accounts": {
       "get": {
         "summary": "List Accounts [admin only]",
@@ -220,6 +340,45 @@
         ]
       }
     },
+    "/v1/accounts/update_account_info": {
+      "patch": {
+        "summary": "Update AccountInfo",
+        "operationId": "df_UpdateAccountInfo",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/pbUpdateAccountInfoResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "body",
+            "description": "Update an AccountInfo",
+            "in": "body",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/pbUpdateAccountInfoRequest"
+            }
+          }
+        ],
+        "tags": [
+          "df"
+        ],
+        "security": [
+          {
+            "BearerAuth": []
+          }
+        ]
+      }
+    },
     "/v1/accounts/update_account_privacy": {
       "patch": {
         "summary": "Update Account Privacy Settings",
@@ -241,7 +400,7 @@
         "parameters": [
           {
             "name": "body",
-            "description": "Update the Privacy Consent of an Account",
+            "description": "Update the Privacy Consent of an AccountInfo",
             "in": "body",
             "required": true,
             "schema": {
@@ -921,6 +1080,54 @@
         "email": {
           "type": "string"
         },
+        "secretKey": {
+          "type": "string"
+        },
+        "emailVerifiedTime": {
+          "type": "string",
+          "format": "date-time",
+          "example": "2023-10-05T00:00:00Z"
+        },
+        "emailVerified": {
+          "type": "boolean"
+        },
+        "privacyAcceptedDate": {
+          "type": "string",
+          "format": "date-time",
+          "example": "2023-10-05T00:00:00Z"
+        },
+        "permissionLevel": {
+          "type": "integer",
+          "format": "int32",
+          "description": "Default is 0 (non-priviledged)"
+        }
+      },
+      "title": "Account"
+    },
+    "pbAccountInfo": {
+      "type": "object",
+      "example": {
+        "account_id": "1",
+        "firstname": "John",
+        "lastname": "Doe",
+        "phone": "",
+        "street": "Death Star 2",
+        "zip": "0815",
+        "city": "New York",
+        "country": "USA",
+        "birthday": "1990-10-05T00:00:00Z",
+        "privacy_accepted": false,
+        "privacy_accepted_date": "0001-01-01T00:00:00Z",
+        "creator": "john.doe@example.com",
+        "created": "2023-10-05T02:30:53Z",
+        "changer": "john.doe@example.com",
+        "changed": "2023-10-05T02:30:53Z"
+      },
+      "properties": {
+        "accountId": {
+          "type": "string",
+          "format": "uint64"
+        },
         "firstname": {
           "type": "string"
         },
@@ -977,7 +1184,7 @@
           "example": "2023-10-05T00:00:00Z"
         }
       },
-      "title": "Account"
+      "title": "AccountInfo"
     },
     "pbBlockSessionRequest": {
       "type": "object",
@@ -1016,11 +1223,10 @@
       },
       "title": "Blocked Session"
     },
-    "pbCreateAccountRequest": {
+    "pbCreateAccountInfoRequest": {
       "type": "object",
       "example": {
-        "email": "john.doe@example.com",
-        "password": "MayTheForceBeWithYou!",
+        "account_id": "1",
         "firstname": "John",
         "lastname": "Doe",
         "street": "Main Street 1",
@@ -1030,11 +1236,9 @@
         "birthday": "1990-10-05T00:00:00Z"
       },
       "properties": {
-        "email": {
-          "type": "string"
-        },
-        "password": {
-          "type": "string"
+        "accountId": {
+          "type": "string",
+          "format": "uint64"
         },
         "firstname": {
           "type": "string"
@@ -1067,11 +1271,10 @@
           "example": true
         }
       },
-      "description": "Create an Account",
-      "title": "Create Account",
+      "description": "Create an AccountInfo",
+      "title": "Create AccountInfo",
       "required": [
-        "email",
-        "password",
+        "accountId",
         "firstname",
         "lastname",
         "street",
@@ -1081,6 +1284,37 @@
         "birthday"
       ]
     },
+    "pbCreateAccountInfoResponse": {
+      "type": "object",
+      "properties": {
+        "accountInfo": {
+          "$ref": "#/definitions/pbAccountInfo"
+        }
+      },
+      "description": "Returns the created AccountInfo",
+      "title": "Created AccountInfo"
+    },
+    "pbCreateAccountRequest": {
+      "type": "object",
+      "example": {
+        "email": "john.doe@example.com",
+        "password": "MayTheForceBeWithYou!"
+      },
+      "properties": {
+        "email": {
+          "type": "string"
+        },
+        "password": {
+          "type": "string"
+        }
+      },
+      "description": "Create an Account",
+      "title": "Create Account",
+      "required": [
+        "email",
+        "password"
+      ]
+    },
     "pbCreateAccountResponse": {
       "type": "object",
       "properties": {
@@ -1321,6 +1555,16 @@
       },
       "title": "Document"
     },
+    "pbGetAccountInfoResponse": {
+      "type": "object",
+      "properties": {
+        "accountInfo": {
+          "$ref": "#/definitions/pbAccountInfo"
+        }
+      },
+      "description": "Returns the AccountInfo",
+      "title": "GetAccountInfo Response"
+    },
     "pbGetAccountResponse": {
       "type": "object",
       "properties": {
@@ -1328,7 +1572,7 @@
           "$ref": "#/definitions/pbAccount"
         }
       },
-      "description": "Returns the Account",
+      "description": "Returns the AccountInfo",
       "title": "GetAccount Response"
     },
     "pbGetPaymentResponse": {
@@ -1351,6 +1595,20 @@
       "description": "Returns the Person",
       "title": "GetPerson Response"
     },
+    "pbListAccountInfoResponse": {
+      "type": "object",
+      "properties": {
+        "accountInfo": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/pbAccountInfo"
+          }
+        }
+      },
+      "description": "Returns the AccountInfo",
+      "title": "ListAccountInfo Response"
+    },
     "pbListAccountsResponse": {
       "type": "object",
       "properties": {
@@ -1751,57 +2009,17 @@
       },
       "title": "Session"
     },
-    "pbUpdateAccountPrivacyRequest": {
+    "pbUpdateAccountInfoRequest": {
       "type": "object",
       "example": {
-        "id": "1",
-        "privacy_accepted": true
-      },
-      "properties": {
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "example": 1
-        },
-        "privacyAccepted": {
-          "type": "boolean",
-          "example": false
-        }
-      },
-      "description": "Update the Privacy Consent of an Account",
-      "title": "Update Account Privacy Consent",
-      "required": [
-        "id",
-        "privacyAccepted"
-      ]
-    },
-    "pbUpdateAccountPrivacyResponse": {
-      "type": "object",
-      "properties": {
-        "account": {
-          "$ref": "#/definitions/pbAccount",
-          "title": "Updated Account"
-        }
-      },
-      "title": "Update Account Privacy Response"
-    },
-    "pbUpdateAccountRequest": {
-      "type": "object",
-      "example": {
-        "id": "1",
+        "account_id": "1",
         "street": "Death Star 2"
       },
       "properties": {
-        "id": {
+        "accountId": {
           "type": "string",
           "format": "uint64"
         },
-        "email": {
-          "type": "string"
-        },
-        "password": {
-          "type": "string"
-        },
         "firstname": {
           "type": "string"
         },
@@ -1829,10 +2047,79 @@
           "example": "1990-10-05T00:00:00Z"
         }
       },
+      "description": "Update an AccountInfo",
+      "title": "Update AccountInfo",
+      "required": [
+        "id"
+      ]
+    },
+    "pbUpdateAccountInfoResponse": {
+      "type": "object",
+      "properties": {
+        "accountInfo": {
+          "$ref": "#/definitions/pbAccountInfo"
+        }
+      },
+      "description": "Returns the updated Account",
+      "title": "Updated Account"
+    },
+    "pbUpdateAccountPrivacyRequest": {
+      "type": "object",
+      "example": {
+        "account_id": "1",
+        "privacy_accepted": true
+      },
+      "properties": {
+        "accountId": {
+          "type": "string",
+          "format": "int64",
+          "example": 1
+        },
+        "privacyAccepted": {
+          "type": "boolean",
+          "example": false
+        }
+      },
+      "description": "Update the Privacy Consent of an AccountInfo",
+      "title": "Update Account Info Privacy Consent",
+      "required": [
+        "id",
+        "privacyAccepted"
+      ]
+    },
+    "pbUpdateAccountPrivacyResponse": {
+      "type": "object",
+      "properties": {
+        "accountInfo": {
+          "$ref": "#/definitions/pbAccountInfo",
+          "title": "Updated AccountInfo"
+        }
+      },
+      "title": "Update Account Info Privacy Response"
+    },
+    "pbUpdateAccountRequest": {
+      "type": "object",
+      "example": {
+        "account_id": "1",
+        "email": "john.doe@example.com"
+      },
+      "properties": {
+        "accountId": {
+          "type": "string",
+          "format": "uint64"
+        },
+        "email": {
+          "type": "string"
+        },
+        "password": {
+          "type": "string"
+        }
+      },
       "description": "Update an Account",
       "title": "Update Account",
       "required": [
-        "id"
+        "email",
+        "password"
       ]
     },
     "pbUpdateAccountResponse": {
diff --git a/bff/gapi/converter.go b/bff/gapi/converter.go
index a0b6d29..af2da8d 100644
--- a/bff/gapi/converter.go
+++ b/bff/gapi/converter.go
@@ -8,23 +8,32 @@ import (
 
 func convertAccount(account db.Account) *pb.Account {
 	return &pb.Account{
-		Id:                  account.ID,
-		PermissionLevel:     account.PermissionLevel,
-		Email:               account.Email,
-		Firstname:           account.Firstname,
-		Lastname:            account.Lastname,
-		City:                account.City,
-		Street:              account.Street,
-		Zip:                 account.Zip,
-		Country:             account.Country,
-		Creator:             account.Creator,
-		Changer:             account.Changer,
-		PrivacyAccepted:     account.PrivacyAccepted.Bool,
-		PrivacyAcceptedDate: timestamppb.New(account.PrivacyAcceptedDate.Time),
-		Birthday:            timestamppb.New(account.Birthday),
-		Created:             timestamppb.New(account.Created),
-		Changed:             timestamppb.New(account.Changed),
-		Phone:               account.Phone.String,
+		Id:                account.ID,
+		PermissionLevel:   account.PermissionLevel,
+		Email:             account.Email,
+		EmailVerified:     account.EmailVerified.Bool,
+		EmailVerifiedTime: timestamppb.New(account.EmailVerifiedTime.Time),
+		SecretKey:         &account.SecretKey.String,
+	}
+}
+
+func convertAccountInfo(account_info db.AccountInfo) *pb.AccountInfo {
+	return &pb.AccountInfo{
+		AccountId:           account_info.AccountID,
+		Firstname:           account_info.Firstname,
+		Lastname:            account_info.Lastname,
+		City:                account_info.City,
+		Street:              account_info.Street,
+		Zip:                 account_info.Zip,
+		Country:             account_info.Country,
+		Creator:             account_info.Creator,
+		Changer:             account_info.Changer,
+		PrivacyAccepted:     account_info.PrivacyAccepted.Bool,
+		PrivacyAcceptedDate: timestamppb.New(account_info.PrivacyAcceptedDate.Time),
+		Birthday:            timestamppb.New(account_info.Birthday),
+		Created:             timestamppb.New(account_info.Created),
+		Changed:             timestamppb.New(account_info.Changed),
+		Phone:               account_info.Phone.String,
 	}
 }
 
diff --git a/bff/gapi/rpc_create_account.go b/bff/gapi/rpc_create_account.go
index f7cc281..41dbf6b 100644
--- a/bff/gapi/rpc_create_account.go
+++ b/bff/gapi/rpc_create_account.go
@@ -2,8 +2,6 @@ package gapi
 
 import (
 	"context"
-	"database/sql"
-	"errors"
 	"fmt"
 	"log/slog"
 
@@ -31,26 +29,10 @@ func (server *Server) CreateAccount(ctx context.Context, req *pb.CreateAccountRe
 	arg := db.CreateAccountTxParams{
 		CreateAccountParams: db.CreateAccountParams{
 			Passwordhash: hashedPassword,
-			PrivacyAccepted: sql.NullBool{
-				Valid: true,
-				Bool:  req.GetPrivacyAccepted(),
-			},
-			Firstname: req.GetFirstname(),
-			Lastname:  req.GetLastname(),
-			Birthday:  req.GetBirthday().AsTime(),
-			Email:     req.GetEmail(),
-			City:      req.GetCity(),
-			Zip:       req.GetZip(),
-			Street:    req.GetStreet(),
-			Country:   req.GetCountry(),
-			Creator:   req.GetEmail(),
-			Phone: sql.NullString{
-				Valid:  req.GetPhone() != "",
-				String: req.GetPhone(),
-			},
+			Email:        req.GetEmail(),
 		},
 		AfterCreate: func(a db.Account) error {
-			return server.mailSender.SendEmail("Verify your E-Mail Address", fmt.Sprintf("Hello %s %s,</br></br>please verify your E-Mail Addres by clicking on the following link:</br><a href=\"http://localhost:8080/v1/verify_email/%d/%s\">Verification Link</a></br></br></br>Your Team of DF", req.GetFirstname(), req.GetLastname(), a.ID, a.SecretKey.String), []string{req.GetEmail()}, nil, nil, nil)
+			return server.mailSender.SendEmail("Verify your E-Mail Address", fmt.Sprintf("Hello %s,</br></br>please verify your E-Mail Addres by clicking on the following link:</br><a href=\"http://localhost:8080/v1/verify_email/%d/%s\">Verification Link</a></br></br></br>Your Team of DF", req.GetEmail(), a.ID, a.SecretKey.String), []string{req.GetEmail()}, nil, nil, nil)
 		},
 	}
 
@@ -76,21 +58,5 @@ func validateCreateAccountRequest(req *pb.CreateAccountRequest) (violations []*e
 		violations = append(violations, fieldViolation("password", err))
 	}
 
-	if err := val.ValidateName(req.GetFirstname()); err != nil {
-		violations = append(violations, fieldViolation("first_name", err))
-	}
-
-	if err := val.ValidateName(req.GetLastname()); err != nil {
-		violations = append(violations, fieldViolation("last_name", err))
-	}
-
-	if err := val.ValidateName(req.GetCity()); err != nil {
-		violations = append(violations, fieldViolation("city", err))
-	}
-
-	if len(req.GetZip()) < 4 {
-		violations = append(violations, fieldViolation("zip", errors.New("must be at least 4 characters long")))
-	}
-
 	return violations
 }
diff --git a/bff/gapi/rpc_create_account_info.go b/bff/gapi/rpc_create_account_info.go
new file mode 100644
index 0000000..36b556f
--- /dev/null
+++ b/bff/gapi/rpc_create_account_info.go
@@ -0,0 +1,113 @@
+package gapi
+
+import (
+	"context"
+	"database/sql"
+	"errors"
+	"fmt"
+	"log/slog"
+	"time"
+
+	db "github.com/itsscb/df/bff/db/sqlc"
+	"github.com/itsscb/df/bff/pb"
+	"github.com/itsscb/df/bff/val"
+	"google.golang.org/genproto/googleapis/rpc/errdetails"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+)
+
+func (server *Server) CreateAccountInfo(ctx context.Context, req *pb.CreateAccountInfoRequest) (*pb.CreateAccountInfoResponse, error) {
+	authPayload, err := server.authorizeUser(ctx)
+	if err != nil {
+		return nil, unauthenticatedError(err)
+	}
+
+	violations := validateCreateAccountInfoRequest(req)
+	if violations != nil {
+		return nil, invalidArgumentError(violations)
+	}
+
+	account, err := server.store.GetAccount(ctx, req.GetAccountId())
+	if err != nil {
+		slog.Error("create_account_info (get account)", slog.Int64("invoked_by", int64(req.GetAccountId())), slog.String("error", err.Error()))
+		return nil, status.Error(codes.Internal, "failed to get account")
+	}
+
+	admin := server.isAdmin(ctx, authPayload)
+
+	if authPayload.AccountID != account.ID {
+		if !admin {
+			return nil, status.Error(codes.NotFound, "account not found")
+		}
+	}
+
+	if !account.EmailVerified.Bool {
+		if !admin {
+			return nil, status.Error(codes.Unauthenticated, "account not verified")
+		}
+	}
+
+	ai, err := server.store.GetAccountInfo(ctx, req.GetAccountId())
+	if err == nil {
+		fmt.Printf("%#v", ai)
+		return nil, status.Error(codes.AlreadyExists, "account_info already exists for this account")
+	}
+
+	arg := db.CreateAccountInfoParams{
+		AccountID: req.GetAccountId(),
+		Firstname: req.GetFirstname(),
+		Lastname:  req.GetLastname(),
+		Street:    req.GetStreet(),
+		City:      req.GetCity(),
+		Zip:       req.GetZip(),
+		Country:   req.GetCountry(),
+		Phone: sql.NullString{
+			Valid:  req.GetPhone() != "",
+			String: req.GetPhone(),
+		},
+		Birthday: req.GetBirthday().AsTime(),
+		PrivacyAccepted: sql.NullBool{
+			Valid: req.PrivacyAccepted != nil,
+			Bool:  req.GetPrivacyAccepted(),
+		},
+		PrivacyAcceptedDate: sql.NullTime{
+			Valid: req.PrivacyAccepted != nil,
+			Time:  time.Now(),
+		},
+	}
+
+	account_info, err := server.store.CreateAccountInfo(ctx, arg)
+	if err != nil {
+		slog.Error("create_account_info (db)", slog.Int64("invoked_by", int64(req.GetAccountId())), slog.String("error", err.Error()))
+		return nil, status.Error(codes.Internal, "failed to create account info")
+	}
+
+	rsp := &pb.CreateAccountInfoResponse{
+		AccountInfo: convertAccountInfo(account_info),
+	}
+
+	return rsp, nil
+}
+
+func validateCreateAccountInfoRequest(req *pb.CreateAccountInfoRequest) (violations []*errdetails.BadRequest_FieldViolation) {
+	if !val.IsValidName(req.GetFirstname()) {
+		violations = append(violations, fieldViolation("firstname", errors.New("invalid input")))
+	}
+	if !val.IsValidName(req.GetLastname()) {
+		violations = append(violations, fieldViolation("lastname", errors.New("invalid input")))
+	}
+	if !val.IsValidAlphaNumSpace(req.GetStreet()) {
+		violations = append(violations, fieldViolation("street", errors.New("invalid input")))
+	}
+	if !val.IsValidAlphaNumSpace(req.GetZip()) {
+		violations = append(violations, fieldViolation("zip", errors.New("invalid input")))
+	}
+	if !val.IsValidName(req.GetCity()) {
+		violations = append(violations, fieldViolation("city", errors.New("invalid input")))
+	}
+	if !val.IsValidName(req.GetCountry()) {
+		violations = append(violations, fieldViolation("country", errors.New("invalid input")))
+	}
+
+	return violations
+}
diff --git a/bff/gapi/rpc_get_account_info.go b/bff/gapi/rpc_get_account_info.go
new file mode 100644
index 0000000..d701b85
--- /dev/null
+++ b/bff/gapi/rpc_get_account_info.go
@@ -0,0 +1,54 @@
+package gapi
+
+import (
+	"context"
+	"database/sql"
+	"errors"
+	"log/slog"
+
+	"github.com/itsscb/df/bff/pb"
+	"google.golang.org/genproto/googleapis/rpc/errdetails"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+)
+
+func (server *Server) GetAccountInfo(ctx context.Context, req *pb.GetAccountInfoRequest) (*pb.GetAccountInfoResponse, error) {
+	authPayload, err := server.authorizeUser(ctx)
+	if err != nil {
+		return nil, unauthenticatedError(err)
+	}
+
+	violations := validateGetAccountInfoRequest(req)
+	if violations != nil {
+		return nil, invalidArgumentError(violations)
+	}
+
+	account, err := server.store.GetAccountInfo(ctx, req.GetAccountId())
+	if err != nil {
+		if errors.Is(err, sql.ErrNoRows) {
+			return nil, status.Errorf(codes.NotFound, "account not found")
+		}
+		slog.Error("get_account (db)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("account_id", int64(req.GetAccountId())), slog.String("error", err.Error()))
+		return nil, status.Error(codes.Internal, "failed to get account")
+	}
+
+	if authPayload.AccountID != account.AccountID {
+		if !server.isAdmin(ctx, authPayload) {
+			return nil, status.Error(codes.NotFound, "account not found")
+		}
+	}
+
+	rsp := &pb.GetAccountInfoResponse{
+		AccountInfo: convertAccountInfo(account),
+	}
+
+	return rsp, nil
+}
+
+func validateGetAccountInfoRequest(req *pb.GetAccountInfoRequest) (violations []*errdetails.BadRequest_FieldViolation) {
+	if req.GetAccountId() < 1 {
+		violations = append(violations, fieldViolation("id", errors.New("must be greater than 0")))
+	}
+
+	return violations
+}
diff --git a/bff/gapi/rpc_update_account.go b/bff/gapi/rpc_update_account.go
index 0719a48..83bef20 100644
--- a/bff/gapi/rpc_update_account.go
+++ b/bff/gapi/rpc_update_account.go
@@ -4,6 +4,7 @@ import (
 	"context"
 	"database/sql"
 	"errors"
+	"fmt"
 	"log/slog"
 
 	db "github.com/itsscb/df/bff/db/sqlc"
@@ -26,74 +27,49 @@ func (server *Server) UpdateAccount(ctx context.Context, req *pb.UpdateAccountRe
 		return nil, invalidArgumentError(violations)
 	}
 
-	if authPayload.AccountID != req.GetId() {
+	if authPayload.AccountID != req.GetAccountId() {
 		if !server.isAdmin(ctx, authPayload) {
 			return nil, status.Error(codes.NotFound, "account not found")
 		}
 	}
 
-	account, err := server.store.GetAccount(ctx, req.GetId())
+	_, err = server.store.GetAccount(ctx, req.GetAccountId())
 	if err != nil {
 		return nil, status.Error(codes.NotFound, "account not found")
 	}
 
-	arg := db.UpdateAccountTxParams{
-		ID:      req.GetId(),
-		Changer: account.Email,
-		Email: sql.NullString{
-			Valid:  req.GetEmail() != "",
-			String: req.GetEmail(),
-		},
-		Firstname: sql.NullString{
-			Valid:  req.GetFirstname() != "",
-			String: req.GetFirstname(),
-		},
-		Lastname: sql.NullString{
-			Valid:  req.GetLastname() != "",
-			String: req.GetLastname(),
-		},
-		City: sql.NullString{
-			Valid:  req.GetCity() != "",
-			String: req.GetCity(),
-		},
-		Zip: sql.NullString{
-			Valid:  req.GetZip() != "",
-			String: req.GetZip(),
-		},
-		Street: sql.NullString{
-			Valid:  req.GetStreet() != "",
-			String: req.GetStreet(),
-		},
-		Country: sql.NullString{
-			Valid:  req.GetCountry() != "",
-			String: req.GetCountry(),
-		},
-		Phone: sql.NullString{
-			Valid:  req.GetPhone() != "",
-			String: req.GetPhone(),
-		},
-		Birthday: sql.NullTime{
-			Valid: req.GetBirthday().IsValid(),
-			Time:  req.GetBirthday().AsTime(),
-		},
-	}
-
+	var hashedPassword string
 	if req.Password != nil {
-		hashedPassword, err := util.HashPassword(req.GetPassword())
+		hashedPassword, err = util.HashPassword(req.GetPassword())
 		if err != nil {
-			slog.Error("update_account (hash_password)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("account_id", int64(req.GetId())), slog.String("error", err.Error()))
-			return nil, status.Error(codes.Internal, "failed to hash password")
-		}
-
-		arg.Passwordhash = sql.NullString{
-			Valid:  true,
-			String: hashedPassword,
+			slog.Error("create_account (hash_password)", slog.String("invoked_by", req.GetEmail()), slog.String("error", err.Error()))
+			return nil, status.Errorf(codes.Internal, "failed to hash password: %s", err)
 		}
 	}
 
-	account, err = server.store.UpdateAccountTx(ctx, arg)
+	arg := db.UpdateAccountTxParams{
+		UpdateAccountParams: db.UpdateAccountParams{
+			ID: req.GetAccountId(),
+			Email: sql.NullString{
+				Valid:  req.Email != nil,
+				String: req.GetEmail(),
+			},
+			Passwordhash: sql.NullString{
+				Valid:  req.Password != nil,
+				String: hashedPassword,
+			},
+		},
+	}
+
+	if req.Email != nil {
+		arg.AfterUpdate = func(a db.Account) error {
+			return server.mailSender.SendEmail("Verify your E-Mail Address", fmt.Sprintf("Hello %s,</br></br>please verify your E-Mail Addres by clicking on the following link:</br><a href=\"http://localhost:8080/v1/verify_email/%d/%s\">Verification Link</a></br></br></br>Your Team of DF", req.GetEmail(), a.ID, a.SecretKey.String), []string{req.GetEmail()}, nil, nil, nil)
+		}
+	}
+
+	account, err := server.store.UpdateAccountTx(ctx, arg)
 	if err != nil {
-		slog.Error("update_account (db)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("account_id", int64(req.GetId())), slog.String("error", err.Error()))
+		slog.Error("update_account (db)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("account_id", int64(req.GetAccountId())), slog.String("error", err.Error()))
 		return nil, status.Error(codes.Internal, "failed to update account")
 	}
 
@@ -105,44 +81,15 @@ func (server *Server) UpdateAccount(ctx context.Context, req *pb.UpdateAccountRe
 }
 
 func validateUpdateAccountRequest(req *pb.UpdateAccountRequest) (violations []*errdetails.BadRequest_FieldViolation) {
-	if req.GetId() < 1 {
+	if req.GetAccountId() < 1 {
 		violations = append(violations, fieldViolation("id", errors.New("must be greater than 0")))
 	}
+	if err := val.ValidateEmail(req.GetEmail()); err != nil {
+		violations = append(violations, fieldViolation("email", err))
+	}
 
-	if req.GetEmail() != "" {
-		if err := val.ValidateEmail(req.GetEmail()); err != nil {
-			violations = append(violations, fieldViolation("email", err))
-		}
-	}
-	if req.GetPassword() != "" {
-		if err := val.ValidatePassword(req.GetPassword()); err != nil {
-			violations = append(violations, fieldViolation("password", err))
-		}
-	}
-	if req.GetFirstname() != "" {
-		if err := val.ValidateName(req.GetFirstname()); err != nil {
-			violations = append(violations, fieldViolation("first_name", err))
-		}
-	}
-	if req.GetLastname() != "" {
-		if err := val.ValidateName(req.GetLastname()); err != nil {
-			violations = append(violations, fieldViolation("last_name", err))
-		}
-	}
-	if req.GetCity() != "" {
-		if err := val.ValidateName(req.GetCity()); err != nil {
-			violations = append(violations, fieldViolation("city", err))
-		}
-	}
-	if req.GetZip() != "" {
-		if err := val.ValidateName(req.GetZip()); err != nil {
-			violations = append(violations, fieldViolation("zip", err))
-		}
-	}
-	if req.GetStreet() != "" {
-		if err := val.ValidateStreet(req.GetStreet()); err != nil {
-			violations = append(violations, fieldViolation("street", err))
-		}
+	if err := val.ValidatePassword(req.GetPassword()); err != nil {
+		violations = append(violations, fieldViolation("password", err))
 	}
 
 	return violations
diff --git a/bff/gapi/rpc_update_account_info.go b/bff/gapi/rpc_update_account_info.go
new file mode 100644
index 0000000..64b0bfd
--- /dev/null
+++ b/bff/gapi/rpc_update_account_info.go
@@ -0,0 +1,121 @@
+package gapi
+
+import (
+	"context"
+	"database/sql"
+	"errors"
+	"log/slog"
+
+	db "github.com/itsscb/df/bff/db/sqlc"
+	"github.com/itsscb/df/bff/pb"
+	"github.com/itsscb/df/bff/val"
+	"google.golang.org/genproto/googleapis/rpc/errdetails"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+)
+
+func (server *Server) UpdateAccountInfo(ctx context.Context, req *pb.UpdateAccountInfoRequest) (*pb.UpdateAccountInfoResponse, error) {
+	authPayload, err := server.authorizeUser(ctx)
+	if err != nil {
+		return nil, unauthenticatedError(err)
+	}
+
+	violations := validateUpdateAccountInfoRequest(req)
+	if violations != nil {
+		return nil, invalidArgumentError(violations)
+	}
+
+	if authPayload.AccountID != req.GetAccountId() {
+		if !server.isAdmin(ctx, authPayload) {
+			return nil, status.Error(codes.NotFound, "account not found")
+		}
+	}
+
+	changer, err := server.store.GetAccount(ctx, authPayload.AccountID)
+	if err != nil {
+		return nil, status.Error(codes.NotFound, "account not found")
+	}
+
+	arg := db.UpdateAccountInfoTxParams{
+		AccountID: req.GetAccountId(),
+		Changer:   changer.Email,
+		Firstname: sql.NullString{
+			Valid:  req.GetFirstname() != "",
+			String: req.GetFirstname(),
+		},
+		Lastname: sql.NullString{
+			Valid:  req.GetLastname() != "",
+			String: req.GetLastname(),
+		},
+		City: sql.NullString{
+			Valid:  req.GetCity() != "",
+			String: req.GetCity(),
+		},
+		Zip: sql.NullString{
+			Valid:  req.GetZip() != "",
+			String: req.GetZip(),
+		},
+		Street: sql.NullString{
+			Valid:  req.GetStreet() != "",
+			String: req.GetStreet(),
+		},
+		Country: sql.NullString{
+			Valid:  req.GetCountry() != "",
+			String: req.GetCountry(),
+		},
+		Phone: sql.NullString{
+			Valid:  req.GetPhone() != "",
+			String: req.GetPhone(),
+		},
+		Birthday: sql.NullTime{
+			Valid: req.GetBirthday().IsValid(),
+			Time:  req.GetBirthday().AsTime(),
+		},
+	}
+
+	account_info, err := server.store.UpdateAccountInfoTx(ctx, arg)
+	if err != nil {
+		slog.Error("update_account (db)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("account_id", int64(req.GetAccountId())), slog.String("error", err.Error()))
+		return nil, status.Error(codes.Internal, "failed to update account")
+	}
+
+	rsp := &pb.UpdateAccountInfoResponse{
+		AccountInfo: convertAccountInfo(account_info),
+	}
+
+	return rsp, nil
+}
+
+func validateUpdateAccountInfoRequest(req *pb.UpdateAccountInfoRequest) (violations []*errdetails.BadRequest_FieldViolation) {
+	if req.GetAccountId() < 1 {
+		violations = append(violations, fieldViolation("id", errors.New("must be greater than 0")))
+	}
+
+	if req.GetFirstname() != "" {
+		if err := val.ValidateName(req.GetFirstname()); err != nil {
+			violations = append(violations, fieldViolation("first_name", err))
+		}
+	}
+	if req.GetLastname() != "" {
+		if err := val.ValidateName(req.GetLastname()); err != nil {
+			violations = append(violations, fieldViolation("last_name", err))
+		}
+	}
+	if req.GetCity() != "" {
+		if err := val.ValidateName(req.GetCity()); err != nil {
+			violations = append(violations, fieldViolation("city", err))
+		}
+	}
+	if req.GetZip() != "" {
+		if err := val.ValidateName(req.GetZip()); err != nil {
+			violations = append(violations, fieldViolation("zip", err))
+		}
+	}
+	if req.GetStreet() != "" {
+		if err := val.ValidateStreet(req.GetStreet()); err != nil {
+			violations = append(violations, fieldViolation("street", err))
+		}
+	}
+
+	return violations
+}
diff --git a/bff/gapi/rpc_update_account_privacy.go b/bff/gapi/rpc_update_account_privacy.go
index ded2ff1..1fe72ba 100644
--- a/bff/gapi/rpc_update_account_privacy.go
+++ b/bff/gapi/rpc_update_account_privacy.go
@@ -24,12 +24,12 @@ func (server *Server) UpdateAccountPrivacy(ctx context.Context, req *pb.UpdateAc
 		return nil, invalidArgumentError(violations)
 	}
 
-	account, err := server.store.GetAccount(ctx, req.GetId())
+	account, err := server.store.GetAccount(ctx, req.GetAccountId())
 	if err != nil {
 		if errors.Is(err, sql.ErrNoRows) {
 			return nil, status.Errorf(codes.NotFound, "account not found")
 		}
-		slog.Error("update_account_privacy (get_account)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("account_id", int64(req.GetId())), slog.String("error", err.Error()))
+		slog.Error("update_account_privacy (get_account)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("account_id", int64(req.GetAccountId())), slog.String("error", err.Error()))
 		return nil, status.Errorf(codes.Internal, "failed to get account")
 	}
 
@@ -42,25 +42,25 @@ func (server *Server) UpdateAccountPrivacy(ctx context.Context, req *pb.UpdateAc
 
 	arg := db.UpdateAccountPrivacyTxParams{
 		Changer:         account.Email,
-		ID:              req.GetId(),
+		ID:              req.GetAccountId(),
 		PrivacyAccepted: &privacyAccepted,
 	}
 
-	account, err = server.store.UpdateAccountPrivacyTx(ctx, arg)
+	account_info, err := server.store.UpdateAccountPrivacyTx(ctx, arg)
 	if err != nil {
-		slog.Error("update_account_privacy (db)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("account_id", int64(req.GetId())), slog.String("error", err.Error()))
+		slog.Error("update_account_privacy (db)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("account_id", int64(req.GetAccountId())), slog.String("error", err.Error()))
 		return nil, status.Error(codes.Internal, "failed to update account privacy")
 	}
 
 	rsp := &pb.UpdateAccountPrivacyResponse{
-		Account: convertAccount(account),
+		AccountInfo: convertAccountInfo(account_info),
 	}
 
 	return rsp, nil
 }
 
 func validateUpdateAccountPrivacyRequest(req *pb.UpdateAccountPrivacyRequest) (violations []*errdetails.BadRequest_FieldViolation) {
-	if req.GetId() < 1 {
+	if req.GetAccountId() < 1 {
 		violations = append(violations, fieldViolation("id", errors.New("must be greater than 0")))
 	}
 	return violations
diff --git a/bff/main.go b/bff/main.go
index bb672a2..e4233d3 100644
--- a/bff/main.go
+++ b/bff/main.go
@@ -13,7 +13,6 @@ import (
 
 	"github.com/gin-gonic/gin"
 	"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
-	"github.com/itsscb/df/bff/api"
 	db "github.com/itsscb/df/bff/db/sqlc"
 	"github.com/itsscb/df/bff/gapi"
 	"github.com/itsscb/df/bff/gw"
@@ -158,15 +157,3 @@ func runGatewayServer(config util.Config, store db.Store, swaggerFS http.FileSys
 		log.Fatal("cannot start HTTP gateway server")
 	}
 }
-
-func runHTTPServer(config util.Config, store db.Store, swaggerFS http.FileSystem) {
-	server, err := api.NewServer(config, store, swaggerFS)
-	if err != nil {
-		log.Fatalf("could not start server: %s", err)
-	}
-
-	err = server.Start(config.HTTPServerAddress)
-	if err != nil {
-		log.Fatal("cannot start server:", err)
-	}
-}
diff --git a/bff/pb/account.pb.go b/bff/pb/account.pb.go
index caca720..5526472 100644
--- a/bff/pb/account.pb.go
+++ b/bff/pb/account.pb.go
@@ -29,21 +29,11 @@ type Account struct {
 
 	Id                  uint64                 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
 	Email               string                 `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"`
-	Firstname           string                 `protobuf:"bytes,3,opt,name=firstname,proto3" json:"firstname,omitempty"`
-	Lastname            string                 `protobuf:"bytes,4,opt,name=lastname,proto3" json:"lastname,omitempty"`
-	Street              string                 `protobuf:"bytes,5,opt,name=street,proto3" json:"street,omitempty"`
-	City                string                 `protobuf:"bytes,6,opt,name=city,proto3" json:"city,omitempty"`
-	Zip                 string                 `protobuf:"bytes,7,opt,name=zip,proto3" json:"zip,omitempty"`
-	Country             string                 `protobuf:"bytes,8,opt,name=country,proto3" json:"country,omitempty"`
-	Birthday            *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=birthday,proto3" json:"birthday,omitempty"`
-	Phone               string                 `protobuf:"bytes,10,opt,name=phone,proto3" json:"phone,omitempty"`
-	PrivacyAccepted     bool                   `protobuf:"varint,11,opt,name=privacy_accepted,json=privacyAccepted,proto3" json:"privacy_accepted,omitempty"`
+	SecretKey           *string                `protobuf:"bytes,3,opt,name=secret_key,json=secretKey,proto3,oneof" json:"secret_key,omitempty"`
+	EmailVerifiedTime   *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=email_verified_time,json=emailVerifiedTime,proto3" json:"email_verified_time,omitempty"`
+	EmailVerified       bool                   `protobuf:"varint,10,opt,name=email_verified,json=emailVerified,proto3" json:"email_verified,omitempty"`
 	PrivacyAcceptedDate *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=privacy_accepted_date,json=privacyAcceptedDate,proto3" json:"privacy_accepted_date,omitempty"`
 	PermissionLevel     int32                  `protobuf:"varint,13,opt,name=permission_level,json=permissionLevel,proto3" json:"permission_level,omitempty"`
-	Creator             string                 `protobuf:"bytes,14,opt,name=creator,proto3" json:"creator,omitempty"`
-	Created             *timestamppb.Timestamp `protobuf:"bytes,15,opt,name=created,proto3" json:"created,omitempty"`
-	Changer             string                 `protobuf:"bytes,16,opt,name=changer,proto3" json:"changer,omitempty"`
-	Changed             *timestamppb.Timestamp `protobuf:"bytes,17,opt,name=changed,proto3" json:"changed,omitempty"`
 }
 
 func (x *Account) Reset() {
@@ -92,65 +82,23 @@ func (x *Account) GetEmail() string {
 	return ""
 }
 
-func (x *Account) GetFirstname() string {
-	if x != nil {
-		return x.Firstname
+func (x *Account) GetSecretKey() string {
+	if x != nil && x.SecretKey != nil {
+		return *x.SecretKey
 	}
 	return ""
 }
 
-func (x *Account) GetLastname() string {
+func (x *Account) GetEmailVerifiedTime() *timestamppb.Timestamp {
 	if x != nil {
-		return x.Lastname
-	}
-	return ""
-}
-
-func (x *Account) GetStreet() string {
-	if x != nil {
-		return x.Street
-	}
-	return ""
-}
-
-func (x *Account) GetCity() string {
-	if x != nil {
-		return x.City
-	}
-	return ""
-}
-
-func (x *Account) GetZip() string {
-	if x != nil {
-		return x.Zip
-	}
-	return ""
-}
-
-func (x *Account) GetCountry() string {
-	if x != nil {
-		return x.Country
-	}
-	return ""
-}
-
-func (x *Account) GetBirthday() *timestamppb.Timestamp {
-	if x != nil {
-		return x.Birthday
+		return x.EmailVerifiedTime
 	}
 	return nil
 }
 
-func (x *Account) GetPhone() string {
+func (x *Account) GetEmailVerified() bool {
 	if x != nil {
-		return x.Phone
-	}
-	return ""
-}
-
-func (x *Account) GetPrivacyAccepted() bool {
-	if x != nil {
-		return x.PrivacyAccepted
+		return x.EmailVerified
 	}
 	return false
 }
@@ -169,34 +117,6 @@ func (x *Account) GetPermissionLevel() int32 {
 	return 0
 }
 
-func (x *Account) GetCreator() string {
-	if x != nil {
-		return x.Creator
-	}
-	return ""
-}
-
-func (x *Account) GetCreated() *timestamppb.Timestamp {
-	if x != nil {
-		return x.Created
-	}
-	return nil
-}
-
-func (x *Account) GetChanger() string {
-	if x != nil {
-		return x.Changer
-	}
-	return ""
-}
-
-func (x *Account) GetChanged() *timestamppb.Timestamp {
-	if x != nil {
-		return x.Changed
-	}
-	return nil
-}
-
 var File_account_proto protoreflect.FileDescriptor
 
 var file_account_proto_rawDesc = []byte{
@@ -206,84 +126,64 @@ var file_account_proto_rawDesc = []byte{
 	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e,
 	0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f,
 	0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, 0x09, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x72, 0x6f, 0x74, 0x6f, 0x22, 0xef, 0x06, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
 	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64,
 	0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e,
-	0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74,
-	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65,
-	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79,
-	0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x10, 0x0a, 0x03,
-	0x7a, 0x69, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x7a, 0x69, 0x70, 0x12, 0x18,
-	0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x53, 0x0a, 0x08, 0x62, 0x69, 0x72, 0x74,
-	0x68, 0x64, 0x61, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
-	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
-	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x31, 0x39,
-	0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30,
-	0x30, 0x5a, 0x22, 0x52, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x12, 0x14, 0x0a,
-	0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68,
-	0x6f, 0x6e, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61,
-	0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x70,
-	0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x12, 0x6b,
-	0x0a, 0x15, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74,
-	0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
-	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
-	0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16,
-	0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30,
-	0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x41,
-	0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x70,
-	0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18,
-	0x0d, 0x20, 0x01, 0x28, 0x05, 0x42, 0x23, 0x92, 0x41, 0x20, 0x32, 0x1e, 0x44, 0x65, 0x66, 0x61,
-	0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x30, 0x20, 0x28, 0x6e, 0x6f, 0x6e, 0x2d, 0x70, 0x72,
-	0x69, 0x76, 0x69, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x64, 0x29, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x6d,
-	0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63,
-	0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72,
-	0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x51, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
-	0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
-	0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31,
-	0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52,
-	0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e,
-	0x67, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67,
-	0x65, 0x72, 0x12, 0x51, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x11, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42,
-	0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30,
-	0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52, 0x07, 0x63, 0x68,
-	0x61, 0x6e, 0x67, 0x65, 0x64, 0x3a, 0xbd, 0x03, 0x92, 0x41, 0xb9, 0x03, 0x0a, 0x09, 0x2a, 0x07,
-	0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0xab, 0x03, 0x7b, 0x22, 0x69, 0x64, 0x22, 0x3a,
-	0x20, 0x22, 0x31, 0x22, 0x2c, 0x22, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x6a,
-	0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e,
-	0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65,
-	0x22, 0x3a, 0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x6c, 0x61, 0x73, 0x74,
-	0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x6f, 0x65, 0x22, 0x2c, 0x20, 0x22, 0x70,
-	0x68, 0x6f, 0x6e, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, 0x65,
-	0x65, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x65, 0x61, 0x74, 0x68, 0x20, 0x53, 0x74, 0x61, 0x72,
-	0x20, 0x32, 0x22, 0x2c, 0x20, 0x22, 0x7a, 0x69, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x38, 0x31,
-	0x35, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x77,
-	0x20, 0x59, 0x6f, 0x72, 0x6b, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79,
-	0x22, 0x3a, 0x20, 0x22, 0x55, 0x53, 0x41, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72, 0x74, 0x68,
-	0x64, 0x61, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30,
-	0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x70,
-	0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x22,
-	0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63,
-	0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x22,
-	0x3a, 0x20, 0x22, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x54, 0x30, 0x30,
-	0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x72, 0x65, 0x61, 0x74,
-	0x6f, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65,
-	0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x72,
-	0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30,
-	0x2d, 0x30, 0x35, 0x54, 0x30, 0x32, 0x3a, 0x33, 0x30, 0x3a, 0x35, 0x33, 0x5a, 0x22, 0x2c, 0x20,
-	0x22, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e,
-	0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d,
-	0x22, 0x2c, 0x20, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32,
-	0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x32, 0x3a, 0x33, 0x30, 0x3a,
-	0x35, 0x33, 0x5a, 0x22, 0x7d, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
-	0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62,
-	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x22, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74,
+	0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x73, 0x65,
+	0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x12, 0x67, 0x0a, 0x13, 0x65, 0x6d,
+	0x61, 0x69, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d,
+	0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
+	0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d,
+	0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22,
+	0x52, 0x11, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54,
+	0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x76, 0x65, 0x72,
+	0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x6d, 0x61,
+	0x69, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x6b, 0x0a, 0x15, 0x70, 0x72,
+	0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x64,
+	0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x32, 0x30, 0x32,
+	0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30,
+	0x5a, 0x22, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70,
+	0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x70, 0x65, 0x72, 0x6d, 0x69,
+	0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x05, 0x42, 0x23, 0x92, 0x41, 0x20, 0x32, 0x1e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20,
+	0x69, 0x73, 0x20, 0x30, 0x20, 0x28, 0x6e, 0x6f, 0x6e, 0x2d, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c,
+	0x65, 0x64, 0x67, 0x65, 0x64, 0x29, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69,
+	0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0xbd, 0x03, 0x92, 0x41, 0xb9, 0x03, 0x0a, 0x09,
+	0x2a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0xab, 0x03, 0x7b, 0x22, 0x69, 0x64,
+	0x22, 0x3a, 0x20, 0x22, 0x31, 0x22, 0x2c, 0x22, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x3a, 0x20,
+	0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,
+	0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61,
+	0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x6c, 0x61,
+	0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x6f, 0x65, 0x22, 0x2c, 0x20,
+	0x22, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74,
+	0x72, 0x65, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x65, 0x61, 0x74, 0x68, 0x20, 0x53, 0x74,
+	0x61, 0x72, 0x20, 0x32, 0x22, 0x2c, 0x20, 0x22, 0x7a, 0x69, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x30,
+	0x38, 0x31, 0x35, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x4e,
+	0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x55, 0x53, 0x41, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72,
+	0x74, 0x68, 0x64, 0x61, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30,
+	0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20,
+	0x22, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65,
+	0x64, 0x22, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x76,
+	0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74,
+	0x65, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x54,
+	0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x72, 0x65,
+	0x61, 0x74, 0x6f, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65,
+	0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22,
+	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d,
+	0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x32, 0x3a, 0x33, 0x30, 0x3a, 0x35, 0x33, 0x5a, 0x22,
+	0x2c, 0x20, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f,
+	0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63,
+	0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x3a, 0x20,
+	0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x32, 0x3a, 0x33,
+	0x30, 0x3a, 0x35, 0x33, 0x5a, 0x22, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x65, 0x63, 0x72,
+	0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
+	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70,
+	0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -304,15 +204,13 @@ var file_account_proto_goTypes = []interface{}{
 	(*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp
 }
 var file_account_proto_depIdxs = []int32{
-	1, // 0: pb.Account.birthday:type_name -> google.protobuf.Timestamp
+	1, // 0: pb.Account.email_verified_time:type_name -> google.protobuf.Timestamp
 	1, // 1: pb.Account.privacy_accepted_date:type_name -> google.protobuf.Timestamp
-	1, // 2: pb.Account.created:type_name -> google.protobuf.Timestamp
-	1, // 3: pb.Account.changed:type_name -> google.protobuf.Timestamp
-	4, // [4:4] is the sub-list for method output_type
-	4, // [4:4] is the sub-list for method input_type
-	4, // [4:4] is the sub-list for extension type_name
-	4, // [4:4] is the sub-list for extension extendee
-	0, // [0:4] is the sub-list for field type_name
+	2, // [2:2] is the sub-list for method output_type
+	2, // [2:2] is the sub-list for method input_type
+	2, // [2:2] is the sub-list for extension type_name
+	2, // [2:2] is the sub-list for extension extendee
+	0, // [0:2] is the sub-list for field type_name
 }
 
 func init() { file_account_proto_init() }
@@ -334,6 +232,7 @@ func file_account_proto_init() {
 			}
 		}
 	}
+	file_account_proto_msgTypes[0].OneofWrappers = []interface{}{}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/bff/pb/account_info.pb.go b/bff/pb/account_info.pb.go
new file mode 100644
index 0000000..502699d
--- /dev/null
+++ b/bff/pb/account_info.pb.go
@@ -0,0 +1,346 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.31.0
+// 	protoc        v4.24.4
+// source: account_info.proto
+
+package pb
+
+import (
+	_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type AccountInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AccountId           uint64                 `protobuf:"varint,1,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"`
+	Firstname           string                 `protobuf:"bytes,3,opt,name=firstname,proto3" json:"firstname,omitempty"`
+	Lastname            string                 `protobuf:"bytes,4,opt,name=lastname,proto3" json:"lastname,omitempty"`
+	Street              string                 `protobuf:"bytes,5,opt,name=street,proto3" json:"street,omitempty"`
+	City                string                 `protobuf:"bytes,6,opt,name=city,proto3" json:"city,omitempty"`
+	Zip                 string                 `protobuf:"bytes,7,opt,name=zip,proto3" json:"zip,omitempty"`
+	Country             string                 `protobuf:"bytes,8,opt,name=country,proto3" json:"country,omitempty"`
+	Birthday            *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=birthday,proto3" json:"birthday,omitempty"`
+	Phone               string                 `protobuf:"bytes,10,opt,name=phone,proto3" json:"phone,omitempty"`
+	PrivacyAccepted     bool                   `protobuf:"varint,11,opt,name=privacy_accepted,json=privacyAccepted,proto3" json:"privacy_accepted,omitempty"`
+	PrivacyAcceptedDate *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=privacy_accepted_date,json=privacyAcceptedDate,proto3" json:"privacy_accepted_date,omitempty"`
+	PermissionLevel     int32                  `protobuf:"varint,13,opt,name=permission_level,json=permissionLevel,proto3" json:"permission_level,omitempty"`
+	Creator             string                 `protobuf:"bytes,14,opt,name=creator,proto3" json:"creator,omitempty"`
+	Created             *timestamppb.Timestamp `protobuf:"bytes,15,opt,name=created,proto3" json:"created,omitempty"`
+	Changer             string                 `protobuf:"bytes,16,opt,name=changer,proto3" json:"changer,omitempty"`
+	Changed             *timestamppb.Timestamp `protobuf:"bytes,17,opt,name=changed,proto3" json:"changed,omitempty"`
+}
+
+func (x *AccountInfo) Reset() {
+	*x = AccountInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_account_info_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AccountInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AccountInfo) ProtoMessage() {}
+
+func (x *AccountInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_account_info_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AccountInfo.ProtoReflect.Descriptor instead.
+func (*AccountInfo) Descriptor() ([]byte, []int) {
+	return file_account_info_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *AccountInfo) GetAccountId() uint64 {
+	if x != nil {
+		return x.AccountId
+	}
+	return 0
+}
+
+func (x *AccountInfo) GetFirstname() string {
+	if x != nil {
+		return x.Firstname
+	}
+	return ""
+}
+
+func (x *AccountInfo) GetLastname() string {
+	if x != nil {
+		return x.Lastname
+	}
+	return ""
+}
+
+func (x *AccountInfo) GetStreet() string {
+	if x != nil {
+		return x.Street
+	}
+	return ""
+}
+
+func (x *AccountInfo) GetCity() string {
+	if x != nil {
+		return x.City
+	}
+	return ""
+}
+
+func (x *AccountInfo) GetZip() string {
+	if x != nil {
+		return x.Zip
+	}
+	return ""
+}
+
+func (x *AccountInfo) GetCountry() string {
+	if x != nil {
+		return x.Country
+	}
+	return ""
+}
+
+func (x *AccountInfo) GetBirthday() *timestamppb.Timestamp {
+	if x != nil {
+		return x.Birthday
+	}
+	return nil
+}
+
+func (x *AccountInfo) GetPhone() string {
+	if x != nil {
+		return x.Phone
+	}
+	return ""
+}
+
+func (x *AccountInfo) GetPrivacyAccepted() bool {
+	if x != nil {
+		return x.PrivacyAccepted
+	}
+	return false
+}
+
+func (x *AccountInfo) GetPrivacyAcceptedDate() *timestamppb.Timestamp {
+	if x != nil {
+		return x.PrivacyAcceptedDate
+	}
+	return nil
+}
+
+func (x *AccountInfo) GetPermissionLevel() int32 {
+	if x != nil {
+		return x.PermissionLevel
+	}
+	return 0
+}
+
+func (x *AccountInfo) GetCreator() string {
+	if x != nil {
+		return x.Creator
+	}
+	return ""
+}
+
+func (x *AccountInfo) GetCreated() *timestamppb.Timestamp {
+	if x != nil {
+		return x.Created
+	}
+	return nil
+}
+
+func (x *AccountInfo) GetChanger() string {
+	if x != nil {
+		return x.Changer
+	}
+	return ""
+}
+
+func (x *AccountInfo) GetChanged() *timestamppb.Timestamp {
+	if x != nil {
+		return x.Changed
+	}
+	return nil
+}
+
+var File_account_info_proto protoreflect.FileDescriptor
+
+var file_account_info_proto_rawDesc = []byte{
+	0x0a, 0x12, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
+	0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f,
+	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x97, 0x09, 0x0a, 0x0b, 0x41, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73,
+	0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72,
+	0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61,
+	0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61,
+	0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69,
+	0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x10,
+	0x0a, 0x03, 0x7a, 0x69, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x7a, 0x69, 0x70,
+	0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x53, 0x0a, 0x08, 0x62, 0x69,
+	0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
+	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22,
+	0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30,
+	0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x12,
+	0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79,
+	0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x0f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64,
+	0x12, 0x6b, 0x0a, 0x15, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65,
+	0x70, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+	0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18,
+	0x4a, 0x16, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30,
+	0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63,
+	0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a,
+	0x10, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65,
+	0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x42, 0x23, 0x92, 0x41, 0x20, 0x32, 0x1e, 0x44, 0x65,
+	0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x30, 0x20, 0x28, 0x6e, 0x6f, 0x6e, 0x2d,
+	0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x64, 0x29, 0x52, 0x0f, 0x70, 0x65,
+	0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x18, 0x0a,
+	0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
+	0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x51, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
+	0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x32, 0x30, 0x32, 0x33,
+	0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a,
+	0x22, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68,
+	0x61, 0x6e, 0x67, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61,
+	0x6e, 0x67, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18,
+	0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+	0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30,
+	0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52, 0x07,
+	0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x3a, 0xa9, 0x03, 0x92, 0x41, 0xa5, 0x03, 0x0a, 0x0d,
+	0x2a, 0x0b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x32, 0x93, 0x03,
+	0x7b, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22,
+	0x31, 0x22, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a,
+	0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61,
+	0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x6f, 0x65, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x68, 0x6f,
+	0x6e, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74,
+	0x22, 0x3a, 0x20, 0x22, 0x44, 0x65, 0x61, 0x74, 0x68, 0x20, 0x53, 0x74, 0x61, 0x72, 0x20, 0x32,
+	0x22, 0x2c, 0x20, 0x22, 0x7a, 0x69, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x38, 0x31, 0x35, 0x22,
+	0x2c, 0x20, 0x22, 0x63, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x77, 0x20, 0x59,
+	0x6f, 0x72, 0x6b, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a,
+	0x20, 0x22, 0x55, 0x53, 0x41, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61,
+	0x79, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54,
+	0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69,
+	0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20,
+	0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f,
+	0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x22, 0x3a, 0x20,
+	0x22, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x54, 0x30, 0x30, 0x3a, 0x30,
+	0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72,
+	0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61,
+	0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30,
+	0x35, 0x54, 0x30, 0x32, 0x3a, 0x33, 0x30, 0x3a, 0x35, 0x33, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x63,
+	0x68, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64,
+	0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c,
+	0x20, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32,
+	0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x32, 0x3a, 0x33, 0x30, 0x3a, 0x35, 0x33,
+	0x5a, 0x22, 0x7d, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62, 0x62, 0x06,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_account_info_proto_rawDescOnce sync.Once
+	file_account_info_proto_rawDescData = file_account_info_proto_rawDesc
+)
+
+func file_account_info_proto_rawDescGZIP() []byte {
+	file_account_info_proto_rawDescOnce.Do(func() {
+		file_account_info_proto_rawDescData = protoimpl.X.CompressGZIP(file_account_info_proto_rawDescData)
+	})
+	return file_account_info_proto_rawDescData
+}
+
+var file_account_info_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_account_info_proto_goTypes = []interface{}{
+	(*AccountInfo)(nil),           // 0: pb.AccountInfo
+	(*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp
+}
+var file_account_info_proto_depIdxs = []int32{
+	1, // 0: pb.AccountInfo.birthday:type_name -> google.protobuf.Timestamp
+	1, // 1: pb.AccountInfo.privacy_accepted_date:type_name -> google.protobuf.Timestamp
+	1, // 2: pb.AccountInfo.created:type_name -> google.protobuf.Timestamp
+	1, // 3: pb.AccountInfo.changed:type_name -> google.protobuf.Timestamp
+	4, // [4:4] is the sub-list for method output_type
+	4, // [4:4] is the sub-list for method input_type
+	4, // [4:4] is the sub-list for extension type_name
+	4, // [4:4] is the sub-list for extension extendee
+	0, // [0:4] is the sub-list for field type_name
+}
+
+func init() { file_account_info_proto_init() }
+func file_account_info_proto_init() {
+	if File_account_info_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_account_info_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AccountInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_account_info_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   1,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_account_info_proto_goTypes,
+		DependencyIndexes: file_account_info_proto_depIdxs,
+		MessageInfos:      file_account_info_proto_msgTypes,
+	}.Build()
+	File_account_info_proto = out.File
+	file_account_info_proto_rawDesc = nil
+	file_account_info_proto_goTypes = nil
+	file_account_info_proto_depIdxs = nil
+}
diff --git a/bff/pb/rpc_create_account.pb.go b/bff/pb/rpc_create_account.pb.go
index 88fd4a3..2c03e95 100644
--- a/bff/pb/rpc_create_account.pb.go
+++ b/bff/pb/rpc_create_account.pb.go
@@ -10,7 +10,6 @@ import (
 	_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
 	reflect "reflect"
 	sync "sync"
 )
@@ -27,17 +26,8 @@ type CreateAccountRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Email           string                 `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"`
-	Password        string                 `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
-	Firstname       string                 `protobuf:"bytes,3,opt,name=firstname,proto3" json:"firstname,omitempty"`
-	Lastname        string                 `protobuf:"bytes,4,opt,name=lastname,proto3" json:"lastname,omitempty"`
-	Street          string                 `protobuf:"bytes,5,opt,name=street,proto3" json:"street,omitempty"`
-	City            string                 `protobuf:"bytes,6,opt,name=city,proto3" json:"city,omitempty"`
-	Zip             string                 `protobuf:"bytes,7,opt,name=zip,proto3" json:"zip,omitempty"`
-	Country         string                 `protobuf:"bytes,8,opt,name=country,proto3" json:"country,omitempty"`
-	Phone           string                 `protobuf:"bytes,9,opt,name=phone,proto3" json:"phone,omitempty"`
-	Birthday        *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=birthday,proto3" json:"birthday,omitempty"`
-	PrivacyAccepted *bool                  `protobuf:"varint,11,opt,name=privacy_accepted,json=privacyAccepted,proto3,oneof" json:"privacy_accepted,omitempty"`
+	Email    string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"`
+	Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
 }
 
 func (x *CreateAccountRequest) Reset() {
@@ -86,69 +76,6 @@ func (x *CreateAccountRequest) GetPassword() string {
 	return ""
 }
 
-func (x *CreateAccountRequest) GetFirstname() string {
-	if x != nil {
-		return x.Firstname
-	}
-	return ""
-}
-
-func (x *CreateAccountRequest) GetLastname() string {
-	if x != nil {
-		return x.Lastname
-	}
-	return ""
-}
-
-func (x *CreateAccountRequest) GetStreet() string {
-	if x != nil {
-		return x.Street
-	}
-	return ""
-}
-
-func (x *CreateAccountRequest) GetCity() string {
-	if x != nil {
-		return x.City
-	}
-	return ""
-}
-
-func (x *CreateAccountRequest) GetZip() string {
-	if x != nil {
-		return x.Zip
-	}
-	return ""
-}
-
-func (x *CreateAccountRequest) GetCountry() string {
-	if x != nil {
-		return x.Country
-	}
-	return ""
-}
-
-func (x *CreateAccountRequest) GetPhone() string {
-	if x != nil {
-		return x.Phone
-	}
-	return ""
-}
-
-func (x *CreateAccountRequest) GetBirthday() *timestamppb.Timestamp {
-	if x != nil {
-		return x.Birthday
-	}
-	return nil
-}
-
-func (x *CreateAccountRequest) GetPrivacyAccepted() bool {
-	if x != nil && x.PrivacyAccepted != nil {
-		return *x.PrivacyAccepted
-	}
-	return false
-}
-
 type CreateAccountResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -200,71 +127,34 @@ var File_rpc_create_account_proto protoreflect.FileDescriptor
 
 var file_rpc_create_account_proto_rawDesc = []byte{
 	0x0a, 0x18, 0x72, 0x70, 0x63, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x1f,
-	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
-	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e,
-	0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e,
-	0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
-	0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfb,
-	0x05, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a,
-	0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72,
-	0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69,
-	0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e,
-	0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e,
-	0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x18, 0x05, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63,
-	0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12,
-	0x10, 0x0a, 0x03, 0x7a, 0x69, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x7a, 0x69,
-	0x70, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70,
-	0x68, 0x6f, 0x6e, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e,
-	0x65, 0x12, 0x53, 0x0a, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x0a, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42,
-	0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30,
-	0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52, 0x08, 0x62, 0x69,
-	0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x12, 0x39, 0x0a, 0x10, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63,
-	0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08,
-	0x42, 0x09, 0x92, 0x41, 0x06, 0x4a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x70,
-	0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x88, 0x01,
-	0x01, 0x3a, 0xe3, 0x02, 0x92, 0x41, 0xdf, 0x02, 0x0a, 0x78, 0x2a, 0x0e, 0x43, 0x72, 0x65, 0x61,
-	0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x11, 0x43, 0x72, 0x65, 0x61,
-	0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xd2, 0x01, 0x05,
-	0x65, 0x6d, 0x61, 0x69, 0x6c, 0xd2, 0x01, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
-	0xd2, 0x01, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x08, 0x6c,
-	0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74,
-	0xd2, 0x01, 0x04, 0x63, 0x69, 0x74, 0x79, 0xd2, 0x01, 0x03, 0x7a, 0x69, 0x70, 0xd2, 0x01, 0x07,
-	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0xd2, 0x01, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64,
-	0x61, 0x79, 0x32, 0xe2, 0x01, 0x7b, 0x22, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x3a, 0x20, 0x22,
-	0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,
-	0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
-	0x22, 0x3a, 0x20, 0x22, 0x4d, 0x61, 0x79, 0x54, 0x68, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x42,
-	0x65, 0x57, 0x69, 0x74, 0x68, 0x59, 0x6f, 0x75, 0x21, 0x22, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x72,
-	0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, 0x22, 0x2c,
-	0x20, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x6f,
-	0x65, 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x4d,
-	0x61, 0x69, 0x6e, 0x20, 0x53, 0x74, 0x72, 0x65, 0x65, 0x74, 0x20, 0x31, 0x22, 0x2c, 0x20, 0x22,
-	0x7a, 0x69, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x38, 0x31, 0x35, 0x22, 0x2c, 0x20, 0x22, 0x63,
-	0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, 0x22,
-	0x2c, 0x20, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x55, 0x53,
-	0x41, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x22, 0x3a, 0x20,
-	0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30,
-	0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x7d, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x70, 0x72, 0x69, 0x76,
-	0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x22, 0x78, 0x0a, 0x15,
-	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x63, 0x63, 0x6f,
-	0x75, 0x6e, 0x74, 0x42, 0x03, 0x92, 0x41, 0x00, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
-	0x74, 0x3a, 0x33, 0x92, 0x41, 0x30, 0x0a, 0x2e, 0x2a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x64, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x1b, 0x52, 0x65, 0x74, 0x75, 0x72,
-	0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x41,
-	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
-	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70,
-	0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61,
+	0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e,
+	0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d,
+	0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xcf, 0x01,
+	0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08,
+	0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3a, 0x84, 0x01, 0x92, 0x41, 0x80, 0x01, 0x0a,
+	0x36, 0x2a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x32, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0xd2, 0x01, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0xd2, 0x01, 0x08, 0x70,
+	0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x32, 0x46, 0x7b, 0x22, 0x65, 0x6d, 0x61, 0x69, 0x6c,
+	0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61,
+	0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x73, 0x73,
+	0x77, 0x6f, 0x72, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x4d, 0x61, 0x79, 0x54, 0x68, 0x65, 0x46, 0x6f,
+	0x72, 0x63, 0x65, 0x42, 0x65, 0x57, 0x69, 0x74, 0x68, 0x59, 0x6f, 0x75, 0x21, 0x22, 0x7d, 0x22,
+	0x78, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x41,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x03, 0x92, 0x41, 0x00, 0x52, 0x07, 0x61, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x33, 0x92, 0x41, 0x30, 0x0a, 0x2e, 0x2a, 0x0f, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x64, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x1b, 0x52, 0x65,
+	0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74,
+	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64,
+	0x66, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -283,17 +173,15 @@ var file_rpc_create_account_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
 var file_rpc_create_account_proto_goTypes = []interface{}{
 	(*CreateAccountRequest)(nil),  // 0: pb.CreateAccountRequest
 	(*CreateAccountResponse)(nil), // 1: pb.CreateAccountResponse
-	(*timestamppb.Timestamp)(nil), // 2: google.protobuf.Timestamp
-	(*Account)(nil),               // 3: pb.Account
+	(*Account)(nil),               // 2: pb.Account
 }
 var file_rpc_create_account_proto_depIdxs = []int32{
-	2, // 0: pb.CreateAccountRequest.birthday:type_name -> google.protobuf.Timestamp
-	3, // 1: pb.CreateAccountResponse.account:type_name -> pb.Account
-	2, // [2:2] is the sub-list for method output_type
-	2, // [2:2] is the sub-list for method input_type
-	2, // [2:2] is the sub-list for extension type_name
-	2, // [2:2] is the sub-list for extension extendee
-	0, // [0:2] is the sub-list for field type_name
+	2, // 0: pb.CreateAccountResponse.account:type_name -> pb.Account
+	1, // [1:1] is the sub-list for method output_type
+	1, // [1:1] is the sub-list for method input_type
+	1, // [1:1] is the sub-list for extension type_name
+	1, // [1:1] is the sub-list for extension extendee
+	0, // [0:1] is the sub-list for field type_name
 }
 
 func init() { file_rpc_create_account_proto_init() }
@@ -328,7 +216,6 @@ func file_rpc_create_account_proto_init() {
 			}
 		}
 	}
-	file_rpc_create_account_proto_msgTypes[0].OneofWrappers = []interface{}{}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/bff/pb/rpc_create_account_info.pb.go b/bff/pb/rpc_create_account_info.pb.go
new file mode 100644
index 0000000..0ed4635
--- /dev/null
+++ b/bff/pb/rpc_create_account_info.pb.go
@@ -0,0 +1,340 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.31.0
+// 	protoc        v4.24.4
+// source: rpc_create_account_info.proto
+
+package pb
+
+import (
+	_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type CreateAccountInfoRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AccountId       uint64                 `protobuf:"varint,1,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"`
+	Firstname       string                 `protobuf:"bytes,3,opt,name=firstname,proto3" json:"firstname,omitempty"`
+	Lastname        string                 `protobuf:"bytes,4,opt,name=lastname,proto3" json:"lastname,omitempty"`
+	Street          string                 `protobuf:"bytes,5,opt,name=street,proto3" json:"street,omitempty"`
+	City            string                 `protobuf:"bytes,6,opt,name=city,proto3" json:"city,omitempty"`
+	Zip             string                 `protobuf:"bytes,7,opt,name=zip,proto3" json:"zip,omitempty"`
+	Country         string                 `protobuf:"bytes,8,opt,name=country,proto3" json:"country,omitempty"`
+	Phone           string                 `protobuf:"bytes,9,opt,name=phone,proto3" json:"phone,omitempty"`
+	Birthday        *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=birthday,proto3" json:"birthday,omitempty"`
+	PrivacyAccepted *bool                  `protobuf:"varint,11,opt,name=privacy_accepted,json=privacyAccepted,proto3,oneof" json:"privacy_accepted,omitempty"`
+}
+
+func (x *CreateAccountInfoRequest) Reset() {
+	*x = CreateAccountInfoRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_rpc_create_account_info_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CreateAccountInfoRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateAccountInfoRequest) ProtoMessage() {}
+
+func (x *CreateAccountInfoRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_rpc_create_account_info_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CreateAccountInfoRequest.ProtoReflect.Descriptor instead.
+func (*CreateAccountInfoRequest) Descriptor() ([]byte, []int) {
+	return file_rpc_create_account_info_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *CreateAccountInfoRequest) GetAccountId() uint64 {
+	if x != nil {
+		return x.AccountId
+	}
+	return 0
+}
+
+func (x *CreateAccountInfoRequest) GetFirstname() string {
+	if x != nil {
+		return x.Firstname
+	}
+	return ""
+}
+
+func (x *CreateAccountInfoRequest) GetLastname() string {
+	if x != nil {
+		return x.Lastname
+	}
+	return ""
+}
+
+func (x *CreateAccountInfoRequest) GetStreet() string {
+	if x != nil {
+		return x.Street
+	}
+	return ""
+}
+
+func (x *CreateAccountInfoRequest) GetCity() string {
+	if x != nil {
+		return x.City
+	}
+	return ""
+}
+
+func (x *CreateAccountInfoRequest) GetZip() string {
+	if x != nil {
+		return x.Zip
+	}
+	return ""
+}
+
+func (x *CreateAccountInfoRequest) GetCountry() string {
+	if x != nil {
+		return x.Country
+	}
+	return ""
+}
+
+func (x *CreateAccountInfoRequest) GetPhone() string {
+	if x != nil {
+		return x.Phone
+	}
+	return ""
+}
+
+func (x *CreateAccountInfoRequest) GetBirthday() *timestamppb.Timestamp {
+	if x != nil {
+		return x.Birthday
+	}
+	return nil
+}
+
+func (x *CreateAccountInfoRequest) GetPrivacyAccepted() bool {
+	if x != nil && x.PrivacyAccepted != nil {
+		return *x.PrivacyAccepted
+	}
+	return false
+}
+
+type CreateAccountInfoResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AccountInfo *AccountInfo `protobuf:"bytes,1,opt,name=account_info,json=accountInfo,proto3" json:"account_info,omitempty"`
+}
+
+func (x *CreateAccountInfoResponse) Reset() {
+	*x = CreateAccountInfoResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_rpc_create_account_info_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CreateAccountInfoResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateAccountInfoResponse) ProtoMessage() {}
+
+func (x *CreateAccountInfoResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_rpc_create_account_info_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CreateAccountInfoResponse.ProtoReflect.Descriptor instead.
+func (*CreateAccountInfoResponse) Descriptor() ([]byte, []int) {
+	return file_rpc_create_account_info_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *CreateAccountInfoResponse) GetAccountInfo() *AccountInfo {
+	if x != nil {
+		return x.AccountInfo
+	}
+	return nil
+}
+
+var File_rpc_create_account_info_proto protoreflect.FileDescriptor
+
+var file_rpc_create_account_info_proto_rawDesc = []byte{
+	0x0a, 0x1d, 0x72, 0x70, 0x63, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
+	0x02, 0x70, 0x62, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e,
+	0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x12, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e,
+	0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbb, 0x05, 0x0a, 0x18, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61,
+	0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16,
+	0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x7a, 0x69,
+	0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x7a, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18,
+	0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x53, 0x0a, 0x08,
+	0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a,
+	0x16, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a,
+	0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61,
+	0x79, 0x12, 0x39, 0x0a, 0x10, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63,
+	0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x42, 0x09, 0x92, 0x41, 0x06,
+	0x4a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63,
+	0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x3a, 0xb2, 0x02, 0x92,
+	0x41, 0xae, 0x02, 0x0a, 0x7a, 0x2a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x32, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f,
+	0xd2, 0x01, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x09,
+	0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x08, 0x6c, 0x61, 0x73, 0x74,
+	0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0xd2, 0x01, 0x04,
+	0x63, 0x69, 0x74, 0x79, 0xd2, 0x01, 0x03, 0x7a, 0x69, 0x70, 0xd2, 0x01, 0x07, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x72, 0x79, 0xd2, 0x01, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x32,
+	0xaf, 0x01, 0x7b, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x3a,
+	0x20, 0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65,
+	0x22, 0x3a, 0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x6c, 0x61, 0x73, 0x74,
+	0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x6f, 0x65, 0x22, 0x2c, 0x20, 0x22, 0x73,
+	0x74, 0x72, 0x65, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x53, 0x74,
+	0x72, 0x65, 0x65, 0x74, 0x20, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x7a, 0x69, 0x70, 0x22, 0x3a, 0x20,
+	0x22, 0x30, 0x38, 0x31, 0x35, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20,
+	0x22, 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x55, 0x53, 0x41, 0x22, 0x2c, 0x20, 0x22, 0x62,
+	0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d,
+	0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22,
+	0x7d, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63,
+	0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x22, 0x91, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f,
+	0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e,
+	0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x03, 0x92, 0x41, 0x00,
+	0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x3b, 0x92,
+	0x41, 0x38, 0x0a, 0x36, 0x2a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x41, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x32, 0x1f, 0x52, 0x65, 0x74, 0x75, 0x72,
+	0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x41,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69,
+	0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f,
+	0x64, 0x66, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_rpc_create_account_info_proto_rawDescOnce sync.Once
+	file_rpc_create_account_info_proto_rawDescData = file_rpc_create_account_info_proto_rawDesc
+)
+
+func file_rpc_create_account_info_proto_rawDescGZIP() []byte {
+	file_rpc_create_account_info_proto_rawDescOnce.Do(func() {
+		file_rpc_create_account_info_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_create_account_info_proto_rawDescData)
+	})
+	return file_rpc_create_account_info_proto_rawDescData
+}
+
+var file_rpc_create_account_info_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_rpc_create_account_info_proto_goTypes = []interface{}{
+	(*CreateAccountInfoRequest)(nil),  // 0: pb.CreateAccountInfoRequest
+	(*CreateAccountInfoResponse)(nil), // 1: pb.CreateAccountInfoResponse
+	(*timestamppb.Timestamp)(nil),     // 2: google.protobuf.Timestamp
+	(*AccountInfo)(nil),               // 3: pb.AccountInfo
+}
+var file_rpc_create_account_info_proto_depIdxs = []int32{
+	2, // 0: pb.CreateAccountInfoRequest.birthday:type_name -> google.protobuf.Timestamp
+	3, // 1: pb.CreateAccountInfoResponse.account_info:type_name -> pb.AccountInfo
+	2, // [2:2] is the sub-list for method output_type
+	2, // [2:2] is the sub-list for method input_type
+	2, // [2:2] is the sub-list for extension type_name
+	2, // [2:2] is the sub-list for extension extendee
+	0, // [0:2] is the sub-list for field type_name
+}
+
+func init() { file_rpc_create_account_info_proto_init() }
+func file_rpc_create_account_info_proto_init() {
+	if File_rpc_create_account_info_proto != nil {
+		return
+	}
+	file_account_info_proto_init()
+	if !protoimpl.UnsafeEnabled {
+		file_rpc_create_account_info_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CreateAccountInfoRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_rpc_create_account_info_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CreateAccountInfoResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	file_rpc_create_account_info_proto_msgTypes[0].OneofWrappers = []interface{}{}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_rpc_create_account_info_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_rpc_create_account_info_proto_goTypes,
+		DependencyIndexes: file_rpc_create_account_info_proto_depIdxs,
+		MessageInfos:      file_rpc_create_account_info_proto_msgTypes,
+	}.Build()
+	File_rpc_create_account_info_proto = out.File
+	file_rpc_create_account_info_proto_rawDesc = nil
+	file_rpc_create_account_info_proto_goTypes = nil
+	file_rpc_create_account_info_proto_depIdxs = nil
+}
diff --git a/bff/pb/rpc_get_account.pb.go b/bff/pb/rpc_get_account.pb.go
index d1ec158..f433432 100644
--- a/bff/pb/rpc_get_account.pb.go
+++ b/bff/pb/rpc_get_account.pb.go
@@ -123,23 +123,23 @@ var file_rpc_get_account_proto_rawDesc = []byte{
 	0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76,
 	0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61,
 	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x61, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5f, 0x0a, 0x11, 0x47, 0x65,
+	0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x68, 0x0a, 0x11, 0x47, 0x65,
 	0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
 	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x3a,
-	0x3a, 0x92, 0x41, 0x37, 0x0a, 0x27, 0x2a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x32, 0x14, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x32, 0x0c, 0x7b,
-	0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x22, 0x20, 0x7d, 0x22, 0x71, 0x0a, 0x12, 0x47,
-	0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42,
-	0x03, 0x92, 0x41, 0x00, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x2f, 0x92,
-	0x41, 0x2c, 0x0a, 0x2a, 0x2a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x13, 0x52, 0x65, 0x74, 0x75, 0x72,
-	0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x19,
-	0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73,
-	0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x33,
+	0x43, 0x92, 0x41, 0x40, 0x0a, 0x30, 0x2a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x32, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49,
+	0x6e, 0x66, 0x6f, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69,
+	0x64, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x32, 0x0c, 0x7b, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22,
+	0x31, 0x22, 0x20, 0x7d, 0x22, 0x75, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62,
+	0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x03, 0x92, 0x41, 0x00, 0x52, 0x07, 0x61,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x33, 0x92, 0x41, 0x30, 0x0a, 0x2e, 0x2a, 0x13, 0x47,
+	0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x32, 0x17, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
+	0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x19, 0x5a, 0x17, 0x67,
+	0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62,
+	0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/bff/pb/rpc_get_account_info.pb.go b/bff/pb/rpc_get_account_info.pb.go
new file mode 100644
index 0000000..9b46a60
--- /dev/null
+++ b/bff/pb/rpc_get_account_info.pb.go
@@ -0,0 +1,227 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.31.0
+// 	protoc        v4.24.4
+// source: rpc_get_account_info.proto
+
+package pb
+
+import (
+	_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type GetAccountInfoRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AccountId uint64 `protobuf:"varint,1,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"`
+}
+
+func (x *GetAccountInfoRequest) Reset() {
+	*x = GetAccountInfoRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_rpc_get_account_info_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetAccountInfoRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetAccountInfoRequest) ProtoMessage() {}
+
+func (x *GetAccountInfoRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_rpc_get_account_info_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetAccountInfoRequest.ProtoReflect.Descriptor instead.
+func (*GetAccountInfoRequest) Descriptor() ([]byte, []int) {
+	return file_rpc_get_account_info_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GetAccountInfoRequest) GetAccountId() uint64 {
+	if x != nil {
+		return x.AccountId
+	}
+	return 0
+}
+
+type GetAccountInfoResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AccountInfo *AccountInfo `protobuf:"bytes,1,opt,name=account_info,json=accountInfo,proto3" json:"account_info,omitempty"`
+}
+
+func (x *GetAccountInfoResponse) Reset() {
+	*x = GetAccountInfoResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_rpc_get_account_info_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetAccountInfoResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetAccountInfoResponse) ProtoMessage() {}
+
+func (x *GetAccountInfoResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_rpc_get_account_info_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetAccountInfoResponse.ProtoReflect.Descriptor instead.
+func (*GetAccountInfoResponse) Descriptor() ([]byte, []int) {
+	return file_rpc_get_account_info_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GetAccountInfoResponse) GetAccountInfo() *AccountInfo {
+	if x != nil {
+		return x.AccountInfo
+	}
+	return nil
+}
+
+var File_rpc_get_account_info_proto protoreflect.FileDescriptor
+
+var file_rpc_get_account_info_proto_rawDesc = []byte{
+	0x0a, 0x1a, 0x72, 0x70, 0x63, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62,
+	0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65,
+	0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61,
+	0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x1a, 0x12, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8f, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
+	0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x04, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x3a, 0x57, 0x92,
+	0x41, 0x54, 0x0a, 0x3c, 0x2a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x49, 0x6e, 0x66, 0x6f, 0x32, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64,
+	0x32, 0x14, 0x7b, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x3a,
+	0x20, 0x22, 0x31, 0x22, 0x20, 0x7d, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x37, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66,
+	0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x03, 0x92, 0x41, 0x00, 0x52, 0x0b, 0x61,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x37, 0x92, 0x41, 0x34, 0x0a,
+	0x32, 0x2a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66,
+	0x6f, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x17, 0x52, 0x65, 0x74, 0x75,
+	0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49,
+	0x6e, 0x66, 0x6f, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62, 0x62, 0x06,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_rpc_get_account_info_proto_rawDescOnce sync.Once
+	file_rpc_get_account_info_proto_rawDescData = file_rpc_get_account_info_proto_rawDesc
+)
+
+func file_rpc_get_account_info_proto_rawDescGZIP() []byte {
+	file_rpc_get_account_info_proto_rawDescOnce.Do(func() {
+		file_rpc_get_account_info_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_get_account_info_proto_rawDescData)
+	})
+	return file_rpc_get_account_info_proto_rawDescData
+}
+
+var file_rpc_get_account_info_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_rpc_get_account_info_proto_goTypes = []interface{}{
+	(*GetAccountInfoRequest)(nil),  // 0: pb.GetAccountInfoRequest
+	(*GetAccountInfoResponse)(nil), // 1: pb.GetAccountInfoResponse
+	(*AccountInfo)(nil),            // 2: pb.AccountInfo
+}
+var file_rpc_get_account_info_proto_depIdxs = []int32{
+	2, // 0: pb.GetAccountInfoResponse.account_info:type_name -> pb.AccountInfo
+	1, // [1:1] is the sub-list for method output_type
+	1, // [1:1] is the sub-list for method input_type
+	1, // [1:1] is the sub-list for extension type_name
+	1, // [1:1] is the sub-list for extension extendee
+	0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_rpc_get_account_info_proto_init() }
+func file_rpc_get_account_info_proto_init() {
+	if File_rpc_get_account_info_proto != nil {
+		return
+	}
+	file_account_info_proto_init()
+	if !protoimpl.UnsafeEnabled {
+		file_rpc_get_account_info_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetAccountInfoRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_rpc_get_account_info_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetAccountInfoResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_rpc_get_account_info_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_rpc_get_account_info_proto_goTypes,
+		DependencyIndexes: file_rpc_get_account_info_proto_depIdxs,
+		MessageInfos:      file_rpc_get_account_info_proto_msgTypes,
+	}.Build()
+	File_rpc_get_account_info_proto = out.File
+	file_rpc_get_account_info_proto_rawDesc = nil
+	file_rpc_get_account_info_proto_goTypes = nil
+	file_rpc_get_account_info_proto_depIdxs = nil
+}
diff --git a/bff/pb/rpc_list_account_info.pb.go b/bff/pb/rpc_list_account_info.pb.go
new file mode 100644
index 0000000..6eb02bc
--- /dev/null
+++ b/bff/pb/rpc_list_account_info.pb.go
@@ -0,0 +1,238 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.31.0
+// 	protoc        v4.24.4
+// source: rpc_list_account_info.proto
+
+package pb
+
+import (
+	_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type ListAccountInfoRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	PageId   uint32 `protobuf:"varint,1,opt,name=page_id,json=pageId,proto3" json:"page_id,omitempty"`
+	PageSize uint32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+}
+
+func (x *ListAccountInfoRequest) Reset() {
+	*x = ListAccountInfoRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_rpc_list_account_info_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ListAccountInfoRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListAccountInfoRequest) ProtoMessage() {}
+
+func (x *ListAccountInfoRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_rpc_list_account_info_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListAccountInfoRequest.ProtoReflect.Descriptor instead.
+func (*ListAccountInfoRequest) Descriptor() ([]byte, []int) {
+	return file_rpc_list_account_info_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *ListAccountInfoRequest) GetPageId() uint32 {
+	if x != nil {
+		return x.PageId
+	}
+	return 0
+}
+
+func (x *ListAccountInfoRequest) GetPageSize() uint32 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+type ListAccountInfoResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AccountInfo []*AccountInfo `protobuf:"bytes,1,rep,name=account_info,json=accountInfo,proto3" json:"account_info,omitempty"`
+}
+
+func (x *ListAccountInfoResponse) Reset() {
+	*x = ListAccountInfoResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_rpc_list_account_info_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ListAccountInfoResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListAccountInfoResponse) ProtoMessage() {}
+
+func (x *ListAccountInfoResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_rpc_list_account_info_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListAccountInfoResponse.ProtoReflect.Descriptor instead.
+func (*ListAccountInfoResponse) Descriptor() ([]byte, []int) {
+	return file_rpc_list_account_info_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *ListAccountInfoResponse) GetAccountInfo() []*AccountInfo {
+	if x != nil {
+		return x.AccountInfo
+	}
+	return nil
+}
+
+var File_rpc_list_account_info_proto protoreflect.FileDescriptor
+
+var file_rpc_list_account_info_proto_rawDesc = []byte{
+	0x0a, 0x1b, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70,
+	0x62, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70,
+	0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
+	0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x1a, 0x12, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xba, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x17, 0x0a, 0x07, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0d, 0x52, 0x06, 0x70, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67,
+	0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x61,
+	0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0x6a, 0x92, 0x41, 0x67, 0x0a, 0x43, 0x2a, 0x0f, 0x4c,
+	0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x32, 0x1a,
+	0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x6f,
+	0x66, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0xd2, 0x01, 0x07, 0x70, 0x61, 0x67,
+	0x65, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65,
+	0x32, 0x20, 0x7b, 0x22, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x31, 0x2c,
+	0x20, 0x22, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x30,
+	0x20, 0x7d, 0x22, 0x8c, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37,
+	0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x03, 0x92, 0x41, 0x00, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x38, 0x92, 0x41, 0x35, 0x0a, 0x33, 0x2a, 0x18,
+	0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x20,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x17, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e,
+	0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66,
+	0x6f, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
+	0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_rpc_list_account_info_proto_rawDescOnce sync.Once
+	file_rpc_list_account_info_proto_rawDescData = file_rpc_list_account_info_proto_rawDesc
+)
+
+func file_rpc_list_account_info_proto_rawDescGZIP() []byte {
+	file_rpc_list_account_info_proto_rawDescOnce.Do(func() {
+		file_rpc_list_account_info_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_list_account_info_proto_rawDescData)
+	})
+	return file_rpc_list_account_info_proto_rawDescData
+}
+
+var file_rpc_list_account_info_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_rpc_list_account_info_proto_goTypes = []interface{}{
+	(*ListAccountInfoRequest)(nil),  // 0: pb.ListAccountInfoRequest
+	(*ListAccountInfoResponse)(nil), // 1: pb.ListAccountInfoResponse
+	(*AccountInfo)(nil),             // 2: pb.AccountInfo
+}
+var file_rpc_list_account_info_proto_depIdxs = []int32{
+	2, // 0: pb.ListAccountInfoResponse.account_info:type_name -> pb.AccountInfo
+	1, // [1:1] is the sub-list for method output_type
+	1, // [1:1] is the sub-list for method input_type
+	1, // [1:1] is the sub-list for extension type_name
+	1, // [1:1] is the sub-list for extension extendee
+	0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_rpc_list_account_info_proto_init() }
+func file_rpc_list_account_info_proto_init() {
+	if File_rpc_list_account_info_proto != nil {
+		return
+	}
+	file_account_info_proto_init()
+	if !protoimpl.UnsafeEnabled {
+		file_rpc_list_account_info_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ListAccountInfoRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_rpc_list_account_info_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ListAccountInfoResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_rpc_list_account_info_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_rpc_list_account_info_proto_goTypes,
+		DependencyIndexes: file_rpc_list_account_info_proto_depIdxs,
+		MessageInfos:      file_rpc_list_account_info_proto_msgTypes,
+	}.Build()
+	File_rpc_list_account_info_proto = out.File
+	file_rpc_list_account_info_proto_rawDesc = nil
+	file_rpc_list_account_info_proto_goTypes = nil
+	file_rpc_list_account_info_proto_depIdxs = nil
+}
diff --git a/bff/pb/rpc_update_account.pb.go b/bff/pb/rpc_update_account.pb.go
index 023c8ff..f5db072 100644
--- a/bff/pb/rpc_update_account.pb.go
+++ b/bff/pb/rpc_update_account.pb.go
@@ -10,7 +10,6 @@ import (
 	_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
 	reflect "reflect"
 	sync "sync"
 )
@@ -27,17 +26,9 @@ type UpdateAccountRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Id        uint64                 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
-	Email     *string                `protobuf:"bytes,2,opt,name=email,proto3,oneof" json:"email,omitempty"`
-	Password  *string                `protobuf:"bytes,3,opt,name=password,proto3,oneof" json:"password,omitempty"`
-	Firstname *string                `protobuf:"bytes,4,opt,name=firstname,proto3,oneof" json:"firstname,omitempty"`
-	Lastname  *string                `protobuf:"bytes,5,opt,name=lastname,proto3,oneof" json:"lastname,omitempty"`
-	Street    *string                `protobuf:"bytes,6,opt,name=street,proto3,oneof" json:"street,omitempty"`
-	City      *string                `protobuf:"bytes,7,opt,name=city,proto3,oneof" json:"city,omitempty"`
-	Zip       *string                `protobuf:"bytes,8,opt,name=zip,proto3,oneof" json:"zip,omitempty"`
-	Country   *string                `protobuf:"bytes,9,opt,name=country,proto3,oneof" json:"country,omitempty"`
-	Phone     *string                `protobuf:"bytes,10,opt,name=phone,proto3,oneof" json:"phone,omitempty"`
-	Birthday  *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=birthday,proto3,oneof" json:"birthday,omitempty"`
+	AccountId uint64  `protobuf:"varint,1,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"`
+	Email     *string `protobuf:"bytes,2,opt,name=email,proto3,oneof" json:"email,omitempty"`
+	Password  *string `protobuf:"bytes,3,opt,name=password,proto3,oneof" json:"password,omitempty"`
 }
 
 func (x *UpdateAccountRequest) Reset() {
@@ -72,9 +63,9 @@ func (*UpdateAccountRequest) Descriptor() ([]byte, []int) {
 	return file_rpc_update_account_proto_rawDescGZIP(), []int{0}
 }
 
-func (x *UpdateAccountRequest) GetId() uint64 {
+func (x *UpdateAccountRequest) GetAccountId() uint64 {
 	if x != nil {
-		return x.Id
+		return x.AccountId
 	}
 	return 0
 }
@@ -93,62 +84,6 @@ func (x *UpdateAccountRequest) GetPassword() string {
 	return ""
 }
 
-func (x *UpdateAccountRequest) GetFirstname() string {
-	if x != nil && x.Firstname != nil {
-		return *x.Firstname
-	}
-	return ""
-}
-
-func (x *UpdateAccountRequest) GetLastname() string {
-	if x != nil && x.Lastname != nil {
-		return *x.Lastname
-	}
-	return ""
-}
-
-func (x *UpdateAccountRequest) GetStreet() string {
-	if x != nil && x.Street != nil {
-		return *x.Street
-	}
-	return ""
-}
-
-func (x *UpdateAccountRequest) GetCity() string {
-	if x != nil && x.City != nil {
-		return *x.City
-	}
-	return ""
-}
-
-func (x *UpdateAccountRequest) GetZip() string {
-	if x != nil && x.Zip != nil {
-		return *x.Zip
-	}
-	return ""
-}
-
-func (x *UpdateAccountRequest) GetCountry() string {
-	if x != nil && x.Country != nil {
-		return *x.Country
-	}
-	return ""
-}
-
-func (x *UpdateAccountRequest) GetPhone() string {
-	if x != nil && x.Phone != nil {
-		return *x.Phone
-	}
-	return ""
-}
-
-func (x *UpdateAccountRequest) GetBirthday() *timestamppb.Timestamp {
-	if x != nil {
-		return x.Birthday
-	}
-	return nil
-}
-
 type UpdateAccountResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -200,60 +135,37 @@ var File_rpc_update_account_proto protoreflect.FileDescriptor
 
 var file_rpc_update_account_proto_rawDesc = []byte{
 	0x0a, 0x18, 0x72, 0x70, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x1f,
-	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
-	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e,
-	0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e,
-	0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
-	0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xce,
-	0x04, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x88,
-	0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
-	0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e,
-	0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61,
-	0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74,
-	0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65,
-	0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65,
-	0x74, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01,
-	0x28, 0x09, 0x48, 0x05, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a,
-	0x03, 0x7a, 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x03, 0x7a, 0x69,
-	0x70, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18,
-	0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x07, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79,
-	0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x0a, 0x20, 0x01,
-	0x28, 0x09, 0x48, 0x08, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x88, 0x01, 0x01, 0x12, 0x58,
-	0x0a, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
-	0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41,
-	0x18, 0x4a, 0x16, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30,
-	0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x48, 0x09, 0x52, 0x08, 0x62, 0x69, 0x72,
-	0x74, 0x68, 0x64, 0x61, 0x79, 0x88, 0x01, 0x01, 0x3a, 0x54, 0x92, 0x41, 0x51, 0x0a, 0x28, 0x2a,
-	0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32,
-	0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x32, 0x25, 0x7b, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20,
-	0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x22,
-	0x44, 0x65, 0x61, 0x74, 0x68, 0x20, 0x53, 0x74, 0x61, 0x72, 0x20, 0x32, 0x22, 0x7d, 0x42, 0x08,
-	0x0a, 0x06, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x61, 0x73,
-	0x73, 0x77, 0x6f, 0x72, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e,
-	0x61, 0x6d, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65,
-	0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x5f,
-	0x63, 0x69, 0x74, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x7a, 0x69, 0x70, 0x42, 0x0a, 0x0a, 0x08,
-	0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x70, 0x68, 0x6f,
-	0x6e, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x22,
-	0x78, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f,
-	0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x41,
-	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x03, 0x92, 0x41, 0x00, 0x52, 0x07, 0x61, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x33, 0x92, 0x41, 0x30, 0x0a, 0x2e, 0x2a, 0x0f, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x64, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x1b, 0x52, 0x65,
-	0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x64, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74,
-	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64,
-	0x66, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61,
+	0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e,
+	0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d,
+	0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfb, 0x01,
+	0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x88, 0x01, 0x01,
+	0x12, 0x1f, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x88, 0x01,
+	0x01, 0x3a, 0x71, 0x92, 0x41, 0x6e, 0x0a, 0x36, 0x2a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x20, 0x61, 0x6e, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xd2, 0x01, 0x05, 0x65, 0x6d,
+	0x61, 0x69, 0x6c, 0xd2, 0x01, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x32, 0x34,
+	0x7b, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22,
+	0x31, 0x22, 0x2c, 0x20, 0x22, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f,
+	0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63,
+	0x6f, 0x6d, 0x22, 0x7d, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x42, 0x0b,
+	0x0a, 0x09, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x78, 0x0a, 0x15, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x42, 0x03, 0x92, 0x41, 0x00, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x3a, 0x33, 0x92, 0x41, 0x30, 0x0a, 0x2e, 0x2a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
+	0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x1b, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e,
+	0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x41, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
+	0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -272,17 +184,15 @@ var file_rpc_update_account_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
 var file_rpc_update_account_proto_goTypes = []interface{}{
 	(*UpdateAccountRequest)(nil),  // 0: pb.UpdateAccountRequest
 	(*UpdateAccountResponse)(nil), // 1: pb.UpdateAccountResponse
-	(*timestamppb.Timestamp)(nil), // 2: google.protobuf.Timestamp
-	(*Account)(nil),               // 3: pb.Account
+	(*Account)(nil),               // 2: pb.Account
 }
 var file_rpc_update_account_proto_depIdxs = []int32{
-	2, // 0: pb.UpdateAccountRequest.birthday:type_name -> google.protobuf.Timestamp
-	3, // 1: pb.UpdateAccountResponse.account:type_name -> pb.Account
-	2, // [2:2] is the sub-list for method output_type
-	2, // [2:2] is the sub-list for method input_type
-	2, // [2:2] is the sub-list for extension type_name
-	2, // [2:2] is the sub-list for extension extendee
-	0, // [0:2] is the sub-list for field type_name
+	2, // 0: pb.UpdateAccountResponse.account:type_name -> pb.Account
+	1, // [1:1] is the sub-list for method output_type
+	1, // [1:1] is the sub-list for method input_type
+	1, // [1:1] is the sub-list for extension type_name
+	1, // [1:1] is the sub-list for extension extendee
+	0, // [0:1] is the sub-list for field type_name
 }
 
 func init() { file_rpc_update_account_proto_init() }
diff --git a/bff/pb/rpc_update_account_info.pb.go b/bff/pb/rpc_update_account_info.pb.go
new file mode 100644
index 0000000..18126cc
--- /dev/null
+++ b/bff/pb/rpc_update_account_info.pb.go
@@ -0,0 +1,322 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.31.0
+// 	protoc        v4.24.4
+// source: rpc_update_account_info.proto
+
+package pb
+
+import (
+	_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type UpdateAccountInfoRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AccountId uint64                 `protobuf:"varint,1,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"`
+	Firstname *string                `protobuf:"bytes,4,opt,name=firstname,proto3,oneof" json:"firstname,omitempty"`
+	Lastname  *string                `protobuf:"bytes,5,opt,name=lastname,proto3,oneof" json:"lastname,omitempty"`
+	Street    *string                `protobuf:"bytes,6,opt,name=street,proto3,oneof" json:"street,omitempty"`
+	City      *string                `protobuf:"bytes,7,opt,name=city,proto3,oneof" json:"city,omitempty"`
+	Zip       *string                `protobuf:"bytes,8,opt,name=zip,proto3,oneof" json:"zip,omitempty"`
+	Country   *string                `protobuf:"bytes,9,opt,name=country,proto3,oneof" json:"country,omitempty"`
+	Phone     *string                `protobuf:"bytes,10,opt,name=phone,proto3,oneof" json:"phone,omitempty"`
+	Birthday  *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=birthday,proto3,oneof" json:"birthday,omitempty"`
+}
+
+func (x *UpdateAccountInfoRequest) Reset() {
+	*x = UpdateAccountInfoRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_rpc_update_account_info_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *UpdateAccountInfoRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateAccountInfoRequest) ProtoMessage() {}
+
+func (x *UpdateAccountInfoRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_rpc_update_account_info_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use UpdateAccountInfoRequest.ProtoReflect.Descriptor instead.
+func (*UpdateAccountInfoRequest) Descriptor() ([]byte, []int) {
+	return file_rpc_update_account_info_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *UpdateAccountInfoRequest) GetAccountId() uint64 {
+	if x != nil {
+		return x.AccountId
+	}
+	return 0
+}
+
+func (x *UpdateAccountInfoRequest) GetFirstname() string {
+	if x != nil && x.Firstname != nil {
+		return *x.Firstname
+	}
+	return ""
+}
+
+func (x *UpdateAccountInfoRequest) GetLastname() string {
+	if x != nil && x.Lastname != nil {
+		return *x.Lastname
+	}
+	return ""
+}
+
+func (x *UpdateAccountInfoRequest) GetStreet() string {
+	if x != nil && x.Street != nil {
+		return *x.Street
+	}
+	return ""
+}
+
+func (x *UpdateAccountInfoRequest) GetCity() string {
+	if x != nil && x.City != nil {
+		return *x.City
+	}
+	return ""
+}
+
+func (x *UpdateAccountInfoRequest) GetZip() string {
+	if x != nil && x.Zip != nil {
+		return *x.Zip
+	}
+	return ""
+}
+
+func (x *UpdateAccountInfoRequest) GetCountry() string {
+	if x != nil && x.Country != nil {
+		return *x.Country
+	}
+	return ""
+}
+
+func (x *UpdateAccountInfoRequest) GetPhone() string {
+	if x != nil && x.Phone != nil {
+		return *x.Phone
+	}
+	return ""
+}
+
+func (x *UpdateAccountInfoRequest) GetBirthday() *timestamppb.Timestamp {
+	if x != nil {
+		return x.Birthday
+	}
+	return nil
+}
+
+type UpdateAccountInfoResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AccountInfo *AccountInfo `protobuf:"bytes,1,opt,name=account_info,json=accountInfo,proto3" json:"account_info,omitempty"`
+}
+
+func (x *UpdateAccountInfoResponse) Reset() {
+	*x = UpdateAccountInfoResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_rpc_update_account_info_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *UpdateAccountInfoResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateAccountInfoResponse) ProtoMessage() {}
+
+func (x *UpdateAccountInfoResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_rpc_update_account_info_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use UpdateAccountInfoResponse.ProtoReflect.Descriptor instead.
+func (*UpdateAccountInfoResponse) Descriptor() ([]byte, []int) {
+	return file_rpc_update_account_info_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *UpdateAccountInfoResponse) GetAccountInfo() *AccountInfo {
+	if x != nil {
+		return x.AccountInfo
+	}
+	return nil
+}
+
+var File_rpc_update_account_info_proto protoreflect.FileDescriptor
+
+var file_rpc_update_account_info_proto_rawDesc = []byte{
+	0x0a, 0x1d, 0x72, 0x70, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
+	0x02, 0x70, 0x62, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e,
+	0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x12, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e,
+	0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9e, 0x04, 0x0a, 0x18, 0x55, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74,
+	0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e,
+	0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x6c, 0x61, 0x73,
+	0x74, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65,
+	0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65,
+	0x65, 0x74, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20,
+	0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x88, 0x01, 0x01, 0x12, 0x15,
+	0x0a, 0x03, 0x7a, 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x03, 0x7a,
+	0x69, 0x70, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72,
+	0x79, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x0a, 0x20,
+	0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x88, 0x01, 0x01, 0x12,
+	0x58, 0x0a, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92,
+	0x41, 0x18, 0x4a, 0x16, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54,
+	0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x48, 0x07, 0x52, 0x08, 0x62, 0x69,
+	0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x88, 0x01, 0x01, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x0a, 0x30,
+	0x2a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x49, 0x6e, 0x66, 0x6f, 0x32, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20,
+	0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0xd2, 0x01, 0x02, 0x69, 0x64,
+	0x32, 0x2d, 0x7b, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x3a,
+	0x20, 0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x22, 0x3a, 0x20,
+	0x22, 0x44, 0x65, 0x61, 0x74, 0x68, 0x20, 0x53, 0x74, 0x61, 0x72, 0x20, 0x32, 0x22, 0x7d, 0x42,
+	0x0c, 0x0a, 0x0a, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0b, 0x0a,
+	0x09, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73,
+	0x74, 0x72, 0x65, 0x65, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x63, 0x69, 0x74, 0x79, 0x42, 0x06,
+	0x0a, 0x04, 0x5f, 0x7a, 0x69, 0x70, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x72, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x42, 0x0b, 0x0a, 0x09,
+	0x5f, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x22, 0x89, 0x01, 0x0a, 0x19, 0x55, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e,
+	0x70, 0x62, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x03,
+	0x92, 0x41, 0x00, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f,
+	0x3a, 0x33, 0x92, 0x41, 0x30, 0x0a, 0x2e, 0x2a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
+	0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x1b, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e,
+	0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x41, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
+	0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_rpc_update_account_info_proto_rawDescOnce sync.Once
+	file_rpc_update_account_info_proto_rawDescData = file_rpc_update_account_info_proto_rawDesc
+)
+
+func file_rpc_update_account_info_proto_rawDescGZIP() []byte {
+	file_rpc_update_account_info_proto_rawDescOnce.Do(func() {
+		file_rpc_update_account_info_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_update_account_info_proto_rawDescData)
+	})
+	return file_rpc_update_account_info_proto_rawDescData
+}
+
+var file_rpc_update_account_info_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_rpc_update_account_info_proto_goTypes = []interface{}{
+	(*UpdateAccountInfoRequest)(nil),  // 0: pb.UpdateAccountInfoRequest
+	(*UpdateAccountInfoResponse)(nil), // 1: pb.UpdateAccountInfoResponse
+	(*timestamppb.Timestamp)(nil),     // 2: google.protobuf.Timestamp
+	(*AccountInfo)(nil),               // 3: pb.AccountInfo
+}
+var file_rpc_update_account_info_proto_depIdxs = []int32{
+	2, // 0: pb.UpdateAccountInfoRequest.birthday:type_name -> google.protobuf.Timestamp
+	3, // 1: pb.UpdateAccountInfoResponse.account_info:type_name -> pb.AccountInfo
+	2, // [2:2] is the sub-list for method output_type
+	2, // [2:2] is the sub-list for method input_type
+	2, // [2:2] is the sub-list for extension type_name
+	2, // [2:2] is the sub-list for extension extendee
+	0, // [0:2] is the sub-list for field type_name
+}
+
+func init() { file_rpc_update_account_info_proto_init() }
+func file_rpc_update_account_info_proto_init() {
+	if File_rpc_update_account_info_proto != nil {
+		return
+	}
+	file_account_info_proto_init()
+	if !protoimpl.UnsafeEnabled {
+		file_rpc_update_account_info_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*UpdateAccountInfoRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_rpc_update_account_info_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*UpdateAccountInfoResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	file_rpc_update_account_info_proto_msgTypes[0].OneofWrappers = []interface{}{}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_rpc_update_account_info_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_rpc_update_account_info_proto_goTypes,
+		DependencyIndexes: file_rpc_update_account_info_proto_depIdxs,
+		MessageInfos:      file_rpc_update_account_info_proto_msgTypes,
+	}.Build()
+	File_rpc_update_account_info_proto = out.File
+	file_rpc_update_account_info_proto_rawDesc = nil
+	file_rpc_update_account_info_proto_goTypes = nil
+	file_rpc_update_account_info_proto_depIdxs = nil
+}
diff --git a/bff/pb/rpc_update_account_privacy.pb.go b/bff/pb/rpc_update_account_privacy.pb.go
index c730c57..47c4316 100644
--- a/bff/pb/rpc_update_account_privacy.pb.go
+++ b/bff/pb/rpc_update_account_privacy.pb.go
@@ -26,7 +26,7 @@ type UpdateAccountPrivacyRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Id              uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	AccountId       uint64 `protobuf:"varint,1,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"`
 	PrivacyAccepted bool   `protobuf:"varint,2,opt,name=privacy_accepted,json=privacyAccepted,proto3" json:"privacy_accepted,omitempty"`
 }
 
@@ -62,9 +62,9 @@ func (*UpdateAccountPrivacyRequest) Descriptor() ([]byte, []int) {
 	return file_rpc_update_account_privacy_proto_rawDescGZIP(), []int{0}
 }
 
-func (x *UpdateAccountPrivacyRequest) GetId() uint64 {
+func (x *UpdateAccountPrivacyRequest) GetAccountId() uint64 {
 	if x != nil {
-		return x.Id
+		return x.AccountId
 	}
 	return 0
 }
@@ -81,7 +81,7 @@ type UpdateAccountPrivacyResponse struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Account *Account `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"`
+	AccountInfo *AccountInfo `protobuf:"bytes,1,opt,name=account_info,json=accountInfo,proto3" json:"account_info,omitempty"`
 }
 
 func (x *UpdateAccountPrivacyResponse) Reset() {
@@ -116,9 +116,9 @@ func (*UpdateAccountPrivacyResponse) Descriptor() ([]byte, []int) {
 	return file_rpc_update_account_privacy_proto_rawDescGZIP(), []int{1}
 }
 
-func (x *UpdateAccountPrivacyResponse) GetAccount() *Account {
+func (x *UpdateAccountPrivacyResponse) GetAccountInfo() *AccountInfo {
 	if x != nil {
-		return x.Account
+		return x.AccountInfo
 	}
 	return nil
 }
@@ -131,35 +131,39 @@ var file_rpc_update_account_privacy_proto_rawDesc = []byte{
 	0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67,
 	0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74,
 	0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x87, 0x02, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x04, 0x42, 0x0e, 0x92, 0x41, 0x0b, 0x4a, 0x01, 0x31, 0xa2, 0x02, 0x05, 0x69, 0x6e, 0x74, 0x36,
-	0x34, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x10, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79,
-	0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42,
-	0x0a, 0x92, 0x41, 0x07, 0x4a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x70, 0x72, 0x69,
-	0x76, 0x61, 0x63, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x3a, 0x90, 0x01, 0x92,
-	0x41, 0x8c, 0x01, 0x0a, 0x62, 0x2a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63,
-	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x20, 0x43, 0x6f,
-	0x6e, 0x73, 0x65, 0x6e, 0x74, 0x32, 0x28, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68,
-	0x65, 0x20, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e,
-	0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xd2,
-	0x01, 0x02, 0x69, 0x64, 0xd2, 0x01, 0x10, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61,
-	0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x32, 0x26, 0x7b, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20,
-	0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63,
-	0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x7d, 0x22,
-	0x83, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
-	0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x12, 0x3b, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x14,
-	0x92, 0x41, 0x11, 0x2a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x41, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x26, 0x92,
-	0x41, 0x23, 0x0a, 0x21, 0x2a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x20, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
-	0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62,
-	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x12, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f,
+	0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa7, 0x02, 0x0a, 0x1b, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76,
+	0x61, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x0a, 0x61, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x0e,
+	0x92, 0x41, 0x0b, 0x4a, 0x01, 0x31, 0xa2, 0x02, 0x05, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x09,
+	0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x10, 0x70, 0x72, 0x69,
+	0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x08, 0x42, 0x0a, 0x92, 0x41, 0x07, 0x4a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52,
+	0x0f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64,
+	0x3a, 0xa1, 0x01, 0x92, 0x41, 0x9d, 0x01, 0x0a, 0x6b, 0x2a, 0x23, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x50,
+	0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x32, 0x2c,
+	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x69, 0x76, 0x61,
+	0x63, 0x79, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e,
+	0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0xd2, 0x01, 0x02, 0x69,
+	0x64, 0xd2, 0x01, 0x10, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65,
+	0x70, 0x74, 0x65, 0x64, 0x32, 0x2e, 0x7b, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f,
+	0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x76, 0x61,
+	0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x74, 0x72,
+	0x75, 0x65, 0x20, 0x7d, 0x22, 0x99, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62,
+	0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x18, 0x92, 0x41,
+	0x15, 0x2a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49,
+	0x6e, 0x66, 0x6f, 0x3a, 0x2b, 0x92, 0x41, 0x28, 0x0a, 0x26, 0x2a, 0x24, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x20,
+	0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69,
+	0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x33,
 }
 
 var (
@@ -178,10 +182,10 @@ var file_rpc_update_account_privacy_proto_msgTypes = make([]protoimpl.MessageInf
 var file_rpc_update_account_privacy_proto_goTypes = []interface{}{
 	(*UpdateAccountPrivacyRequest)(nil),  // 0: pb.UpdateAccountPrivacyRequest
 	(*UpdateAccountPrivacyResponse)(nil), // 1: pb.UpdateAccountPrivacyResponse
-	(*Account)(nil),                      // 2: pb.Account
+	(*AccountInfo)(nil),                  // 2: pb.AccountInfo
 }
 var file_rpc_update_account_privacy_proto_depIdxs = []int32{
-	2, // 0: pb.UpdateAccountPrivacyResponse.account:type_name -> pb.Account
+	2, // 0: pb.UpdateAccountPrivacyResponse.account_info:type_name -> pb.AccountInfo
 	1, // [1:1] is the sub-list for method output_type
 	1, // [1:1] is the sub-list for method input_type
 	1, // [1:1] is the sub-list for extension type_name
@@ -194,7 +198,7 @@ func file_rpc_update_account_privacy_proto_init() {
 	if File_rpc_update_account_privacy_proto != nil {
 		return
 	}
-	file_account_proto_init()
+	file_account_info_proto_init()
 	if !protoimpl.UnsafeEnabled {
 		file_rpc_update_account_privacy_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*UpdateAccountPrivacyRequest); i {
diff --git a/bff/pb/service_df.pb.go b/bff/pb/service_df.pb.go
index b7d9e1a..e1795e9 100644
--- a/bff/pb/service_df.pb.go
+++ b/bff/pb/service_df.pb.go
@@ -54,257 +54,308 @@ var file_service_df_proto_rawDesc = []byte{
 	0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
 	0x20, 0x72, 0x70, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f,
 	0x75, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x1a, 0x0f, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x73,
-	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63,
-	0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f,
-	0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x72,
-	0x70, 0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f,
-	0x6c, 0x6f, 0x67, 0x5f, 0x62, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x72, 0x70, 0x63, 0x5f, 0x75, 0x70, 0x6c, 0x6f,
-	0x61, 0x64, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x1a, 0x19, 0x72, 0x70, 0x63, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x64, 0x6f,
-	0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x72, 0x70,
-	0x63, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x32, 0x95, 0x1c, 0x0a, 0x02, 0x64, 0x66, 0x12, 0x42, 0x0a, 0x05, 0x4c,
-	0x6f, 0x67, 0x69, 0x6e, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69,
-	0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02,
-	0x0e, 0x3a, 0x01, 0x2a, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12,
-	0x68, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12,
-	0x17, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65,
-	0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65,
-	0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f,
-	0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x72, 0x65, 0x66, 0x72,
-	0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0xa4, 0x01, 0x0a, 0x0c, 0x4c, 0x69,
-	0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e,
-	0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73,
-	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x92,
-	0x41, 0x2f, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+	0x6f, 0x1a, 0x1d, 0x72, 0x70, 0x63, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x1a, 0x1a, 0x72, 0x70, 0x63, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x72, 0x70,
+	0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69,
+	0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x72, 0x70, 0x63, 0x5f, 0x75,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e,
+	0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x6f,
+	0x67, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, 0x5f, 0x6c,
+	0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f,
+	0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63,
+	0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72,
+	0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x62, 0x79, 0x5f, 0x70, 0x65,
+	0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x72,
+	0x70, 0x63, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x72, 0x70, 0x63, 0x5f, 0x64, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x72, 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f,
+	0x65, 0x6d, 0x61, 0x69, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xc8, 0x21, 0x0a, 0x02,
+	0x64, 0x66, 0x12, 0x42, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x10, 0x2e, 0x70, 0x62,
+	0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e,
+	0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x3a, 0x01, 0x2a, 0x22, 0x09, 0x2f, 0x76, 0x31,
+	0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x68, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73,
+	0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x66, 0x72,
+	0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x18, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65,
+	0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+	0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x2f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
+	0x12, 0xa4, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e,
+	0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x92, 0x41, 0x2f, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20,
+	0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72,
+	0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27,
+	0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73,
+	0x74, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63,
+	0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c,
+	0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73, 0x73,
+	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x92, 0x41, 0x27,
+	0x12, 0x13, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20,
+	0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65,
+	0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a,
+	0x32, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x62,
+	0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x92, 0x01, 0x0a,
+	0x0a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62,
+	0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x92, 0x41, 0x2d, 0x12,
+	0x19, 0x47, 0x65, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20,
+	0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a,
+	0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93,
+	0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73,
+	0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64,
+	0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62,
+	0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x2e, 0x12, 0x1a, 0x4c, 0x69, 0x73, 0x74,
+	0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x5b, 0x61, 0x64, 0x6d, 0x69, 0x6e,
+	0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x5d, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72,
+	0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a,
+	0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73,
+	0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x83, 0x01, 0x0a, 0x0d, 0x43,
+	0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70,
+	0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x3d, 0x92, 0x41, 0x14, 0x12, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x41,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20,
+	0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x12, 0x91, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63,
+	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70,
+	0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e, 0x55, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x62, 0x10, 0x0a, 0x0e,
+	0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x32, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x12, 0xaf, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74,
+	0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x66,
+	0x92, 0x41, 0x31, 0x12, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x49, 0x6e, 0x66, 0x6f, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f,
+	0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75,
+	0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x31, 0x2f,
+	0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa7, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x41,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e,
+	0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74,
+	0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x5b, 0x92, 0x41, 0x32, 0x12, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x20, 0x5b, 0x61, 0x64, 0x6d,
+	0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x5d, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65,
+	0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20,
+	0x12, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x6c,
+	0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
+	0x12, 0xa6, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x54, 0x92, 0x41, 0x26, 0x12, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x62, 0x10, 0x0a, 0x0e,
+	0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0xa6, 0x01, 0x0a, 0x11, 0x55, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12,
+	0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e,
+	0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x92, 0x41,
+	0x26, 0x12, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x49, 0x6e, 0x66, 0x6f, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65,
+	0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a,
+	0x32, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x75,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e,
+	0x66, 0x6f, 0x12, 0xbf, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63,
+	0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x12, 0x1f, 0x2e, 0x70, 0x62,
+	0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72,
+	0x69, 0x76, 0x61, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x70,
+	0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50,
+	0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64,
+	0x92, 0x41, 0x33, 0x12, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f,
+	0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x20, 0x53, 0x65, 0x74, 0x74,
+	0x69, 0x6e, 0x67, 0x73, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72,
+	0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a, 0x01, 0x2a, 0x32,
+	0x23, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x69,
+	0x76, 0x61, 0x63, 0x79, 0x12, 0x8b, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50,
+	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18,
+	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x21, 0x12, 0x0d, 0x43,
+	0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x62, 0x10, 0x0a, 0x0e,
+	0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72,
+	0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x73,
+	0x6f, 0x6e, 0x12, 0x8b, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72,
+	0x73, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50,
+	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70,
+	0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x21, 0x12, 0x0d, 0x55, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a,
+	0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93,
+	0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x32, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f,
+	0x6e, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e,
+	0x12, 0x84, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x14,
+	0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72,
+	0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x92, 0x41, 0x24,
+	0x12, 0x10, 0x47, 0x65, 0x74, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20,
+	0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75,
+	0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f,
+	0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x73,
+	0x6f, 0x6e, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72,
+	0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x92, 0x41, 0x27,
+	0x12, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20,
+	0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65,
+	0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f,
+	0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74,
+	0x65, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01,
+	0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x2e,
+	0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50,
+	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e,
+	0x92, 0x41, 0x2e, 0x12, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
 	0x73, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x62,
 	0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12,
-	0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73,
-	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69,
-	0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d,
-	0x12, 0x92, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
-	0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73, 0x73,
-	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e,
-	0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x92, 0x41, 0x27, 0x12, 0x13, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
-	0x20, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10,
-	0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00,
-	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x32, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73,
-	0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65,
-	0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x92, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62,
-	0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x55, 0x92, 0x41, 0x2d, 0x12, 0x19, 0x47, 0x65, 0x74, 0x20, 0x41, 0x63,
-	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41,
-	0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31,
-	0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63,
-	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0c, 0x4c,
-	0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62,
-	0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63,
-	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53,
-	0x92, 0x41, 0x2e, 0x12, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
-	0x74, 0x73, 0x20, 0x5b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x5d, 0x62,
-	0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12,
-	0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x73, 0x12, 0x7f, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19,
-	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
-	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x10, 0x12, 0x0e,
-	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x82, 0xd3,
-	0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41,
-	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61,
-	0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f,
-	0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22,
-	0x12, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68,
-	0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x32, 0x1b, 0x2f, 0x76, 0x31,
-	0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0xbf, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63,
-	0x79, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63,
-	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x92, 0x41, 0x33, 0x12, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74,
-	0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63,
-	0x79, 0x20, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a,
+	0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72,
+	0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e,
+	0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x91,
+	0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74,
+	0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d,
+	0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e,
+	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e, 0x43, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a,
 	0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93,
-	0x02, 0x28, 0x3a, 0x01, 0x2a, 0x32, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x12, 0x8b, 0x01, 0x0a, 0x0c, 0x43,
-	0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62,
-	0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48,
-	0x92, 0x41, 0x21, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73,
-	0x6f, 0x6e, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75,
-	0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f,
-	0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74,
-	0x65, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x8b, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x55,
-	0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65,
-	0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41,
-	0x21, 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
-	0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68,
-	0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x32, 0x19, 0x2f, 0x76, 0x31,
-	0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f,
-	0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x84, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x50, 0x65,
-	0x72, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72,
-	0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e,
-	0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x4a, 0x92, 0x41, 0x24, 0x12, 0x10, 0x47, 0x65, 0x74, 0x20, 0x50, 0x65, 0x72, 0x73,
-	0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65,
-	0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d,
-	0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x65,
-	0x74, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x93, 0x01,
-	0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x17,
-	0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c,
-	0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x50, 0x92, 0x41, 0x27, 0x12, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x50,
-	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a,
-	0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4,
-	0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73,
-	0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2f, 0x7b,
-	0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x73,
-	0x6f, 0x6e, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72,
-	0x73, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x70, 0x62,
-	0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x92, 0x41, 0x2e, 0x12, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x20,
-	0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65,
-	0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f,
-	0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f,
-	0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x5f, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50,
-	0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61,
-	0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d,
-	0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22,
-	0x12, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74,
-	0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68,
-	0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31,
-	0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74,
-	0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74,
-	0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
-	0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x92, 0x41, 0x25, 0x12, 0x11, 0x47, 0x65, 0x74,
-	0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10,
+	0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65,
+	0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
+	0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65,
+	0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x4d, 0x92, 0x41, 0x25, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65,
+	0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65,
+	0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f,
+	0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x67,
+	0x65, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12,
+	0x99, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
+	0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79,
+	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62,
+	0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x28, 0x12, 0x14, 0x44, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49,
+	0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74,
+	0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x2a, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x70,
+	0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x70,
+	0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x0c,
+	0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x70,
+	0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50,
+	0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x61, 0x92, 0x41, 0x2f, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69,
+	0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74,
+	0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x70,
+	0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79,
+	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69,
+	0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79,
+	0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19,
+	0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
+	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e,
+	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x10,
 	0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00,
-	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d,
-	0x65, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74,
-	0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
-	0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c,
-	0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79,
-	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41,
-	0x28, 0x12, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
-	0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61,
-	0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x2a,
-	0x20, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x65,
-	0x6c, 0x65, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64,
-	0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
-	0x74, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d,
-	0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62,
-	0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x92, 0x41, 0x2f, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74,
-	0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61,
-	0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12,
-	0x27, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69,
-	0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63,
-	0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
-	0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79,
-	0x6d, 0x65, 0x6e, 0x74, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72,
-	0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x32,
-	0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xb0, 0x01, 0x0a,
-	0x0e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x12,
-	0x19, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73,
-	0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e,
-	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x92, 0x41, 0x30, 0x12, 0x1c, 0x4c, 0x69, 0x73,
-	0x74, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x20, 0x62, 0x79, 0x20,
-	0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42,
-	0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02,
-	0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f, 0x6c,
-	0x6f, 0x67, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f,
-	0x6c, 0x6f, 0x67, 0x2f, 0x7b, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12,
-	0xca, 0x02, 0x0a, 0x0e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65,
-	0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x6f,
-	0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e,
-	0x70, 0x62, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
-	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x02, 0x92, 0x41, 0xe0, 0x01,
-	0x12, 0x1b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
-	0x74, 0x20, 0x5b, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x48, 0x54, 0x54, 0x50, 0x5d, 0x1a, 0xae, 0x01,
-	0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x69, 0x61, 0x20, 0x73, 0x77, 0x61, 0x67,
-	0x67, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69,
-	0x62, 0x6c, 0x65, 0x2e, 0x20, 0x54, 0x72, 0x79, 0x20, 0x60, 0x60, 0x60, 0x63, 0x75, 0x72, 0x6c,
-	0x20, 0x2d, 0x58, 0x20, 0x50, 0x4f, 0x53, 0x54, 0x20, 0x2d, 0x48, 0x20, 0x22, 0x41, 0x75, 0x74,
-	0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x42, 0x65, 0x61, 0x72,
-	0x65, 0x72, 0x20, 0x7b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x7d, 0x22, 0x20, 0x2d, 0x46, 0x20, 0x22,
-	0x66, 0x69, 0x6c, 0x65, 0x3d, 0x40, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x2f, 0x66,
-	0x69, 0x6c, 0x65, 0x22, 0x20, 0x2d, 0x46, 0x20, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f,
-	0x69, 0x64, 0x3d, 0x31, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x7b, 0x73,
-	0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x52, 0x49, 0x7d, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
-	0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x60, 0x60, 0x60, 0x62, 0x10,
-	0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00,
-	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x64, 0x6f, 0x63, 0x75,
-	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x9f, 0x01, 0x0a,
-	0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12,
-	0x19, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d,
-	0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e,
-	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x29, 0x12, 0x15, 0x44, 0x65, 0x6c,
-	0x65, 0x74, 0x65, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20,
-	0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75,
-	0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x2a, 0x22, 0x2f, 0x76, 0x31, 0x2f,
-	0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65,
-	0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa2,
-	0x01, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16,
-	0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x69,
-	0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
-	0x62, 0x92, 0x41, 0x2d, 0x12, 0x2b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x20, 0x45, 0x6d, 0x61,
-	0x69, 0x6c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f,
-	0x69, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65,
-	0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72,
-	0x69, 0x66, 0x79, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b,
-	0x65, 0x79, 0x7d, 0x1a, 0x07, 0x92, 0x41, 0x04, 0x12, 0x02, 0x64, 0x66, 0x42, 0xb0, 0x01, 0x92,
-	0x41, 0x93, 0x01, 0x12, 0x44, 0x0a, 0x06, 0x64, 0x66, 0x20, 0x41, 0x50, 0x49, 0x22, 0x35, 0x0a,
-	0x06, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x12, 0x1c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f,
-	0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73,
-	0x63, 0x62, 0x2f, 0x64, 0x66, 0x1a, 0x0d, 0x64, 0x65, 0x76, 0x40, 0x69, 0x74, 0x73, 0x73, 0x63,
-	0x62, 0x2e, 0x64, 0x65, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x2a, 0x02, 0x01, 0x02, 0x32, 0x10, 0x61,
-	0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a,
-	0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f,
-	0x6e, 0x5a, 0x23, 0x0a, 0x21, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74,
-	0x68, 0x12, 0x13, 0x08, 0x02, 0x1a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
-	0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62, 0x62,
-	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x32, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70,
+	0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70,
+	0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xb0, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x52,
+	0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x4c,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
+	0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x67, 0x92, 0x41, 0x30, 0x12, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x52, 0x65, 0x74, 0x75,
+	0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x20, 0x62, 0x79, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e,
+	0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41,
+	0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31,
+	0x2f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x2f, 0x6c, 0x69, 0x73,
+	0x74, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x2f, 0x7b, 0x70,
+	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x02, 0x0a, 0x0e, 0x55, 0x70,
+	0x6c, 0x6f, 0x61, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70,
+	0x62, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x6c,
+	0x6f, 0x61, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x80, 0x02, 0x92, 0x41, 0xe0, 0x01, 0x12, 0x1b, 0x55, 0x70, 0x6c, 0x6f,
+	0x61, 0x64, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x5b, 0x6f, 0x6e, 0x6c,
+	0x79, 0x20, 0x48, 0x54, 0x54, 0x50, 0x5d, 0x1a, 0xae, 0x01, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e,
+	0x67, 0x20, 0x76, 0x69, 0x61, 0x20, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x20, 0x69, 0x73,
+	0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x2e, 0x20, 0x54,
+	0x72, 0x79, 0x20, 0x60, 0x60, 0x60, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x2d, 0x58, 0x20, 0x50, 0x4f,
+	0x53, 0x54, 0x20, 0x2d, 0x48, 0x20, 0x22, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x20, 0x7b, 0x74, 0x6f,
+	0x6b, 0x65, 0x6e, 0x7d, 0x22, 0x20, 0x2d, 0x46, 0x20, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x3d, 0x40,
+	0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x20, 0x2d,
+	0x46, 0x20, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x3d, 0x31, 0x22, 0x20,
+	0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x7b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55,
+	0x52, 0x49, 0x7d, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70,
+	0x6c, 0x6f, 0x61, 0x64, 0x22, 0x60, 0x60, 0x60, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65,
+	0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16,
+	0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f,
+	0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x9f, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74,
+	0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x44,
+	0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x56, 0x92, 0x41, 0x29, 0x12, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x44, 0x6f,
+	0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e,
+	0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x24, 0x2a, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+	0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa2, 0x01, 0x0a, 0x0b, 0x56, 0x65, 0x72,
+	0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65,
+	0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69,
+	0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x62, 0x92, 0x41, 0x2d, 0x12, 0x2b,
+	0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x20, 0x77, 0x69, 0x74,
+	0x68, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x20, 0x61, 0x6e, 0x64,
+	0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+	0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x65, 0x6d,
+	0x61, 0x69, 0x6c, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d,
+	0x2f, 0x7b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x7d, 0x1a, 0x07, 0x92,
+	0x41, 0x04, 0x12, 0x02, 0x64, 0x66, 0x42, 0xb0, 0x01, 0x92, 0x41, 0x93, 0x01, 0x12, 0x44, 0x0a,
+	0x06, 0x64, 0x66, 0x20, 0x41, 0x50, 0x49, 0x22, 0x35, 0x0a, 0x06, 0x69, 0x74, 0x73, 0x73, 0x63,
+	0x62, 0x12, 0x1c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75,
+	0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x1a,
+	0x0d, 0x64, 0x65, 0x76, 0x40, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2e, 0x64, 0x65, 0x32, 0x03,
+	0x31, 0x2e, 0x30, 0x2a, 0x02, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69,
+	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x5a, 0x23, 0x0a, 0x21, 0x0a,
+	0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x13, 0x08, 0x02, 0x1a,
+	0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02,
+	0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73,
+	0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33,
 }
 
 var file_service_df_proto_goTypes = []interface{}{
@@ -316,44 +367,52 @@ var file_service_df_proto_goTypes = []interface{}{
 	(*ListAccountsRequest)(nil),          // 5: pb.ListAccountsRequest
 	(*CreateAccountRequest)(nil),         // 6: pb.CreateAccountRequest
 	(*UpdateAccountRequest)(nil),         // 7: pb.UpdateAccountRequest
-	(*UpdateAccountPrivacyRequest)(nil),  // 8: pb.UpdateAccountPrivacyRequest
-	(*CreatePersonRequest)(nil),          // 9: pb.CreatePersonRequest
-	(*UpdatePersonRequest)(nil),          // 10: pb.UpdatePersonRequest
-	(*GetPersonRequest)(nil),             // 11: pb.GetPersonRequest
-	(*DeletePersonRequest)(nil),          // 12: pb.DeletePersonRequest
-	(*ListPersonsRequest)(nil),           // 13: pb.ListPersonsRequest
-	(*CreatePaymentRequest)(nil),         // 14: pb.CreatePaymentRequest
-	(*GetPaymentRequest)(nil),            // 15: pb.GetPaymentRequest
-	(*DeletePaymentRequest)(nil),         // 16: pb.DeletePaymentRequest
-	(*ListPaymentsRequest)(nil),          // 17: pb.ListPaymentsRequest
-	(*UpdatePaymentRequest)(nil),         // 18: pb.UpdatePaymentRequest
-	(*ListReturnsLogRequest)(nil),        // 19: pb.ListReturnsLogRequest
-	(*UploadDocumentRequest)(nil),        // 20: pb.UploadDocumentRequest
-	(*DeleteDocumentRequest)(nil),        // 21: pb.DeleteDocumentRequest
-	(*VerifyEmailRequest)(nil),           // 22: pb.VerifyEmailRequest
-	(*LoginResponse)(nil),                // 23: pb.LoginResponse
-	(*RefreshTokenResponse)(nil),         // 24: pb.RefreshTokenResponse
-	(*ListSessionsResponse)(nil),         // 25: pb.ListSessionsResponse
-	(*BlockSessionResponse)(nil),         // 26: pb.BlockSessionResponse
-	(*GetAccountResponse)(nil),           // 27: pb.GetAccountResponse
-	(*ListAccountsResponse)(nil),         // 28: pb.ListAccountsResponse
-	(*CreateAccountResponse)(nil),        // 29: pb.CreateAccountResponse
-	(*UpdateAccountResponse)(nil),        // 30: pb.UpdateAccountResponse
-	(*UpdateAccountPrivacyResponse)(nil), // 31: pb.UpdateAccountPrivacyResponse
-	(*CreatePersonResponse)(nil),         // 32: pb.CreatePersonResponse
-	(*UpdatePersonResponse)(nil),         // 33: pb.UpdatePersonResponse
-	(*GetPersonResponse)(nil),            // 34: pb.GetPersonResponse
-	(*DeletePersonResponse)(nil),         // 35: pb.DeletePersonResponse
-	(*ListPersonsResponse)(nil),          // 36: pb.ListPersonsResponse
-	(*CreatePaymentResponse)(nil),        // 37: pb.CreatePaymentResponse
-	(*GetPaymentResponse)(nil),           // 38: pb.GetPaymentResponse
-	(*DeletePaymentResponse)(nil),        // 39: pb.DeletePaymentResponse
-	(*ListPaymentsResponse)(nil),         // 40: pb.ListPaymentsResponse
-	(*UpdatePaymentResponse)(nil),        // 41: pb.UpdatePaymentResponse
-	(*ListReturnsLogResponse)(nil),       // 42: pb.ListReturnsLogResponse
-	(*UploadDocumentResponse)(nil),       // 43: pb.UploadDocumentResponse
-	(*DeleteDocumentResponse)(nil),       // 44: pb.DeleteDocumentResponse
-	(*VerifyEmailResponse)(nil),          // 45: pb.VerifyEmailResponse
+	(*GetAccountInfoRequest)(nil),        // 8: pb.GetAccountInfoRequest
+	(*ListAccountInfoRequest)(nil),       // 9: pb.ListAccountInfoRequest
+	(*CreateAccountInfoRequest)(nil),     // 10: pb.CreateAccountInfoRequest
+	(*UpdateAccountInfoRequest)(nil),     // 11: pb.UpdateAccountInfoRequest
+	(*UpdateAccountPrivacyRequest)(nil),  // 12: pb.UpdateAccountPrivacyRequest
+	(*CreatePersonRequest)(nil),          // 13: pb.CreatePersonRequest
+	(*UpdatePersonRequest)(nil),          // 14: pb.UpdatePersonRequest
+	(*GetPersonRequest)(nil),             // 15: pb.GetPersonRequest
+	(*DeletePersonRequest)(nil),          // 16: pb.DeletePersonRequest
+	(*ListPersonsRequest)(nil),           // 17: pb.ListPersonsRequest
+	(*CreatePaymentRequest)(nil),         // 18: pb.CreatePaymentRequest
+	(*GetPaymentRequest)(nil),            // 19: pb.GetPaymentRequest
+	(*DeletePaymentRequest)(nil),         // 20: pb.DeletePaymentRequest
+	(*ListPaymentsRequest)(nil),          // 21: pb.ListPaymentsRequest
+	(*UpdatePaymentRequest)(nil),         // 22: pb.UpdatePaymentRequest
+	(*ListReturnsLogRequest)(nil),        // 23: pb.ListReturnsLogRequest
+	(*UploadDocumentRequest)(nil),        // 24: pb.UploadDocumentRequest
+	(*DeleteDocumentRequest)(nil),        // 25: pb.DeleteDocumentRequest
+	(*VerifyEmailRequest)(nil),           // 26: pb.VerifyEmailRequest
+	(*LoginResponse)(nil),                // 27: pb.LoginResponse
+	(*RefreshTokenResponse)(nil),         // 28: pb.RefreshTokenResponse
+	(*ListSessionsResponse)(nil),         // 29: pb.ListSessionsResponse
+	(*BlockSessionResponse)(nil),         // 30: pb.BlockSessionResponse
+	(*GetAccountResponse)(nil),           // 31: pb.GetAccountResponse
+	(*ListAccountsResponse)(nil),         // 32: pb.ListAccountsResponse
+	(*CreateAccountResponse)(nil),        // 33: pb.CreateAccountResponse
+	(*UpdateAccountResponse)(nil),        // 34: pb.UpdateAccountResponse
+	(*GetAccountInfoResponse)(nil),       // 35: pb.GetAccountInfoResponse
+	(*ListAccountInfoResponse)(nil),      // 36: pb.ListAccountInfoResponse
+	(*CreateAccountInfoResponse)(nil),    // 37: pb.CreateAccountInfoResponse
+	(*UpdateAccountInfoResponse)(nil),    // 38: pb.UpdateAccountInfoResponse
+	(*UpdateAccountPrivacyResponse)(nil), // 39: pb.UpdateAccountPrivacyResponse
+	(*CreatePersonResponse)(nil),         // 40: pb.CreatePersonResponse
+	(*UpdatePersonResponse)(nil),         // 41: pb.UpdatePersonResponse
+	(*GetPersonResponse)(nil),            // 42: pb.GetPersonResponse
+	(*DeletePersonResponse)(nil),         // 43: pb.DeletePersonResponse
+	(*ListPersonsResponse)(nil),          // 44: pb.ListPersonsResponse
+	(*CreatePaymentResponse)(nil),        // 45: pb.CreatePaymentResponse
+	(*GetPaymentResponse)(nil),           // 46: pb.GetPaymentResponse
+	(*DeletePaymentResponse)(nil),        // 47: pb.DeletePaymentResponse
+	(*ListPaymentsResponse)(nil),         // 48: pb.ListPaymentsResponse
+	(*UpdatePaymentResponse)(nil),        // 49: pb.UpdatePaymentResponse
+	(*ListReturnsLogResponse)(nil),       // 50: pb.ListReturnsLogResponse
+	(*UploadDocumentResponse)(nil),       // 51: pb.UploadDocumentResponse
+	(*DeleteDocumentResponse)(nil),       // 52: pb.DeleteDocumentResponse
+	(*VerifyEmailResponse)(nil),          // 53: pb.VerifyEmailResponse
 }
 var file_service_df_proto_depIdxs = []int32{
 	0,  // 0: pb.df.Login:input_type -> pb.LoginRequest
@@ -364,46 +423,54 @@ var file_service_df_proto_depIdxs = []int32{
 	5,  // 5: pb.df.ListAccounts:input_type -> pb.ListAccountsRequest
 	6,  // 6: pb.df.CreateAccount:input_type -> pb.CreateAccountRequest
 	7,  // 7: pb.df.UpdateAccount:input_type -> pb.UpdateAccountRequest
-	8,  // 8: pb.df.UpdateAccountPrivacy:input_type -> pb.UpdateAccountPrivacyRequest
-	9,  // 9: pb.df.CreatePerson:input_type -> pb.CreatePersonRequest
-	10, // 10: pb.df.UpdatePerson:input_type -> pb.UpdatePersonRequest
-	11, // 11: pb.df.GetPerson:input_type -> pb.GetPersonRequest
-	12, // 12: pb.df.DeletePerson:input_type -> pb.DeletePersonRequest
-	13, // 13: pb.df.ListPersons:input_type -> pb.ListPersonsRequest
-	14, // 14: pb.df.CreatePayment:input_type -> pb.CreatePaymentRequest
-	15, // 15: pb.df.GetPayment:input_type -> pb.GetPaymentRequest
-	16, // 16: pb.df.DeletePayment:input_type -> pb.DeletePaymentRequest
-	17, // 17: pb.df.ListPayments:input_type -> pb.ListPaymentsRequest
-	18, // 18: pb.df.UpdatePayment:input_type -> pb.UpdatePaymentRequest
-	19, // 19: pb.df.ListReturnsLog:input_type -> pb.ListReturnsLogRequest
-	20, // 20: pb.df.UploadDocument:input_type -> pb.UploadDocumentRequest
-	21, // 21: pb.df.DeleteDocument:input_type -> pb.DeleteDocumentRequest
-	22, // 22: pb.df.VerifyEmail:input_type -> pb.VerifyEmailRequest
-	23, // 23: pb.df.Login:output_type -> pb.LoginResponse
-	24, // 24: pb.df.RefreshToken:output_type -> pb.RefreshTokenResponse
-	25, // 25: pb.df.ListSessions:output_type -> pb.ListSessionsResponse
-	26, // 26: pb.df.BlockSession:output_type -> pb.BlockSessionResponse
-	27, // 27: pb.df.GetAccount:output_type -> pb.GetAccountResponse
-	28, // 28: pb.df.ListAccounts:output_type -> pb.ListAccountsResponse
-	29, // 29: pb.df.CreateAccount:output_type -> pb.CreateAccountResponse
-	30, // 30: pb.df.UpdateAccount:output_type -> pb.UpdateAccountResponse
-	31, // 31: pb.df.UpdateAccountPrivacy:output_type -> pb.UpdateAccountPrivacyResponse
-	32, // 32: pb.df.CreatePerson:output_type -> pb.CreatePersonResponse
-	33, // 33: pb.df.UpdatePerson:output_type -> pb.UpdatePersonResponse
-	34, // 34: pb.df.GetPerson:output_type -> pb.GetPersonResponse
-	35, // 35: pb.df.DeletePerson:output_type -> pb.DeletePersonResponse
-	36, // 36: pb.df.ListPersons:output_type -> pb.ListPersonsResponse
-	37, // 37: pb.df.CreatePayment:output_type -> pb.CreatePaymentResponse
-	38, // 38: pb.df.GetPayment:output_type -> pb.GetPaymentResponse
-	39, // 39: pb.df.DeletePayment:output_type -> pb.DeletePaymentResponse
-	40, // 40: pb.df.ListPayments:output_type -> pb.ListPaymentsResponse
-	41, // 41: pb.df.UpdatePayment:output_type -> pb.UpdatePaymentResponse
-	42, // 42: pb.df.ListReturnsLog:output_type -> pb.ListReturnsLogResponse
-	43, // 43: pb.df.UploadDocument:output_type -> pb.UploadDocumentResponse
-	44, // 44: pb.df.DeleteDocument:output_type -> pb.DeleteDocumentResponse
-	45, // 45: pb.df.VerifyEmail:output_type -> pb.VerifyEmailResponse
-	23, // [23:46] is the sub-list for method output_type
-	0,  // [0:23] is the sub-list for method input_type
+	8,  // 8: pb.df.GetAccountInfo:input_type -> pb.GetAccountInfoRequest
+	9,  // 9: pb.df.ListAccountInfo:input_type -> pb.ListAccountInfoRequest
+	10, // 10: pb.df.CreateAccountInfo:input_type -> pb.CreateAccountInfoRequest
+	11, // 11: pb.df.UpdateAccountInfo:input_type -> pb.UpdateAccountInfoRequest
+	12, // 12: pb.df.UpdateAccountPrivacy:input_type -> pb.UpdateAccountPrivacyRequest
+	13, // 13: pb.df.CreatePerson:input_type -> pb.CreatePersonRequest
+	14, // 14: pb.df.UpdatePerson:input_type -> pb.UpdatePersonRequest
+	15, // 15: pb.df.GetPerson:input_type -> pb.GetPersonRequest
+	16, // 16: pb.df.DeletePerson:input_type -> pb.DeletePersonRequest
+	17, // 17: pb.df.ListPersons:input_type -> pb.ListPersonsRequest
+	18, // 18: pb.df.CreatePayment:input_type -> pb.CreatePaymentRequest
+	19, // 19: pb.df.GetPayment:input_type -> pb.GetPaymentRequest
+	20, // 20: pb.df.DeletePayment:input_type -> pb.DeletePaymentRequest
+	21, // 21: pb.df.ListPayments:input_type -> pb.ListPaymentsRequest
+	22, // 22: pb.df.UpdatePayment:input_type -> pb.UpdatePaymentRequest
+	23, // 23: pb.df.ListReturnsLog:input_type -> pb.ListReturnsLogRequest
+	24, // 24: pb.df.UploadDocument:input_type -> pb.UploadDocumentRequest
+	25, // 25: pb.df.DeleteDocument:input_type -> pb.DeleteDocumentRequest
+	26, // 26: pb.df.VerifyEmail:input_type -> pb.VerifyEmailRequest
+	27, // 27: pb.df.Login:output_type -> pb.LoginResponse
+	28, // 28: pb.df.RefreshToken:output_type -> pb.RefreshTokenResponse
+	29, // 29: pb.df.ListSessions:output_type -> pb.ListSessionsResponse
+	30, // 30: pb.df.BlockSession:output_type -> pb.BlockSessionResponse
+	31, // 31: pb.df.GetAccount:output_type -> pb.GetAccountResponse
+	32, // 32: pb.df.ListAccounts:output_type -> pb.ListAccountsResponse
+	33, // 33: pb.df.CreateAccount:output_type -> pb.CreateAccountResponse
+	34, // 34: pb.df.UpdateAccount:output_type -> pb.UpdateAccountResponse
+	35, // 35: pb.df.GetAccountInfo:output_type -> pb.GetAccountInfoResponse
+	36, // 36: pb.df.ListAccountInfo:output_type -> pb.ListAccountInfoResponse
+	37, // 37: pb.df.CreateAccountInfo:output_type -> pb.CreateAccountInfoResponse
+	38, // 38: pb.df.UpdateAccountInfo:output_type -> pb.UpdateAccountInfoResponse
+	39, // 39: pb.df.UpdateAccountPrivacy:output_type -> pb.UpdateAccountPrivacyResponse
+	40, // 40: pb.df.CreatePerson:output_type -> pb.CreatePersonResponse
+	41, // 41: pb.df.UpdatePerson:output_type -> pb.UpdatePersonResponse
+	42, // 42: pb.df.GetPerson:output_type -> pb.GetPersonResponse
+	43, // 43: pb.df.DeletePerson:output_type -> pb.DeletePersonResponse
+	44, // 44: pb.df.ListPersons:output_type -> pb.ListPersonsResponse
+	45, // 45: pb.df.CreatePayment:output_type -> pb.CreatePaymentResponse
+	46, // 46: pb.df.GetPayment:output_type -> pb.GetPaymentResponse
+	47, // 47: pb.df.DeletePayment:output_type -> pb.DeletePaymentResponse
+	48, // 48: pb.df.ListPayments:output_type -> pb.ListPaymentsResponse
+	49, // 49: pb.df.UpdatePayment:output_type -> pb.UpdatePaymentResponse
+	50, // 50: pb.df.ListReturnsLog:output_type -> pb.ListReturnsLogResponse
+	51, // 51: pb.df.UploadDocument:output_type -> pb.UploadDocumentResponse
+	52, // 52: pb.df.DeleteDocument:output_type -> pb.DeleteDocumentResponse
+	53, // 53: pb.df.VerifyEmail:output_type -> pb.VerifyEmailResponse
+	27, // [27:54] is the sub-list for method output_type
+	0,  // [0:27] is the sub-list for method input_type
 	0,  // [0:0] is the sub-list for extension type_name
 	0,  // [0:0] is the sub-list for extension extendee
 	0,  // [0:0] is the sub-list for field type_name
@@ -429,6 +496,10 @@ func file_service_df_proto_init() {
 	file_rpc_list_accounts_proto_init()
 	file_rpc_update_account_proto_init()
 	file_rpc_update_account_privacy_proto_init()
+	file_rpc_create_account_info_proto_init()
+	file_rpc_get_account_info_proto_init()
+	file_rpc_list_account_info_proto_init()
+	file_rpc_update_account_info_proto_init()
 	file_rpc_login_proto_init()
 	file_rpc_list_sessions_proto_init()
 	file_rpc_refresh_token_proto_init()
diff --git a/bff/pb/service_df.pb.gw.go b/bff/pb/service_df.pb.gw.go
index ef95b50..66e10e8 100644
--- a/bff/pb/service_df.pb.gw.go
+++ b/bff/pb/service_df.pb.gw.go
@@ -341,6 +341,162 @@ func local_request_Df_UpdateAccount_0(ctx context.Context, marshaler runtime.Mar
 
 }
 
+func request_Df_GetAccountInfo_0(ctx context.Context, marshaler runtime.Marshaler, client DfClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GetAccountInfoRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["account_id"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "account_id")
+	}
+
+	protoReq.AccountId, err = runtime.Uint64(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "account_id", err)
+	}
+
+	msg, err := client.GetAccountInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_Df_GetAccountInfo_0(ctx context.Context, marshaler runtime.Marshaler, server DfServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GetAccountInfoRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["account_id"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "account_id")
+	}
+
+	protoReq.AccountId, err = runtime.Uint64(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "account_id", err)
+	}
+
+	msg, err := server.GetAccountInfo(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+var (
+	filter_Df_ListAccountInfo_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
+)
+
+func request_Df_ListAccountInfo_0(ctx context.Context, marshaler runtime.Marshaler, client DfClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq ListAccountInfoRequest
+	var metadata runtime.ServerMetadata
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Df_ListAccountInfo_0); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := client.ListAccountInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_Df_ListAccountInfo_0(ctx context.Context, marshaler runtime.Marshaler, server DfServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq ListAccountInfoRequest
+	var metadata runtime.ServerMetadata
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Df_ListAccountInfo_0); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := server.ListAccountInfo(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+func request_Df_CreateAccountInfo_0(ctx context.Context, marshaler runtime.Marshaler, client DfClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq CreateAccountInfoRequest
+	var metadata runtime.ServerMetadata
+
+	newReader, berr := utilities.IOReaderFactory(req.Body)
+	if berr != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+	}
+	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := client.CreateAccountInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_Df_CreateAccountInfo_0(ctx context.Context, marshaler runtime.Marshaler, server DfServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq CreateAccountInfoRequest
+	var metadata runtime.ServerMetadata
+
+	newReader, berr := utilities.IOReaderFactory(req.Body)
+	if berr != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+	}
+	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := server.CreateAccountInfo(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+func request_Df_UpdateAccountInfo_0(ctx context.Context, marshaler runtime.Marshaler, client DfClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq UpdateAccountInfoRequest
+	var metadata runtime.ServerMetadata
+
+	newReader, berr := utilities.IOReaderFactory(req.Body)
+	if berr != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+	}
+	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := client.UpdateAccountInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_Df_UpdateAccountInfo_0(ctx context.Context, marshaler runtime.Marshaler, server DfServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq UpdateAccountInfoRequest
+	var metadata runtime.ServerMetadata
+
+	newReader, berr := utilities.IOReaderFactory(req.Body)
+	if berr != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+	}
+	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := server.UpdateAccountInfo(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
 func request_Df_UpdateAccountPrivacy_0(ctx context.Context, marshaler runtime.Marshaler, client DfClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 	var protoReq UpdateAccountPrivacyRequest
 	var metadata runtime.ServerMetadata
@@ -1239,6 +1395,106 @@ func RegisterDfHandlerServer(ctx context.Context, mux *runtime.ServeMux, server
 
 	})
 
+	mux.Handle("GET", pattern_Df_GetAccountInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pb.Df/GetAccountInfo", runtime.WithHTTPPathPattern("/v1/accounts/get_account_info/{account_id}"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_Df_GetAccountInfo_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Df_GetAccountInfo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_Df_ListAccountInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pb.Df/ListAccountInfo", runtime.WithHTTPPathPattern("/v1/accounts/list_account_info"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_Df_ListAccountInfo_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Df_ListAccountInfo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("POST", pattern_Df_CreateAccountInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pb.Df/CreateAccountInfo", runtime.WithHTTPPathPattern("/v1/accounts/create_account_info"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_Df_CreateAccountInfo_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Df_CreateAccountInfo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("PATCH", pattern_Df_UpdateAccountInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pb.Df/UpdateAccountInfo", runtime.WithHTTPPathPattern("/v1/accounts/update_account_info"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_Df_UpdateAccountInfo_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Df_UpdateAccountInfo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("PATCH", pattern_Df_UpdateAccountPrivacy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -1831,6 +2087,94 @@ func RegisterDfHandlerClient(ctx context.Context, mux *runtime.ServeMux, client
 
 	})
 
+	mux.Handle("GET", pattern_Df_GetAccountInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/pb.Df/GetAccountInfo", runtime.WithHTTPPathPattern("/v1/accounts/get_account_info/{account_id}"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_Df_GetAccountInfo_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Df_GetAccountInfo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_Df_ListAccountInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/pb.Df/ListAccountInfo", runtime.WithHTTPPathPattern("/v1/accounts/list_account_info"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_Df_ListAccountInfo_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Df_ListAccountInfo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("POST", pattern_Df_CreateAccountInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/pb.Df/CreateAccountInfo", runtime.WithHTTPPathPattern("/v1/accounts/create_account_info"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_Df_CreateAccountInfo_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Df_CreateAccountInfo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("PATCH", pattern_Df_UpdateAccountInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/pb.Df/UpdateAccountInfo", runtime.WithHTTPPathPattern("/v1/accounts/update_account_info"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_Df_UpdateAccountInfo_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Df_UpdateAccountInfo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("PATCH", pattern_Df_UpdateAccountPrivacy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -2181,6 +2525,14 @@ var (
 
 	pattern_Df_UpdateAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "accounts", "update_account"}, ""))
 
+	pattern_Df_GetAccountInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "accounts", "get_account_info", "account_id"}, ""))
+
+	pattern_Df_ListAccountInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "accounts", "list_account_info"}, ""))
+
+	pattern_Df_CreateAccountInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "accounts", "create_account_info"}, ""))
+
+	pattern_Df_UpdateAccountInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "accounts", "update_account_info"}, ""))
+
 	pattern_Df_UpdateAccountPrivacy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "accounts", "update_account_privacy"}, ""))
 
 	pattern_Df_CreatePerson_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "persons", "create_person"}, ""))
@@ -2229,6 +2581,14 @@ var (
 
 	forward_Df_UpdateAccount_0 = runtime.ForwardResponseMessage
 
+	forward_Df_GetAccountInfo_0 = runtime.ForwardResponseMessage
+
+	forward_Df_ListAccountInfo_0 = runtime.ForwardResponseMessage
+
+	forward_Df_CreateAccountInfo_0 = runtime.ForwardResponseMessage
+
+	forward_Df_UpdateAccountInfo_0 = runtime.ForwardResponseMessage
+
 	forward_Df_UpdateAccountPrivacy_0 = runtime.ForwardResponseMessage
 
 	forward_Df_CreatePerson_0 = runtime.ForwardResponseMessage
diff --git a/bff/pb/service_df_grpc.pb.go b/bff/pb/service_df_grpc.pb.go
index 89bf273..568a0c0 100644
--- a/bff/pb/service_df_grpc.pb.go
+++ b/bff/pb/service_df_grpc.pb.go
@@ -27,6 +27,10 @@ const (
 	Df_ListAccounts_FullMethodName         = "/pb.df/ListAccounts"
 	Df_CreateAccount_FullMethodName        = "/pb.df/CreateAccount"
 	Df_UpdateAccount_FullMethodName        = "/pb.df/UpdateAccount"
+	Df_GetAccountInfo_FullMethodName       = "/pb.df/GetAccountInfo"
+	Df_ListAccountInfo_FullMethodName      = "/pb.df/ListAccountInfo"
+	Df_CreateAccountInfo_FullMethodName    = "/pb.df/CreateAccountInfo"
+	Df_UpdateAccountInfo_FullMethodName    = "/pb.df/UpdateAccountInfo"
 	Df_UpdateAccountPrivacy_FullMethodName = "/pb.df/UpdateAccountPrivacy"
 	Df_CreatePerson_FullMethodName         = "/pb.df/CreatePerson"
 	Df_UpdatePerson_FullMethodName         = "/pb.df/UpdatePerson"
@@ -56,6 +60,10 @@ type DfClient interface {
 	ListAccounts(ctx context.Context, in *ListAccountsRequest, opts ...grpc.CallOption) (*ListAccountsResponse, error)
 	CreateAccount(ctx context.Context, in *CreateAccountRequest, opts ...grpc.CallOption) (*CreateAccountResponse, error)
 	UpdateAccount(ctx context.Context, in *UpdateAccountRequest, opts ...grpc.CallOption) (*UpdateAccountResponse, error)
+	GetAccountInfo(ctx context.Context, in *GetAccountInfoRequest, opts ...grpc.CallOption) (*GetAccountInfoResponse, error)
+	ListAccountInfo(ctx context.Context, in *ListAccountInfoRequest, opts ...grpc.CallOption) (*ListAccountInfoResponse, error)
+	CreateAccountInfo(ctx context.Context, in *CreateAccountInfoRequest, opts ...grpc.CallOption) (*CreateAccountInfoResponse, error)
+	UpdateAccountInfo(ctx context.Context, in *UpdateAccountInfoRequest, opts ...grpc.CallOption) (*UpdateAccountInfoResponse, error)
 	UpdateAccountPrivacy(ctx context.Context, in *UpdateAccountPrivacyRequest, opts ...grpc.CallOption) (*UpdateAccountPrivacyResponse, error)
 	CreatePerson(ctx context.Context, in *CreatePersonRequest, opts ...grpc.CallOption) (*CreatePersonResponse, error)
 	UpdatePerson(ctx context.Context, in *UpdatePersonRequest, opts ...grpc.CallOption) (*UpdatePersonResponse, error)
@@ -153,6 +161,42 @@ func (c *dfClient) UpdateAccount(ctx context.Context, in *UpdateAccountRequest,
 	return out, nil
 }
 
+func (c *dfClient) GetAccountInfo(ctx context.Context, in *GetAccountInfoRequest, opts ...grpc.CallOption) (*GetAccountInfoResponse, error) {
+	out := new(GetAccountInfoResponse)
+	err := c.cc.Invoke(ctx, Df_GetAccountInfo_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dfClient) ListAccountInfo(ctx context.Context, in *ListAccountInfoRequest, opts ...grpc.CallOption) (*ListAccountInfoResponse, error) {
+	out := new(ListAccountInfoResponse)
+	err := c.cc.Invoke(ctx, Df_ListAccountInfo_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dfClient) CreateAccountInfo(ctx context.Context, in *CreateAccountInfoRequest, opts ...grpc.CallOption) (*CreateAccountInfoResponse, error) {
+	out := new(CreateAccountInfoResponse)
+	err := c.cc.Invoke(ctx, Df_CreateAccountInfo_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dfClient) UpdateAccountInfo(ctx context.Context, in *UpdateAccountInfoRequest, opts ...grpc.CallOption) (*UpdateAccountInfoResponse, error) {
+	out := new(UpdateAccountInfoResponse)
+	err := c.cc.Invoke(ctx, Df_UpdateAccountInfo_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *dfClient) UpdateAccountPrivacy(ctx context.Context, in *UpdateAccountPrivacyRequest, opts ...grpc.CallOption) (*UpdateAccountPrivacyResponse, error) {
 	out := new(UpdateAccountPrivacyResponse)
 	err := c.cc.Invoke(ctx, Df_UpdateAccountPrivacy_FullMethodName, in, out, opts...)
@@ -300,6 +344,10 @@ type DfServer interface {
 	ListAccounts(context.Context, *ListAccountsRequest) (*ListAccountsResponse, error)
 	CreateAccount(context.Context, *CreateAccountRequest) (*CreateAccountResponse, error)
 	UpdateAccount(context.Context, *UpdateAccountRequest) (*UpdateAccountResponse, error)
+	GetAccountInfo(context.Context, *GetAccountInfoRequest) (*GetAccountInfoResponse, error)
+	ListAccountInfo(context.Context, *ListAccountInfoRequest) (*ListAccountInfoResponse, error)
+	CreateAccountInfo(context.Context, *CreateAccountInfoRequest) (*CreateAccountInfoResponse, error)
+	UpdateAccountInfo(context.Context, *UpdateAccountInfoRequest) (*UpdateAccountInfoResponse, error)
 	UpdateAccountPrivacy(context.Context, *UpdateAccountPrivacyRequest) (*UpdateAccountPrivacyResponse, error)
 	CreatePerson(context.Context, *CreatePersonRequest) (*CreatePersonResponse, error)
 	UpdatePerson(context.Context, *UpdatePersonRequest) (*UpdatePersonResponse, error)
@@ -346,6 +394,18 @@ func (UnimplementedDfServer) CreateAccount(context.Context, *CreateAccountReques
 func (UnimplementedDfServer) UpdateAccount(context.Context, *UpdateAccountRequest) (*UpdateAccountResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method UpdateAccount not implemented")
 }
+func (UnimplementedDfServer) GetAccountInfo(context.Context, *GetAccountInfoRequest) (*GetAccountInfoResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAccountInfo not implemented")
+}
+func (UnimplementedDfServer) ListAccountInfo(context.Context, *ListAccountInfoRequest) (*ListAccountInfoResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ListAccountInfo not implemented")
+}
+func (UnimplementedDfServer) CreateAccountInfo(context.Context, *CreateAccountInfoRequest) (*CreateAccountInfoResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateAccountInfo not implemented")
+}
+func (UnimplementedDfServer) UpdateAccountInfo(context.Context, *UpdateAccountInfoRequest) (*UpdateAccountInfoResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateAccountInfo not implemented")
+}
 func (UnimplementedDfServer) UpdateAccountPrivacy(context.Context, *UpdateAccountPrivacyRequest) (*UpdateAccountPrivacyResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method UpdateAccountPrivacy not implemented")
 }
@@ -548,6 +608,78 @@ func _Df_UpdateAccount_Handler(srv interface{}, ctx context.Context, dec func(in
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Df_GetAccountInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetAccountInfoRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DfServer).GetAccountInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Df_GetAccountInfo_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DfServer).GetAccountInfo(ctx, req.(*GetAccountInfoRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Df_ListAccountInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListAccountInfoRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DfServer).ListAccountInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Df_ListAccountInfo_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DfServer).ListAccountInfo(ctx, req.(*ListAccountInfoRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Df_CreateAccountInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateAccountInfoRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DfServer).CreateAccountInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Df_CreateAccountInfo_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DfServer).CreateAccountInfo(ctx, req.(*CreateAccountInfoRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Df_UpdateAccountInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateAccountInfoRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DfServer).UpdateAccountInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Df_UpdateAccountInfo_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DfServer).UpdateAccountInfo(ctx, req.(*UpdateAccountInfoRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _Df_UpdateAccountPrivacy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(UpdateAccountPrivacyRequest)
 	if err := dec(in); err != nil {
@@ -857,6 +989,22 @@ var Df_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "UpdateAccount",
 			Handler:    _Df_UpdateAccount_Handler,
 		},
+		{
+			MethodName: "GetAccountInfo",
+			Handler:    _Df_GetAccountInfo_Handler,
+		},
+		{
+			MethodName: "ListAccountInfo",
+			Handler:    _Df_ListAccountInfo_Handler,
+		},
+		{
+			MethodName: "CreateAccountInfo",
+			Handler:    _Df_CreateAccountInfo_Handler,
+		},
+		{
+			MethodName: "UpdateAccountInfo",
+			Handler:    _Df_UpdateAccountInfo_Handler,
+		},
 		{
 			MethodName: "UpdateAccountPrivacy",
 			Handler:    _Df_UpdateAccountPrivacy_Handler,
diff --git a/bff/proto/account.proto b/bff/proto/account.proto
index 4ceff8d..b4f8d32 100644
--- a/bff/proto/account.proto
+++ b/bff/proto/account.proto
@@ -16,29 +16,15 @@ message Account {
     };
     uint64 id = 1;
     string email = 2;
-    string firstname = 3;
-    string lastname = 4;
-    string street = 5;
-    string city = 6;
-    string zip = 7;
-    string country = 8;
-    google.protobuf.Timestamp birthday = 9 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
-      example: "\"1990-10-05T00:00:00Z\""
+    optional string secret_key = 3;
+    google.protobuf.Timestamp email_verified_time = 9 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+      example: "\"2023-10-05T00:00:00Z\""
   }];
-    string phone = 10;
-    bool privacy_accepted = 11;
+    bool email_verified = 10;
     google.protobuf.Timestamp privacy_accepted_date = 12 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
       example: "\"2023-10-05T00:00:00Z\""
   }];
     int32 permission_level = 13 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
       description: "Default is 0 (non-priviledged)"
     }];
-    string creator = 14;
-    google.protobuf.Timestamp created = 15 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
-      example: "\"2023-10-05T00:00:00Z\""
-  }];
-    string changer = 16;
-    google.protobuf.Timestamp changed = 17 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
-      example: "\"2023-10-05T00:00:00Z\""
-  }];
 }
\ No newline at end of file
diff --git a/bff/proto/account_info.proto b/bff/proto/account_info.proto
new file mode 100644
index 0000000..f86d5e1
--- /dev/null
+++ b/bff/proto/account_info.proto
@@ -0,0 +1,43 @@
+syntax = "proto3";
+
+package pb;
+
+import "google/protobuf/timestamp.proto";
+import "protoc-gen-openapiv2/options/annotations.proto";
+
+option go_package = "github.com/itsscb/df/pb";
+
+message AccountInfo {
+    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
+        json_schema: {
+          title: "AccountInfo";
+        };
+        example: "{\"account_id\": \"1\", \"firstname\": \"John\", \"lastname\": \"Doe\", \"phone\": \"\", \"street\": \"Death Star 2\", \"zip\": \"0815\", \"city\": \"New York\", \"country\": \"USA\", \"birthday\": \"1990-10-05T00:00:00Z\", \"privacy_accepted\": false, \"privacy_accepted_date\": \"0001-01-01T00:00:00Z\", \"creator\": \"john.doe@example.com\", \"created\": \"2023-10-05T02:30:53Z\", \"changer\": \"john.doe@example.com\", \"changed\": \"2023-10-05T02:30:53Z\"}";
+    };
+    uint64 account_id = 1;
+    string firstname = 3;
+    string lastname = 4;
+    string street = 5;
+    string city = 6;
+    string zip = 7;
+    string country = 8;
+    google.protobuf.Timestamp birthday = 9 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+      example: "\"1990-10-05T00:00:00Z\""
+  }];
+    string phone = 10;
+    bool privacy_accepted = 11;
+    google.protobuf.Timestamp privacy_accepted_date = 12 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+      example: "\"2023-10-05T00:00:00Z\""
+  }];
+    int32 permission_level = 13 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+      description: "Default is 0 (non-priviledged)"
+    }];
+    string creator = 14;
+    google.protobuf.Timestamp created = 15 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+      example: "\"2023-10-05T00:00:00Z\""
+  }];
+    string changer = 16;
+    google.protobuf.Timestamp changed = 17 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+      example: "\"2023-10-05T00:00:00Z\""
+  }];
+}
\ No newline at end of file
diff --git a/bff/proto/rpc_create_account.proto b/bff/proto/rpc_create_account.proto
index e143f59..268775b 100644
--- a/bff/proto/rpc_create_account.proto
+++ b/bff/proto/rpc_create_account.proto
@@ -2,7 +2,6 @@ syntax = "proto3";
 
 package pb;
 
-import "google/protobuf/timestamp.proto";
 import "protoc-gen-openapiv2/options/annotations.proto";
 
 import "account.proto";
@@ -16,33 +15,13 @@ message CreateAccountRequest {
           description: "Create an Account";
           required: [
             "email",
-            "password",
-            "firstname",
-            "lastname",
-            "street",
-            "city",
-            "zip",
-            "country",
-            "birthday"
+            "password"
             ];
         };
-        example: "{\"email\": \"john.doe@example.com\", \"password\": \"MayTheForceBeWithYou!\", \"firstname\": \"John\", \"lastname\": \"Doe\", \"street\": \"Main Street 1\", \"zip\": \"0815\", \"city\": \"New York\", \"country\": \"USA\", \"birthday\": \"1990-10-05T00:00:00Z\"}";
+        example: "{\"email\": \"john.doe@example.com\", \"password\": \"MayTheForceBeWithYou!\"}";
     };
     string email = 1;
     string password = 2;
-    string firstname = 3;
-    string lastname = 4;
-    string street = 5;
-    string city = 6;
-    string zip = 7;
-    string country = 8;
-    string phone = 9;
-    google.protobuf.Timestamp birthday = 10 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
-        example: "\"1990-10-05T00:00:00Z\""
-    }];
-    optional bool privacy_accepted = 11 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
-        example: "true"
-    }];
 }
 
 message CreateAccountResponse {
diff --git a/bff/proto/rpc_create_account_info.proto b/bff/proto/rpc_create_account_info.proto
new file mode 100644
index 0000000..9da3723
--- /dev/null
+++ b/bff/proto/rpc_create_account_info.proto
@@ -0,0 +1,55 @@
+syntax = "proto3";
+
+package pb;
+
+import "google/protobuf/timestamp.proto";
+import "protoc-gen-openapiv2/options/annotations.proto";
+
+import "account_info.proto";
+
+option go_package = "github.com/itsscb/df/pb";
+
+message CreateAccountInfoRequest {
+    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
+        json_schema: {
+          title: "Create AccountInfo";
+          description: "Create an AccountInfo";
+          required: [
+            "account_id",
+            "firstname",
+            "lastname",
+            "street",
+            "city",
+            "zip",
+            "country",
+            "birthday"
+            ];
+        };
+        example: "{\"account_id\": \"1\", \"firstname\": \"John\", \"lastname\": \"Doe\", \"street\": \"Main Street 1\", \"zip\": \"0815\", \"city\": \"New York\", \"country\": \"USA\", \"birthday\": \"1990-10-05T00:00:00Z\"}";
+    };
+    uint64 account_id = 1;
+    string firstname = 3;
+    string lastname = 4;
+    string street = 5;
+    string city = 6;
+    string zip = 7;
+    string country = 8;
+    string phone = 9;
+    google.protobuf.Timestamp birthday = 10 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+        example: "\"1990-10-05T00:00:00Z\""
+    }];
+    optional bool privacy_accepted = 11 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+        example: "true"
+    }];
+}
+
+message CreateAccountInfoResponse {
+    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
+        json_schema: {
+          title: "Created AccountInfo";
+          description: "Returns the created AccountInfo";
+        };
+    };
+    AccountInfo account_info = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+      }];
+}
\ No newline at end of file
diff --git a/bff/proto/rpc_get_account.proto b/bff/proto/rpc_get_account.proto
index 48344f1..8459df6 100644
--- a/bff/proto/rpc_get_account.proto
+++ b/bff/proto/rpc_get_account.proto
@@ -12,7 +12,7 @@ message GetAccountRequest {
     option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
         json_schema: {
           title: "GetAccount";
-          description: "Get an Account by ID";
+          description: "Get AccountInfo by account_id";
           required: [
             "id"
             ];
@@ -26,7 +26,7 @@ message GetAccountResponse {
     option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
         json_schema: {
           title: "GetAccount Response";
-          description: "Returns the Account";
+          description: "Returns the AccountInfo";
         };
     };
     Account account = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
diff --git a/bff/proto/rpc_get_account_info.proto b/bff/proto/rpc_get_account_info.proto
new file mode 100644
index 0000000..acb2b4f
--- /dev/null
+++ b/bff/proto/rpc_get_account_info.proto
@@ -0,0 +1,34 @@
+syntax = "proto3";
+
+package pb;
+
+import "protoc-gen-openapiv2/options/annotations.proto";
+
+import "account_info.proto";
+
+option go_package = "github.com/itsscb/df/pb";
+
+message GetAccountInfoRequest {
+    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
+        json_schema: {
+          title: "GetAccountInfo";
+          description: "Get AccountInfo by account_id";
+          required: [
+            "account_id"
+            ];
+        };
+        example: "{\"account_id\": \"1\" }";
+    };
+    uint64 account_id = 1;
+}
+
+message GetAccountInfoResponse {
+    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
+        json_schema: {
+          title: "GetAccountInfo Response";
+          description: "Returns the AccountInfo";
+        };
+    };
+    AccountInfo account_info = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+      }];
+}
\ No newline at end of file
diff --git a/bff/proto/rpc_list_account_info.proto b/bff/proto/rpc_list_account_info.proto
new file mode 100644
index 0000000..5678880
--- /dev/null
+++ b/bff/proto/rpc_list_account_info.proto
@@ -0,0 +1,36 @@
+syntax = "proto3";
+
+package pb;
+
+import "protoc-gen-openapiv2/options/annotations.proto";
+
+import "account_info.proto";
+
+option go_package = "github.com/itsscb/df/pb";
+
+message ListAccountInfoRequest {
+    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
+        json_schema: {
+          title: "ListAccountInfo";
+          description: "Returns a List of Accounts";
+          required: [
+            "page_id",
+            "page_size"
+            ];
+        };
+        example: "{\"page_id\": 1, \"page_size\": 10 }";
+    };
+    uint32 page_id = 1;
+    uint32 page_size = 2;
+}
+
+message ListAccountInfoResponse {
+    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
+        json_schema: {
+          title: "ListAccountInfo Response";
+          description: "Returns the AccountInfo";
+        };
+    };
+    repeated AccountInfo account_info = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+      }];
+}
\ No newline at end of file
diff --git a/bff/proto/rpc_update_account.proto b/bff/proto/rpc_update_account.proto
index 9f6e92e..ef0bd69 100644
--- a/bff/proto/rpc_update_account.proto
+++ b/bff/proto/rpc_update_account.proto
@@ -2,7 +2,6 @@ syntax = "proto3";
 
 package pb;
 
-import "google/protobuf/timestamp.proto";
 import "protoc-gen-openapiv2/options/annotations.proto";
 
 import "account.proto";
@@ -15,24 +14,15 @@ message UpdateAccountRequest {
           title: "Update Account";
           description: "Update an Account";
           required: [
-            "id"
+            "email",
+            "password"
             ];
         };
-        example: "{\"id\": \"1\", \"street\": \"Death Star 2\"}";
+        example: "{\"account_id\": \"1\", \"email\": \"john.doe@example.com\"}";
     };
-    uint64 id = 1;
+    uint64 account_id = 1;
     optional string email = 2;
     optional string password = 3;
-    optional string firstname = 4;
-    optional string lastname = 5;
-    optional string street = 6;
-    optional string city = 7;
-    optional string zip = 8;
-    optional string country = 9;
-    optional string phone = 10;
-    optional google.protobuf.Timestamp birthday = 11 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
-        example: "\"1990-10-05T00:00:00Z\""
-    }];
 }
 
 message UpdateAccountResponse {
diff --git a/bff/proto/rpc_update_account_info.proto b/bff/proto/rpc_update_account_info.proto
new file mode 100644
index 0000000..b93c5dd
--- /dev/null
+++ b/bff/proto/rpc_update_account_info.proto
@@ -0,0 +1,45 @@
+syntax = "proto3";
+
+package pb;
+
+import "google/protobuf/timestamp.proto";
+import "protoc-gen-openapiv2/options/annotations.proto";
+
+import "account_info.proto";
+
+option go_package = "github.com/itsscb/df/pb";
+
+message UpdateAccountInfoRequest {
+    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
+        json_schema: {
+          title: "Update AccountInfo";
+          description: "Update an AccountInfo";
+          required: [
+            "id"
+            ];
+        };
+        example: "{\"account_id\": \"1\", \"street\": \"Death Star 2\"}";
+    };
+    uint64 account_id = 1;
+    optional string firstname = 4;
+    optional string lastname = 5;
+    optional string street = 6;
+    optional string city = 7;
+    optional string zip = 8;
+    optional string country = 9;
+    optional string phone = 10;
+    optional google.protobuf.Timestamp birthday = 11 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+        example: "\"1990-10-05T00:00:00Z\""
+    }];
+}
+
+message UpdateAccountInfoResponse {
+    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
+        json_schema: {
+          title: "Updated Account";
+          description: "Returns the updated Account";
+        };
+    };
+    AccountInfo account_info = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+      }];
+}
\ No newline at end of file
diff --git a/bff/proto/rpc_update_account_privacy.proto b/bff/proto/rpc_update_account_privacy.proto
index b920059..3359f21 100644
--- a/bff/proto/rpc_update_account_privacy.proto
+++ b/bff/proto/rpc_update_account_privacy.proto
@@ -4,23 +4,23 @@ package pb;
 
 import "protoc-gen-openapiv2/options/annotations.proto";
 
-import "account.proto";
+import "account_info.proto";
 
 option go_package = "github.com/itsscb/df/pb";
 
 message UpdateAccountPrivacyRequest {
     option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
         json_schema: {
-          title: "Update Account Privacy Consent";
-          description: "Update the Privacy Consent of an Account";
+          title: "Update Account Info Privacy Consent";
+          description: "Update the Privacy Consent of an AccountInfo";
           required: [
             "id",
             "privacy_accepted"
           ];
         };
-        example: "{\"id\": \"1\", \"privacy_accepted\": true }"
+        example: "{\"account_id\": \"1\", \"privacy_accepted\": true }"
     };
-    uint64 id = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+    uint64 account_id = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
         example: "1",
         format: "int64"
       }];
@@ -32,10 +32,10 @@ message UpdateAccountPrivacyRequest {
 message UpdateAccountPrivacyResponse {
     option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
         json_schema: {
-          title: "Update Account Privacy Response";
+          title: "Update Account Info Privacy Response";
         };
     };
-    Account account = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
-        title: "Updated Account"
+    AccountInfo account_info = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
+        title: "Updated AccountInfo"
     }];
 }
\ No newline at end of file
diff --git a/bff/proto/service_df.proto b/bff/proto/service_df.proto
index 9504b0f..ba1cb27 100644
--- a/bff/proto/service_df.proto
+++ b/bff/proto/service_df.proto
@@ -23,6 +23,11 @@ import "rpc_list_accounts.proto";
 import "rpc_update_account.proto";
 import "rpc_update_account_privacy.proto";
 
+import "rpc_create_account_info.proto";
+import "rpc_get_account_info.proto";
+import "rpc_list_account_info.proto";
+import "rpc_update_account_info.proto";
+
 import "rpc_login.proto";
 import "rpc_list_sessions.proto";
 import "rpc_refresh_token.proto";
@@ -145,7 +150,7 @@ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {
             body: "*"
         };
         option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
-            summary: "Create Account"
+            summary: "Create AccountInfo"
         };
         };
     rpc UpdateAccount (UpdateAccountRequest) returns (UpdateAccountResponse) {
@@ -163,6 +168,65 @@ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {
             }
         };
     };
+    rpc GetAccountInfo (GetAccountInfoRequest) returns (GetAccountInfoResponse) {
+        option (google.api.http) = {
+            get: "/v1/accounts/get_account_info/{account_id}"
+            // get: "/v1/accounts/{id=id}"
+        };
+        option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
+            summary: "Get AccountInfo by account_id"
+            security: {
+              security_requirement: {
+                key: "BearerAuth";
+                value: {}
+              }
+            }
+        };
+    };
+    rpc ListAccountInfo (ListAccountInfoRequest) returns (ListAccountInfoResponse) {
+        option (google.api.http) = {
+            get: "/v1/accounts/list_account_info"
+        };
+        option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
+            summary: "List AccountInfos [admin only]"
+            security: {
+              security_requirement: {
+                key: "BearerAuth";
+                value: {}
+              }
+            }
+        };
+    };
+    rpc CreateAccountInfo (CreateAccountInfoRequest) returns (CreateAccountInfoResponse) {
+        option (google.api.http) = {
+            post: "/v1/accounts/create_account_info"
+            body: "*"
+        };
+        option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
+            summary: "Create AccountInfo"
+            security: {
+              security_requirement: {
+                key: "BearerAuth";
+                value: {}
+              }
+            }
+        };
+        };
+    rpc UpdateAccountInfo (UpdateAccountInfoRequest) returns (UpdateAccountInfoResponse) {
+        option (google.api.http) = {
+            patch: "/v1/accounts/update_account_info"
+            body: "*"
+        };
+        option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
+            summary: "Update AccountInfo"
+            security: {
+                security_requirement: {
+                    key: "BearerAuth";
+                    value: {}
+                }
+            }
+        };
+    };
     rpc UpdateAccountPrivacy (UpdateAccountPrivacyRequest) returns (UpdateAccountPrivacyResponse) {
         option (google.api.http) = {
             patch: "/v1/accounts/update_account_privacy"
diff --git a/bff/sqlc.yaml b/bff/sqlc.yaml
index 4116e20..7ea56f8 100644
--- a/bff/sqlc.yaml
+++ b/bff/sqlc.yaml
@@ -17,6 +17,8 @@ sql:
             go_type: "uint64"
           - column: "payments.account_id"
             go_type: "uint64"
+          - column: "account_info.account_id"
+            go_type: "uint64"
           - column: "persons.account_id"
             go_type: "uint64"
           - column: "documents.account_id"
diff --git a/bff/val/validator.go b/bff/val/validator.go
index 948061d..6246da1 100644
--- a/bff/val/validator.go
+++ b/bff/val/validator.go
@@ -7,9 +7,9 @@ import (
 )
 
 var (
-	isValidName          = regexp.MustCompile(`^[a-zA-Z\s]+$`).MatchString
-	isValidAlphaSpace    = regexp.MustCompile(`^[a-zA-Z\s]+$`).MatchString
-	isValidAlphaNumSpace = regexp.MustCompile(`^[a-zA-Z0-9\s]+$`).MatchString
+	IsValidName          = regexp.MustCompile(`^[a-zA-Z\s]+$`).MatchString
+	IsValidAlphaSpace    = regexp.MustCompile(`^[a-zA-Z\s]+$`).MatchString
+	IsValidAlphaNumSpace = regexp.MustCompile(`^[a-zA-Z0-9\s]+$`).MatchString
 )
 
 func ValidateString(value string, minLength int, maxLength int) error {
@@ -24,7 +24,7 @@ func ValidateName(value string) error {
 	if err := ValidateString(value, 2, 40); err != nil {
 		return err
 	}
-	if !isValidName(value) {
+	if !IsValidName(value) {
 		return fmt.Errorf("must contain only letters or spaces")
 	}
 	return nil
@@ -56,7 +56,7 @@ func ValidateStreet(value string) error {
 		return err
 	}
 
-	if !isValidAlphaNumSpace(value) {
+	if !IsValidAlphaNumSpace(value) {
 		return fmt.Errorf("must contain only letters, numbers or spaces")
 	}
 
@@ -68,7 +68,7 @@ func ValidateAlphaSpace(value string) error {
 		return err
 	}
 
-	if !isValidAlphaSpace(value) {
+	if !IsValidAlphaSpace(value) {
 		return fmt.Errorf("must contain only letters, numbers or spaces")
 	}