diff --git a/core/installer/welcome/welcome.go b/core/installer/welcome/welcome.go
index 0b93848..0f3fa98 100644
--- a/core/installer/welcome/welcome.go
+++ b/core/installer/welcome/welcome.go
@@ -1,9 +1,11 @@
 package welcome
 
 import (
+	"bytes"
 	"embed"
 	"encoding/json"
 	"fmt"
+	"io"
 	"log"
 	"net/http"
 	"net/url"
@@ -20,16 +22,23 @@
 var staticAssets embed.FS
 
 type Server struct {
-	port      int
-	repo      installer.RepoIO
-	nsCreator installer.NamespaceCreator
+	port              int
+	repo              installer.RepoIO
+	nsCreator         installer.NamespaceCreator
+	createAccountAddr string
 }
 
-func NewServer(port int, repo installer.RepoIO, nsCreator installer.NamespaceCreator) *Server {
+func NewServer(
+	port int,
+	repo installer.RepoIO,
+	nsCreator installer.NamespaceCreator,
+	createAccountAddr string,
+) *Server {
 	return &Server{
 		port,
 		repo,
 		nsCreator,
+		createAccountAddr,
 	}
 }
 
@@ -51,10 +60,15 @@
 
 type createAccountReq struct {
 	Username    string `json:"username,omitempty"`
-	Password    string `json:"password,omitempty"` // TODO(giolekva): actually use this
+	Password    string `json:"password,omitempty"`
 	SecretToken string `json:"secretToken,omitempty"`
 }
 
+type apiCreateAccountReq struct {
+	Username string `json:"username,omitempty"`
+	Password string `json:"password,omitempty"`
+}
+
 func getFormValue(v url.Values, name string) (string, error) {
 	items, ok := v[name]
 	if !ok || len(items) != 1 {
@@ -94,7 +108,26 @@
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
 	}
-	// TODO(giolekva): accounts-ui create user req
+	{
+		var buf bytes.Buffer
+		cr := apiCreateAccountReq{req.Username, req.Password}
+		if err := json.NewEncoder(&buf).Encode(cr); err != nil {
+			http.Error(w, err.Error(), http.StatusInternalServerError)
+			return
+		}
+		resp, err := http.Post(s.createAccountAddr, "application/json", &buf)
+		if err != nil {
+			http.Error(w, err.Error(), http.StatusInternalServerError)
+			return
+		}
+		// TODO(gio): better handle status code and error message
+		if resp.StatusCode != http.StatusOK {
+			var e bytes.Buffer
+			io.Copy(&e, resp.Body)
+			http.Error(w, e.String(), http.StatusInternalServerError)
+			return
+		}
+	}
 	{
 		config, err := s.repo.ReadConfig()
 		if err != nil {
