diff --git a/common/src/enums/websocket-message-type.ts b/common/src/enums/websocket-message-type.ts
index 9f95d60..4337d3a 100644
--- a/common/src/enums/websocket-message-type.ts
+++ b/common/src/enums/websocket-message-type.ts
@@ -17,5 +17,5 @@
  */
 export enum WebSocketMessageType {
   WebRTCOffer = 'webrtc-offer',
-  WebRCTAnswer = 'webrtc-answer',
+  WebRTCAnswer = 'webrtc-answer',
 }
diff --git a/common/src/index.ts b/common/src/index.ts
index 8dbab24..e6c2b2c 100644
--- a/common/src/index.ts
+++ b/common/src/index.ts
@@ -21,5 +21,6 @@
 export * from './Conversation.js';
 export * from './enums/http-status-code.js';
 export * from './enums/websocket-message-type.js';
+export * from './interfaces/account-text-message.js';
 export * from './interfaces/websocket-message.js';
 export * from './util.js';
diff --git a/common/src/interfaces/account-text-message.ts b/common/src/interfaces/account-text-message.ts
new file mode 100644
index 0000000..d8f52ec
--- /dev/null
+++ b/common/src/interfaces/account-text-message.ts
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2022 Savoir-faire Linux Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program.  If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+export interface AccountTextMessage {
+  from: string;
+  to: string;
+  message: JSON;
+}
diff --git a/common/src/interfaces/websocket-message.ts b/common/src/interfaces/websocket-message.ts
index f42b67b..efc412e 100644
--- a/common/src/interfaces/websocket-message.ts
+++ b/common/src/interfaces/websocket-message.ts
@@ -16,8 +16,9 @@
  * <https://www.gnu.org/licenses/>.
  */
 import { WebSocketMessageType } from '../enums/websocket-message-type';
+import { AccountTextMessage } from './account-text-message';
 
 export interface WebSocketMessage {
   type: WebSocketMessageType;
-  data: any;
+  data: AccountTextMessage; // Union type for data (Ex: data: AccountTextMessage | SomethingElse)
 }
diff --git a/server/src/app.ts b/server/src/app.ts
index f7c860a..4c1914b 100644
--- a/server/src/app.ts
+++ b/server/src/app.ts
@@ -22,6 +22,7 @@
 import log from 'loglevel';
 import { Service } from 'typedi';
 
+import { bindWebRTCCallbacks } from './handlers/webrtc-handler.js';
 import { accountRouter } from './routers/account-router.js';
 import { authRouter } from './routers/auth-router.js';
 import { callRouter } from './routers/call-router.js';
@@ -49,6 +50,9 @@
     app.use('/calls', callRouter);
     app.use('/ns', nameserverRouter);
 
