diff --git a/src/main/java/fr/univnantes/webandcloud/api/controllers/v1/Users.java b/src/main/java/fr/univnantes/webandcloud/api/controllers/v1/Users.java
index 3ba30762b6d59116976a427a48f0a1f607061d4a..60cec2616020f7ac4df2b6692ff5d2320009fe86 100644
--- a/src/main/java/fr/univnantes/webandcloud/api/controllers/v1/Users.java
+++ b/src/main/java/fr/univnantes/webandcloud/api/controllers/v1/Users.java
@@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import fr.univnantes.webandcloud.api.core.Token;
 import fr.univnantes.webandcloud.api.core.User;
+import fr.univnantes.webandcloud.api.core.UserPayload;
 import fr.univnantes.webandcloud.api.responses.BadRequest;
 import fr.univnantes.webandcloud.api.responses.NotFoundException;
 import fr.univnantes.webandcloud.api.responses.ResponseError;
@@ -68,6 +69,25 @@ public class Users extends BaseController {
         return userDB.get(id);
     }
 
+    @CrossOrigin
+    @Operation(summary = "Update user")
+    @ApiResponse(responseCode = "200", description = "Update user", content = @Content(mediaType = "application/json", schema = @Schema(implementation = User.class)))
+    @RequestMapping(value = "/users/edit", method = RequestMethod.POST)
+    @Nullable
+    public User updateUser(
+            @Parameter(description = "Token for identify your account", example = "abcEFG145") @RequestHeader(required = false) @Nullable String token,
+            @Parameter(description = "Payload of User") @RequestBody @NonNull UserPayload userPayload)
+            throws ResponseError {
+        User currentUser = tokenService.getUserRelated(token);
+        if (currentUser == null)
+            throw new BadRequest("Token must be valid");
+        if (!userPayload.id.equals(currentUser.getId()))
+            throw new BadRequest("User id is immutable");
+        else
+            userDB.put(currentUser.updateFromPayload(userPayload));
+        return currentUser;
+    }
+
     @CrossOrigin
     @Operation(summary = "Follow user")
     @ApiResponse(responseCode = "200", description = "Follow a user")
@@ -112,13 +132,13 @@ public class Users extends BaseController {
     @Operation(summary = "Create user")
     @ApiResponse(responseCode = "200", description = "User Created")
     @RequestMapping(value = "/users/create", method = RequestMethod.POST)
-    public Token createUser(@Parameter(description = "Payload of User") @RequestBody @NonNull User user)
+    public Token createUser(@Parameter(description = "Payload of User") @RequestBody @NonNull UserPayload userPayload)
             throws ResponseError {
         try {
-            User res = getUser(user.getId());
+            getUser(userPayload.id);
             throw new BadRequest("User already exist");
         } catch (NotFoundException ignored) {
-            user = this.userDB.add(user);
+            User user = this.userDB.add(new User(userPayload));
             Token token = new Token(user);
             token = this.tokenDB.add(token);
             return token;
diff --git a/src/main/java/fr/univnantes/webandcloud/api/core/User.java b/src/main/java/fr/univnantes/webandcloud/api/core/User.java
index 4c5b817b77c5fc6b47b06e18bba6aef1185c9bc2..7dbdcbc7e51da46698464067d797188ceb0b1fcd 100644
--- a/src/main/java/fr/univnantes/webandcloud/api/core/User.java
+++ b/src/main/java/fr/univnantes/webandcloud/api/core/User.java
@@ -3,12 +3,6 @@ package fr.univnantes.webandcloud.api.core;
 import java.util.ArrayList;
 import java.util.List;
 
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.lang.NonNull;
-import org.springframework.lang.Nullable;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 
 @Schema(description = "Some user")
@@ -44,10 +38,18 @@ public class User implements WithIdentifier {
         this(id, userName, email, uri, new ArrayList<>(), new ArrayList<>(), new ArrayList<>());
     }
 
-    @JsonCreator
-    public User(@NonNull @JsonProperty("userName") String userName, @NonNull @JsonProperty("email") String email,
-            @Nullable @JsonProperty("uri") String uri) {
-        this(userName, userName, email, uri, new ArrayList<>(), new ArrayList<>(), new ArrayList<>());
+    public User(UserPayload payload) {
+        this(payload.id, payload.userName, payload.email, payload.uri);
+    }
+
+    public User updateFromPayload(UserPayload payload) {
+        if (payload.id != null)
+            setId(payload.id);
+        if (payload.userName != null)
+            userName = payload.userName;
+        if (payload.uri != null)
+            uri = payload.uri;
+        return this;
     }
 
     @Override
diff --git a/src/main/java/fr/univnantes/webandcloud/api/core/UserPayload.java b/src/main/java/fr/univnantes/webandcloud/api/core/UserPayload.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5b61247ec8330ed8c6c763be7390868a0e204b1
--- /dev/null
+++ b/src/main/java/fr/univnantes/webandcloud/api/core/UserPayload.java
@@ -0,0 +1,31 @@
+package fr.univnantes.webandcloud.api.core;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import org.springframework.lang.NonNull;
+import org.springframework.lang.Nullable;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+@Schema(description = "User Payload")
+public class UserPayload {
+
+    @Schema(description = "Id of User", example = "johnDoe")
+    public final String id;
+    @Schema(description = "UserName of User", example = "DarkSasukeOf44")
+    public final String userName;
+    @Schema(description = "Email of User", example = "example@example.org")
+    public final String email;
+    @Schema(description = "Uri of image related to this User", example = "foo.org/someImage.png")
+    public final String uri;
+
+    @JsonCreator
+    public UserPayload(@NonNull @JsonProperty("id") String id, @NonNull @JsonProperty("userName") String userName,
+            @NonNull @JsonProperty("email") String email, @Nullable @JsonProperty("uri") String uri) {
+        this.id = id;
+        this.userName = userName;
+        this.email = email;
+        this.uri = uri;
+    }
+}
diff --git a/src/main/java/fr/univnantes/webandcloud/api/services/oauth/OAuthUserDataService.java b/src/main/java/fr/univnantes/webandcloud/api/services/oauth/OAuthUserDataService.java
index d7f86fe818ce08bbc633ccd4d0093878273c06c2..9d0f31548ad4ed661db8e7b8a4c620a67dfdd162 100644
--- a/src/main/java/fr/univnantes/webandcloud/api/services/oauth/OAuthUserDataService.java
+++ b/src/main/java/fr/univnantes/webandcloud/api/services/oauth/OAuthUserDataService.java
@@ -84,6 +84,6 @@ public class OAuthUserDataService {
                     firstName = nameSplit[0];
             }
         }
-        return new User(nickName, email, null);
+        return new User(null, nickName, email, null);
     }
 }