diff --git a/keyserver/src/fetchers/message-fetchers.js b/keyserver/src/fetchers/message-fetchers.js
--- a/keyserver/src/fetchers/message-fetchers.js
+++ b/keyserver/src/fetchers/message-fetchers.js
@@ -246,6 +246,8 @@
 
   const type = mostRecentRowType(rows);
   const messageSpec = messageSpecs[type];
+  const requiresDerivedMessages =
+    messageSpec.parseDerivedMessages !== undefined;
 
   if (type === messageTypes.IMAGES || type === messageTypes.MULTIMEDIA) {
     let media;
@@ -260,27 +262,44 @@
     }
     const [row] = rows;
     const localID = localIDFromCreationString(viewer, row.creation);
+
+    let rawMessageInfoFromServerDBRowParams = { localID, media };
+    if (requiresDerivedMessages) {
+      rawMessageInfoFromServerDBRowParams = {
+        ...rawMessageInfoFromServerDBRowParams,
+        derivedMessages,
+      };
+    }
+
     invariant(
       messageSpec.rawMessageInfoFromServerDBRow,
       `multimedia message spec should have rawMessageInfoFromServerDBRow`,
     );
-    return messageSpec.rawMessageInfoFromServerDBRow(row, {
-      media,
-      derivedMessages,
-      localID,
-    });
+    return messageSpec.rawMessageInfoFromServerDBRow(
+      row,
+      rawMessageInfoFromServerDBRowParams,
+    );
   }
 
   const row = assertSingleRow(rows);
   const localID = localIDFromCreationString(viewer, row.creation);
+
+  let rawMessageInfoFromServerDBRowParams = { localID };
+  if (requiresDerivedMessages) {
+    rawMessageInfoFromServerDBRowParams = {
+      ...rawMessageInfoFromServerDBRowParams,
+      derivedMessages,
+    };
+  }
+
   invariant(
     messageSpec.rawMessageInfoFromServerDBRow,
     `message spec ${type} should have rawMessageInfoFromServerDBRow`,
   );
-  return messageSpec.rawMessageInfoFromServerDBRow(row, {
-    derivedMessages,
-    localID,
-  });
+  return messageSpec.rawMessageInfoFromServerDBRow(
+    row,
+    rawMessageInfoFromServerDBRowParams,
+  );
 }
 
 async function fetchMessageInfos(
diff --git a/lib/shared/messages/message-spec.js b/lib/shared/messages/message-spec.js
--- a/lib/shared/messages/message-spec.js
+++ b/lib/shared/messages/message-spec.js
@@ -27,7 +27,7 @@
 export type RawMessageInfoFromServerDBRowParams = {
   +localID: ?string,
   +media?: $ReadOnlyArray<Media>,
-  +derivedMessages: $ReadOnlyMap<
+  +derivedMessages?: $ReadOnlyMap<
     string,
     RawComposableMessageInfo | RawRobotextMessageInfo,
   >,
diff --git a/lib/shared/messages/toggle-pin-message-spec.js b/lib/shared/messages/toggle-pin-message-spec.js
--- a/lib/shared/messages/toggle-pin-message-spec.js
+++ b/lib/shared/messages/toggle-pin-message-spec.js
@@ -47,7 +47,10 @@
     params: RawMessageInfoFromServerDBRowParams,
   ): RawTogglePinMessageInfo {
     const content = JSON.parse(row.content);
+
     const { derivedMessages } = params;
+    invariant(derivedMessages, 'Derived messages should be provided');
+
     const targetMessage = derivedMessages.get(content.targetMessageID);
     invariant(targetMessage, 'targetMessage should be defined');