+    // Setup WebSocket callbacks
+    bindWebRTCCallbacks();
+
     // Setup 404 error handling
     app.use((_req, res) => {
       res.sendStatus(HttpStatusCode.NotFound);
diff --git a/server/src/handlers/webrtc-handler.ts b/server/src/handlers/webrtc-handler.ts
new file mode 100644
index 0000000..10de56f
--- /dev/null
+++ b/server/src/handlers/webrtc-handler.ts
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2022 Savoir-faire Linux Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program.  If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+import { AccountTextMessage, WebSocketMessage, WebSocketMessageType } from 'jami-web-common';
+import log from 'loglevel';
+import { Container } from 'typedi';
+
+import { Jamid } from '../jamid/jamid.js';
+import { Ws } from '../ws.js';
+
+const jamid = Container.get(Jamid);
+const ws = Container.get(Ws);
+
+function sendWebRTCData(message: Partial<WebSocketMessage>) {
+  const data: AccountTextMessage = message.data;
+  if (!data.from || !data.to || !data.message) {
+    log.warn('Incorrect format for AccountTextMessage (require from, to and message):', data);
+    return;
+  }
+  jamid.sendAccountTextMessage(data.from, data.to, JSON.stringify(message));
+}
+
+export function bindWebRTCCallbacks() {
+  ws.bind(WebSocketMessageType.WebRTCOffer, sendWebRTCData);
+  ws.bind(WebSocketMessageType.WebRTCAnswer, sendWebRTCData);
+}
diff --git a/server/src/jamid/jamid.ts b/server/src/jamid/jamid.ts
index 78cd71a..283e527 100644
--- a/server/src/jamid/jamid.ts
+++ b/server/src/jamid/jamid.ts
@@ -15,11 +15,12 @@
  * License along with this program.  If not, see
  * <https://www.gnu.org/licenses/>.
  */
-import { AccountDetails, Message, VolatileDetails } from 'jami-web-common';
+import { AccountDetails, Message, VolatileDetails, WebSocketMessageType } from 'jami-web-common';
 import log from 'loglevel';
 import { filter, firstValueFrom, map, Subject } from 'rxjs';
 import { Service } from 'typedi';
 
+import { Ws } from '../ws.js';
 import { JamiSignal } from './jami-signal.js';
 import {
   AccountDetailsChanged,
@@ -46,7 +47,7 @@
   private readonly usernamesToAccountIds: Map<string, string>;
   private readonly events;
 
-  constructor() {
+  constructor(private ws: Ws) {
     // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
     this.jamiSwig = require('../../jamid.node') as JamiSwig; // TODO: we should put the path in the .env
 
@@ -134,8 +135,6 @@
     // 2. You cannot specify multiple handlers for the same event
     // 3. You cannot specify a default handler
     this.jamiSwig.init(handlers);
-
-    // TODO: Bind websocket callbacks for webrtc action on Incoming account message
   }
 
   stop(): void {
@@ -186,10 +185,10 @@
     return stringVectToArray(this.jamiSwig.getAccountList());
   }
 
-  sendAccountTextMessage(accountId: string, contactId: string, type: string, message: string): void {
+  sendAccountTextMessage(from: string, to: string, message: string): void {
     const messageStringMap: StringMap = new this.jamiSwig.StringMap();
-    messageStringMap.set(type, JSON.stringify(message));
-    this.jamiSwig.sendAccountTextMessage(accountId, contactId, messageStringMap);
+    messageStringMap.set('application/json', message);
+    this.jamiSwig.sendAccountTextMessage(from, to, messageStringMap);
   }
 
   // TODO: Add interface for returned type
@@ -352,6 +351,22 @@
 
     this.events.onIncomingAccountMessage.subscribe((signal) => {
       log.debug('Received IncomingAccountMessage:', JSON.stringify(signal));
+      const message = JSON.parse(signal.message['application/json']);
+
+      if (message === undefined) {
+        log.debug('Undefined account message');
+        return;
+      }
+
+      if (!Object.values(WebSocketMessageType).includes(message.type)) {
+        log.warn(`Unhandled account message type: ${message.type}`);
+        return;
+      }
+
+      message.data.from = signal.from;
+      message.data.to = signal.accountId;
+      log.info(`Sending ${JSON.stringify(message)} to ${signal.accountId}`);
+      this.ws.send(signal.accountId, message);
     });
 
     this.events.onConversationReady.subscribe((signal) => {
diff --git a/server/src/routers/account-router.ts b/server/src/routers/account-router.ts
index c870f83..6ef7aa6 100644
--- a/server/src/routers/account-router.ts
+++ b/server/src/routers/account-router.ts
@@ -18,19 +18,12 @@
 import { Request, Router } from 'express';
 import asyncHandler from 'express-async-handler';
 import { ParamsDictionary } from 'express-serve-static-core';
-import { AccountDetails, HttpStatusCode } from 'jami-web-common';
+import { AccountDetails, AccountTextMessage, HttpStatusCode } from 'jami-web-common';
 import { Container } from 'typedi';
 
 import { Jamid } from '../jamid/jamid.js';
 import { authenticateToken } from '../middleware/auth.js';
 
-interface SendAccountTextMessageApi {
-  from?: string;
-  to?: string;
-  type?: string;
-  data?: string;
-}
-
 const jamid = Container.get(Jamid);
 
 export const accountRouter = Router();
@@ -76,16 +69,12 @@
   res.sendStatus(HttpStatusCode.NoContent);
 });
 
-accountRouter.post(
-  '/send-account-message',
-  (req: Request<ParamsDictionary, string, SendAccountTextMessageApi>, res) => {
-    const { from, to, type, data } = req.body;
-    if (!from || !to || !type || !data) {
-      res.status(HttpStatusCode.BadRequest).send('Missing arguments in request');
-      return;
-    }
-
-    jamid.sendAccountTextMessage(from, to, type, data);
-    res.end();
+accountRouter.post('/send-account-message', (req: Request<ParamsDictionary, any, AccountTextMessage>, res) => {
+  const { from, to, message } = req.body;
+  if (!from || !to || !message) {
+    res.status(HttpStatusCode.BadRequest).send('Missing arguments in request');
+    return;
   }
-);
+  jamid.sendAccountTextMessage(from, to, JSON.stringify(message));
+  res.end();
+});
diff --git a/server/src/ws.ts b/server/src/ws.ts
index 0081e59..58cd3db 100644
--- a/server/src/ws.ts
+++ b/server/src/ws.ts
@@ -51,6 +51,10 @@
 
       ws.on('message', (messageString: string) => {
         const message: WebSocketMessage = JSON.parse(messageString);
+        if (!message.type || !message.data) {
+          ws.send('Incorrect format (require type and data)');
+          return;
+        }
         const callbacks = this.callbacks.get(message.type);
         if (callbacks) {
           for (const callback of callbacks) {
