diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/requests/DeviceRevocationRequest.java b/jams-common/src/main/java/net/jami/jams/common/objects/requests/DeviceRevocationRequest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ef3f7d8514d8efcf6f09f213b394bd6f05fba17
--- /dev/null
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/requests/DeviceRevocationRequest.java
@@ -0,0 +1,17 @@
+package net.jami.jams.common.objects.requests;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class DeviceRevocationRequest {
+
+    private String owner;
+    private String deviceId;
+
+    public DeviceRevocationRequest(String username, String deviceId) {
+        this.owner = owner;
+        this.deviceId = deviceId;
+    }
+}
diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/responses/DeviceRevocationResponse.java b/jams-common/src/main/java/net/jami/jams/common/objects/responses/DeviceRevocationResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..31f8ae30e7467fab1939910275e024aa1cb1da8f
--- /dev/null
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/responses/DeviceRevocationResponse.java
@@ -0,0 +1,19 @@
+package net.jami.jams.common.objects.responses;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Getter
+@Setter
+public class DeviceRevocationResponse {
+
+
+    private boolean success;
+    private String errorDetails;
+    private static final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss'Z'X");
+    private String  timestamp = dateFormatter.format(new Date());
+
+}
diff --git a/jams-server/src/main/java/module-info.java b/jams-server/src/main/java/module-info.java
index 6024a4383902e5a0f5003b4416d8271996a6bcd7..559226c409985e51337db186cb74624bfd6579b3 100644
--- a/jams-server/src/main/java/module-info.java
+++ b/jams-server/src/main/java/module-info.java
@@ -10,6 +10,8 @@ module jams.server {
     requires javassist;
     requires datastore;
     requires org.apache.xbean.classloader;
+    requires org.bouncycastle.pkix;
+    requires org.bouncycastle.provider;
     requires jami.nameserver;
     requires jami.dht;
     requires nimbus.jose.jwt;
diff --git a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java
index 0b5640e9213ebf60055e79605a895b8bbd685f7f..673a5b136c2f9a6f42cc06f3dc50017a805b1353 100644
--- a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java
+++ b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java
@@ -60,7 +60,4 @@ public class RegisterDeviceFlow {
             return null;
         }
     }
-
-
-
 }
diff --git a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RevokeDeviceFlow.java b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RevokeDeviceFlow.java
index ea433ee5ed2420848a78507ddfa44a0ac6c5733e..e8d51cc0721fe2072e466c5d88b8c7bbd9803f6c 100644
--- a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RevokeDeviceFlow.java
+++ b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RevokeDeviceFlow.java
@@ -1,4 +1,50 @@
 package net.jami.jams.server.core.workflows;
 
+import lombok.extern.slf4j.Slf4j;
+import net.jami.jams.common.dao.StatementElement;
+import net.jami.jams.common.dao.StatementList;
+import net.jami.jams.common.objects.devices.Device;
+import net.jami.jams.common.objects.requests.DeviceRevocationRequest;
+import net.jami.jams.common.objects.requests.RevocationRequest;
+import net.jami.jams.common.objects.requests.RevocationType;
+import net.jami.jams.common.objects.responses.DeviceRevocationResponse;
+
+import java.math.BigInteger;
+
+import static net.jami.jams.server.Server.*;
+import static net.jami.jams.server.Server.certificateAuthority;
+
+@Slf4j
 public class RevokeDeviceFlow {
+
+    public static DeviceRevocationResponse revokeDevice(String username, RevocationRequest request){
+        DeviceRevocationResponse response = new DeviceRevocationResponse();
+        try {
+
+            StatementList statementList = new StatementList();
+            StatementElement st1 = new StatementElement("owner","=",username,"AND");
+            StatementElement st2 = new StatementElement("deviceId","=",request.getIdentifier().toString(),"");
+            statementList.addStatement(st1);
+            statementList.addStatement(st2);
+            Device device = dataStore.getDeviceDao().getObjects(statementList).get(0);
+            if (device == null) {
+                log.error("Could not find device!");
+                return null;
+            }
+
+            certificateAuthority.revokeCertificate(request);
+            if (certificateAuthority.getLatestCRL().get().getRevokedCertificates().toArray().length != 0) {
+                response.setSuccess(true);
+            }
+
+            //Finally we return the successful response
+            return response;
+        }
+        catch (Exception e){
+            log.error("An exception has occurred while trying to revoke a device with error {}", e.getMessage());
+            response.setSuccess(false);
+            response.setErrorDetails(e.getMessage());
+            return response;
+        }
+    }
 }
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/device/DeviceServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/device/DeviceServlet.java
index 91dd970c7bacfbd888636313260f21a695d40781..67a10b2dc150ae5c1e803e062117c6c797b07590 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/device/DeviceServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/device/DeviceServlet.java
@@ -10,10 +10,15 @@ import jakarta.servlet.http.HttpServletResponse;
 import net.jami.jams.common.dao.StatementElement;
 import net.jami.jams.common.dao.StatementList;
 import net.jami.jams.common.objects.requests.DeviceRegistrationRequest;
+import net.jami.jams.common.objects.requests.RevocationRequest;
+import net.jami.jams.common.objects.requests.RevocationType;
 import net.jami.jams.common.objects.responses.DeviceRegistrationResponse;
+import net.jami.jams.common.objects.responses.DeviceRevocationResponse;
 import net.jami.jams.server.core.workflows.RegisterDeviceFlow;
+import net.jami.jams.server.core.workflows.RevokeDeviceFlow;
 
 import java.io.IOException;
+import java.math.BigInteger;
 
 import static net.jami.jams.server.Server.dataStore;
 
@@ -48,5 +53,11 @@ public class DeviceServlet extends HttpServlet {
     @Override
     protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         super.doDelete(req, resp);
+        RevocationRequest request = new RevocationRequest();
+        request.setIdentifier(new BigInteger(req.getAttribute("deviceId").toString()));
+        request.setRevocationType(RevocationType.DEVICE);
+        DeviceRevocationResponse devResponse = RevokeDeviceFlow.revokeDevice(req.getAttribute("username").toString(), request);
+        if(devResponse != null) resp.getOutputStream().write(JsonStream.serialize(devResponse).getBytes());
+        else resp.sendError(500,"An exception has occurred while trying to revoke a device!");
     }
 }