diff --git a/api.go b/api.go
index 05d4d740a3e7c7d4a7ea7fa612890e01ca2b8f90..178c3f06004a8d120029552b385aad619309f921 100644
--- a/api.go
+++ b/api.go
@@ -118,6 +118,9 @@ func registerAPI() {
 			return
 		}
 
+		if info.Privileged {
+			instance.UserPrivileged(flake, payload.Privileged)
+		}
 		instance.UserUsernameUpdate(flake, payload.Username)
 	})
 
diff --git a/api/types.go b/api/types.go
index 5c58f0610394cb23226334960bc2e812c7cda40d..a86cfb73bd4725049b4e56faa8ed9b5b6279dbad 100644
--- a/api/types.go
+++ b/api/types.go
@@ -13,7 +13,8 @@ type UserCreatePayload struct {
 }
 
 type UserUpdatePayload struct {
-	Username string `json:"username"`
+	Username   string `json:"username"`
+	Privileged bool   `json:"privileged,omitempty"`
 }
 
 type UserSecretPayload struct {
diff --git a/client/user.go b/client/user.go
index 97985e6d5df0c9cb25e5a50765b36040c49813eb..53c88291dfe55249b2cc191c63ff3edaa5ff7f9b 100644
--- a/client/user.go
+++ b/client/user.go
@@ -52,10 +52,10 @@ func (r *Remote) UserAdd(username string, password string, privileged bool) (sto
 }
 
 // UserUpdate updates a user.
-func (r *Remote) UserUpdate(flake, newname string) error {
+func (r *Remote) UserUpdate(flake, newname string, privileged bool) error {
 	return r.requestJSONnoResp(http.MethodPatch,
 		populateField(api.UserField, "flake", flake),
-		api.UserUpdatePayload{Username: newname})
+		api.UserUpdatePayload{Username: newname, Privileged: privileged})
 }
 
 // UserDestroy destroys a user.