diff --git a/Sources/XXClient/Models/MessageService.swift b/Sources/XXClient/Models/MessageService.swift
index 583225e0cbcedd9a9aad3a75782521e65858a95b..bc43edb7259b5607c1229c6ade3c466d9d37f6d2 100644
--- a/Sources/XXClient/Models/MessageService.swift
+++ b/Sources/XXClient/Models/MessageService.swift
@@ -4,7 +4,7 @@ public struct MessageService: Equatable {
   public init(
     identifier: Data,
     tag: String,
-    metadata: Data
+    metadata: Data?
   ) {
     self.identifier = identifier
     self.tag = tag
@@ -13,7 +13,7 @@ public struct MessageService: Equatable {
 
   public var identifier: Data
   public var tag: String
-  public var metadata: Data
+  public var metadata: Data?
 }
 
 extension MessageService: Codable {
diff --git a/Tests/XXClientTests/Models/MessageServiceTests.swift b/Tests/XXClientTests/Models/MessageServiceTests.swift
index e0a0d9bad5bca5fbd1418886a4c5709c9b196f21..c76f6dc4b851e9174e2b156d701a4b6a6ebfe73a 100644
--- a/Tests/XXClientTests/Models/MessageServiceTests.swift
+++ b/Tests/XXClientTests/Models/MessageServiceTests.swift
@@ -29,6 +29,31 @@ final class MessageServiceTests: XCTestCase {
     XCTAssertNoDifference(decodedModel, model)
   }
 
+  func testCodingWithoutMetadata() throws {
+    let identifierB64 = "AQID"
+    let tag = "TestTag 2"
+    let jsonString = """
+    {
+     "Identifier": "\(identifierB64)",
+     "Tag": "\(tag)",
+     "Metadata": null
+    }
+    """
+    let jsonData = jsonString.data(using: .utf8)!
+    let model = try MessageService.decode(jsonData)
+
+    XCTAssertNoDifference(model, MessageService(
+      identifier: Data(base64Encoded: identifierB64)!,
+      tag: tag,
+      metadata: nil
+    ))
+
+    let encodedModel = try model.encode()
+    let decodedModel = try MessageService.decode(encodedModel)
+
+    XCTAssertNoDifference(decodedModel, model)
+  }
+
   func testCodingArray() throws {
     let models = [
       MessageService(