diff --git a/Sources/ElixxirDAppsSDK/Models/FileSend.swift b/Sources/ElixxirDAppsSDK/Models/FileSend.swift
new file mode 100644
index 0000000000000000000000000000000000000000..1d925e6f4cd728b5fc364d53240c6ca61ceee4fa
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/Models/FileSend.swift
@@ -0,0 +1,37 @@
+import Foundation
+
+public struct FileSend: Equatable {
+  public init(
+    name: String,
+    type: String,
+    preview: Data,
+    contents: Data
+  ) {
+    self.name = name
+    self.type = type
+    self.preview = preview
+    self.contents = contents
+  }
+
+  public var name: String
+  public var type: String
+  public var preview: Data
+  public var contents: Data
+}
+
+extension FileSend: Codable {
+  enum CodingKeys: String, CodingKey {
+    case name = "Name"
+    case type = "Type"
+    case preview = "Preview"
+    case contents = "Contents"
+  }
+
+  public static func decode(_ data: Data) throws -> Self {
+    try JSONDecoder().decode(Self.self, from: data)
+  }
+
+  public func encode() throws -> Data {
+    try JSONEncoder().encode(self)
+  }
+}
diff --git a/Tests/ElixxirDAppsSDKTests/Models/FileSendTests.swift b/Tests/ElixxirDAppsSDKTests/Models/FileSendTests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..62296de55b57079ef0dee674aa78f59882bc09e7
--- /dev/null
+++ b/Tests/ElixxirDAppsSDKTests/Models/FileSendTests.swift
@@ -0,0 +1,35 @@
+import CustomDump
+import XCTest
+@testable import ElixxirDAppsSDK
+
+final class FileSendTests: XCTestCase {
+  func testCoding() throws {
+    let name = "testfile.txt"
+    let type = "text file"
+    let previewB64 = "aXQncyBtZSBhIHByZXZpZXc="
+    let contentsB64 = "VGhpcyBpcyB0aGUgZnVsbCBjb250ZW50cyBvZiB0aGUgZmlsZSBpbiBieXRlcw=="
+    let jsonString = """
+    {
+      "Name": "\(name)",
+      "Type": "\(type)",
+      "Preview": "\(previewB64)",
+      "Contents": "\(contentsB64)"
+    }
+    """
+    let jsonData = jsonString.data(using: .utf8)!
+
+    let fileSend = try FileSend.decode(jsonData)
+
+    XCTAssertNoDifference(fileSend, FileSend(
+      name: name,
+      type: type,
+      preview: Data(base64Encoded: previewB64)!,
+      contents: Data(base64Encoded: contentsB64)!
+    ))
+
+    let encodedFileSend = try fileSend.encode()
+    let decodedFileSend = try FileSend.decode(encodedFileSend)
+
+    XCTAssertNoDifference(decodedFileSend, fileSend)
+  }
+}