diff --git a/src/org/openbravo/pos2/SafeboxCashupHistory.java b/src/org/openbravo/pos2/SafeboxCashupHistory.java
index 0f3006e8..6df9c975 100644
--- a/src/org/openbravo/pos2/SafeboxCashupHistory.java
+++ b/src/org/openbravo/pos2/SafeboxCashupHistory.java
@@ -10,9 +10,13 @@
 package org.openbravo.pos2;
 
 import java.math.BigDecimal;
+import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
 import javax.servlet.ServletException;
 
 import org.codehaus.jettison.json.JSONArray;
@@ -30,6 +34,7 @@ import org.openbravo.retail.posterminal.OBPOSAppCashup;
 import org.openbravo.retail.posterminal.OBPOSApplications;
 import org.openbravo.retail.posterminal.OBPOSSafeBox;
 import org.openbravo.retail.posterminal.OBPOSSafeboxTouchpoint;
+import org.openbravo.retail.posterminal.SafeboxCashupHistoryHook;
 
 /**
  * 
@@ -41,6 +46,10 @@ import org.openbravo.retail.posterminal.OBPOSSafeboxTouchpoint;
  */
 public class SafeboxCashupHistory extends JSONProcessSimple {
 
+  @Inject
+  @Any
+  private Instance<SafeboxCashupHistoryHook> generateSafeboxCashupHistoryHooks;
+
   @Override
   public JSONObject exec(JSONObject jsonsent) throws JSONException, ServletException {
     try {
@@ -92,6 +101,14 @@ public class SafeboxCashupHistory extends JSONProcessSimple {
         record.putOpt("openingTime", jsonCashup.opt("creationDate"));
         record.putOpt("closingTime", jsonCashup.opt("cashupDate"));
 
+        try {
+          record = executeGetSafeboxCashupHistoryHook(generateSafeboxCashupHistoryHooks, record,
+              cashupRecord);
+        } catch (Exception e) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+        }
+
         record.putOpt("cashupInformation", jsonCashup);
         cashupHistory.put(record);
       }
@@ -105,6 +122,19 @@ public class SafeboxCashupHistory extends JSONProcessSimple {
     }
   }
 
+  protected JSONObject executeGetSafeboxCashupHistoryHook(Instance<? extends Object> hooks,
+      JSONObject json, OBPOSAppCashup cashup) throws Exception {
+    JSONObject modifiedJsonObject = json;
+
+    for (Iterator<? extends Object> procIter = hooks.iterator(); procIter.hasNext();) {
+      Object proc = procIter.next();
+      if (proc instanceof SafeboxCashupHistoryHook) {
+        modifiedJsonObject = ((SafeboxCashupHistoryHook) proc).exec(json, cashup);
+      }
+    }
+    return modifiedJsonObject;
+  }
+
   /**
    * @name getSafebox It will return a OBPOSSafeBox instance given a safe box ID.
    * @param safeboxId
diff --git a/src/org/openbravo/pos2/hooks/SafeboxCashupHistoryHook.java b/src/org/openbravo/pos2/hooks/SafeboxCashupHistoryHook.java
new file mode 100644
index 00000000..57f634f0
--- /dev/null
+++ b/src/org/openbravo/pos2/hooks/SafeboxCashupHistoryHook.java
@@ -0,0 +1,34 @@
+/*
+ ************************************************************************************
+ * Copyright (C) 2021 Openbravo S.L.U.
+ * Licensed under the Openbravo Commercial License version 1.0
+ * You may obtain a copy of the License at http://www.openbravo.com/legal/obcl.html
+ * or in the legal folder of this module distribution.
+ ************************************************************************************
+ */
+
+package org.openbravo.pos2.hooks;
+
+import org.codehaus.jettison.json.JSONObject;
+import org.openbravo.retail.posterminal.OBPOSAppCashup;
+
+public interface SafeboxCashupHistoryHook {
+  public JSONObject exec(JSONObject json, OBPOSAppCashup cashup) throws Exception;
+}
+
+// Example of a hook:
+//
+// @ApplicationScoped
+// public class CashupHookTest implements CashupHook {
+//
+// @Override
+// public void exec(OBPOSApplications terminal, OBPOSAppCashup cashup)
+// throws Exception {
+// // TODO Auto-generated method stub
+// System.out.println("somebody is calling me");
+// return null; // If not null it is an extra message and action to show in the success dialog in
+// the client
+// side.
+// }
+//
+// }
