diff --git a/lib/actions/message-actions.js b/lib/actions/message-actions.js
--- a/lib/actions/message-actions.js
+++ b/lib/actions/message-actions.js
@@ -5,8 +5,10 @@
 import type {
   FetchMessageInfosPayload,
   SendMessageResult,
+  SendEditMessageResult,
   SendReactionMessageRequest,
   SimpleMessagesPayload,
+  SendEditMessageRequest,
 } from '../types/message-types.js';
 import type { MediaMessageServerDBContent } from '../types/messages/media.js';
 import type {
@@ -244,6 +246,19 @@
   success: 'SEND_EDIT_MESSAGE_SUCCESS',
   failed: 'SEND_EDIT_MESSAGE_FAILED',
 });
+const sendEditMessage =
+  (
+    callServerEndpoint: CallServerEndpoint,
+  ): ((request: SendEditMessageRequest) => Promise<SendEditMessageResult>) =>
+  async request => {
+    const response = await callServerEndpoint('edit_message', {
+      targetMessageID: request.targetMessageID,
+      text: request.text,
+    });
+    return {
+      newMessageInfos: response.newMessageInfos,
+    };
+  };
 
 const saveMessagesActionType = 'SAVE_MESSAGES';
 const processMessagesActionType = 'PROCESS_MESSAGES';
@@ -268,4 +283,5 @@
   processMessagesActionType,
   messageStorePruneActionType,
   sendEditMessageActionTypes,
+  sendEditMessage,
 };
diff --git a/lib/types/message-types.js b/lib/types/message-types.js
--- a/lib/types/message-types.js
+++ b/lib/types/message-types.js
@@ -573,6 +573,7 @@
 };
 
 export type EditMessagePayload = SendEditMessageResponse;
+export type SendEditMessageResult = SendEditMessageResponse;
 
 // Used for the message info included in log-in type actions
 export type GenericMessagesResult = {