diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/FileTransfer.swift b/Sources/ElixxirDAppsSDK/FileTransfer/FileTransfer.swift
new file mode 100644
index 0000000000000000000000000000000000000000..4c83984dfc6b51d778e32bc0e27e43df861e6645
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/FileTransfer.swift
@@ -0,0 +1,43 @@
+import Bindings
+
+public struct FileTransfer {
+  public var closeSend: FileTransferCloseSend
+  public var maxFileNameLen: FileTransferMaxFilenameLen
+  public var maxFileSize: FileTransferMaxFileSize
+  public var maxFileTypeLen: FileTransferMaxFileTypeLen
+  public var maxPreviewSize: FileTransferMaxPreviewSize
+  public var receive: FileTransferReceive
+  public var registerReceivedProgressCallback: FileTransferRegisterReceivedProgressCallback
+  public var registerSentProgressCallback: FileTransferRegisterSentProgressCallback
+  public var send: FileTransferSend
+}
+
+extension FileTransfer {
+  public static func live(_ bindingsFileTransfer: BindingsFileTransfer) -> FileTransfer {
+    FileTransfer(
+      closeSend: .live(bindingsFileTransfer),
+      maxFileNameLen: .live(bindingsFileTransfer),
+      maxFileSize: .live(bindingsFileTransfer),
+      maxFileTypeLen: .live(bindingsFileTransfer),
+      maxPreviewSize: .live(bindingsFileTransfer),
+      receive: .live(bindingsFileTransfer),
+      registerReceivedProgressCallback: .live(bindingsFileTransfer),
+      registerSentProgressCallback: .live(bindingsFileTransfer),
+      send: .live(bindingsFileTransfer)
+    )
+  }
+}
+
+extension FileTransfer {
+  public static let unimplemented = FileTransfer(
+    closeSend: .unimplemented,
+    maxFileNameLen: .unimplemented,
+    maxFileSize: .unimplemented,
+    maxFileTypeLen: .unimplemented,
+    maxPreviewSize: .unimplemented,
+    receive: .unimplemented,
+    registerReceivedProgressCallback: .unimplemented,
+    registerSentProgressCallback: .unimplemented,
+    send: .unimplemented
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferCloseSend.swift b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferCloseSend.swift
new file mode 100644
index 0000000000000000000000000000000000000000..e729435f852bd9db5c124a4408a5ad4db7bf3dd8
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferCloseSend.swift
@@ -0,0 +1,22 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct FileTransferCloseSend {
+  public var run: (Data) throws -> Void
+
+  public func callAsFunction(transferId: Data) throws {
+    try run(transferId)
+  }
+}
+
+extension FileTransferCloseSend {
+  public static func live(_ bindingsFileTransfer: BindingsFileTransfer) -> FileTransferCloseSend {
+    FileTransferCloseSend(run: bindingsFileTransfer.closeSend)
+  }
+}
+
+extension FileTransferCloseSend {
+  public static let unimplemented = FileTransferCloseSend(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxFileSize.swift b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxFileSize.swift
new file mode 100644
index 0000000000000000000000000000000000000000..02aea297f2b67646e429635b01d5a3a5015d7d40
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxFileSize.swift
@@ -0,0 +1,22 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct FileTransferMaxFileSize {
+  public var run: () -> Int
+
+  public func callAsFunction() -> Int {
+    run()
+  }
+}
+
+extension FileTransferMaxFileSize {
+  public static func live(_ bindingsFileTransfer: BindingsFileTransfer) -> FileTransferMaxFileSize {
+    FileTransferMaxFileSize(run: bindingsFileTransfer.maxFileSize)
+  }
+}
+
+extension FileTransferMaxFileSize {
+  public static let unimplemented = FileTransferMaxFileSize(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxFileTypeLen.swift b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxFileTypeLen.swift
new file mode 100644
index 0000000000000000000000000000000000000000..2d3fe39282c2c9fafbee7986bfec70ae6648b14e
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxFileTypeLen.swift
@@ -0,0 +1,22 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct FileTransferMaxFileTypeLen {
+  public var run: () -> Int
+
+  public func callAsFunction() -> Int {
+    run()
+  }
+}
+
+extension FileTransferMaxFileTypeLen {
+  public static func live(_ bindingsFileTransfer: BindingsFileTransfer) -> FileTransferMaxFileTypeLen {
+    FileTransferMaxFileTypeLen(run: bindingsFileTransfer.maxFileTypeLen)
+  }
+}
+
+extension FileTransferMaxFileTypeLen {
+  public static let unimplemented = FileTransferMaxFileTypeLen(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxFilenameLen.swift b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxFilenameLen.swift
new file mode 100644
index 0000000000000000000000000000000000000000..9db1d198331b19148eda492953e1fade5252b00b
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxFilenameLen.swift
@@ -0,0 +1,22 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct FileTransferMaxFilenameLen {
+  public var run: () -> Int
+
+  public func callAsFunction() -> Int {
+    run()
+  }
+}
+
+extension FileTransferMaxFilenameLen {
+  public static func live(_ bindingsFileTransfer: BindingsFileTransfer) -> FileTransferMaxFilenameLen {
+    FileTransferMaxFilenameLen(run: bindingsFileTransfer.maxFileNameLen)
+  }
+}
+
+extension FileTransferMaxFilenameLen {
+  public static let unimplemented = FileTransferMaxFilenameLen(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxPreviewSize.swift b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxPreviewSize.swift
new file mode 100644
index 0000000000000000000000000000000000000000..a21163b2b7bf46821348e2c8ea499e55355b06ad
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferMaxPreviewSize.swift
@@ -0,0 +1,22 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct FileTransferMaxPreviewSize {
+  public var run: () -> Int
+
+  public func callAsFunction() -> Int {
+    run()
+  }
+}
+
+extension FileTransferMaxPreviewSize {
+  public static func live(_ bindingsFileTransfer: BindingsFileTransfer) -> FileTransferMaxPreviewSize {
+    FileTransferMaxPreviewSize(run: bindingsFileTransfer.maxPreviewSize)
+  }
+}
+
+extension FileTransferMaxPreviewSize {
+  public static let unimplemented = FileTransferMaxPreviewSize(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferReceive.swift b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferReceive.swift
new file mode 100644
index 0000000000000000000000000000000000000000..bd79c1a5997bd2c0116d793603d9a53877013cc8
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferReceive.swift
@@ -0,0 +1,22 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct FileTransferReceive {
+  public var run: (Data) throws -> Data
+
+  public func callAsFunction(transferId: Data) throws -> Data {
+    try run(transferId)
+  }
+}
+
+extension FileTransferReceive {
+  public static func live(_ bindingsFileTransfer: BindingsFileTransfer) -> FileTransferReceive {
+    FileTransferReceive(run: bindingsFileTransfer.receive)
+  }
+}
+
+extension FileTransferReceive {
+  public static let unimplemented = FileTransferReceive(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferRegisterReceivedProgressCallback.swift b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferRegisterReceivedProgressCallback.swift
new file mode 100644
index 0000000000000000000000000000000000000000..b094b3ca0e91c3457e084dbf6f398c8a3882d74d
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferRegisterReceivedProgressCallback.swift
@@ -0,0 +1,33 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct FileTransferRegisterReceivedProgressCallback {
+  public var run: (Data, String, FileTransferProgressCallback) throws -> Void
+
+  public func callAsFunction(
+    transferId: Data,
+    period: String,
+    callback: FileTransferProgressCallback
+  ) throws {
+    try run(transferId, period, callback)
+  }
+}
+
+extension FileTransferRegisterReceivedProgressCallback {
+  public static func live(_ bindingsFileTransfer: BindingsFileTransfer)
+  -> FileTransferRegisterReceivedProgressCallback {
+    FileTransferRegisterReceivedProgressCallback { transferId, period, callback in
+      try bindingsFileTransfer.registerReceivedProgressCallback(
+        transferId,
+        callback: callback.makeBindingsFileTransferReceiveProgressCallback(),
+        period: period
+      )
+    }
+  }
+}
+
+extension FileTransferRegisterReceivedProgressCallback {
+  public static let unimplemented = FileTransferRegisterReceivedProgressCallback(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferRegisterSentProgressCallback.swift b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferRegisterSentProgressCallback.swift
new file mode 100644
index 0000000000000000000000000000000000000000..c1cfcbc40b0cf0c2d9c683af90793f24e061b4a7
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferRegisterSentProgressCallback.swift
@@ -0,0 +1,33 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct FileTransferRegisterSentProgressCallback {
+  public var run: (Data, String, FileTransferProgressCallback) throws -> Void
+
+  public func callAsFunction(
+    transferId: Data,
+    period: String,
+    callback: FileTransferProgressCallback
+  ) throws {
+    try run(transferId, period, callback)
+  }
+}
+
+extension FileTransferRegisterSentProgressCallback {
+  public static func live(_ bindingsFileTransfer: BindingsFileTransfer)
+  -> FileTransferRegisterSentProgressCallback {
+    FileTransferRegisterSentProgressCallback { transferId, period, callback in
+      try bindingsFileTransfer.registerSentProgressCallback(
+        transferId,
+        callback: callback.makeBindingsFileTransferSentProgressCallback(),
+        period: period
+      )
+    }
+  }
+}
+
+extension FileTransferRegisterSentProgressCallback {
+  public static let unimplemented = FileTransferRegisterSentProgressCallback(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferSend.swift b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferSend.swift
new file mode 100644
index 0000000000000000000000000000000000000000..a23f859fd76a89be876aaa4ae5b7239cff059353
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/FileTransfer/Functors/FileTransferSend.swift
@@ -0,0 +1,55 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct FileTransferSend {
+  public struct Params: Equatable {
+    public init(
+      payload: FileSend,
+      recipientId: Data,
+      paramsJSON: Data,
+      retry: Float,
+      period: String
+    ) {
+      self.payload = payload
+      self.recipientId = recipientId
+      self.paramsJSON = paramsJSON
+      self.retry = retry
+      self.period = period
+    }
+
+    public var payload: FileSend
+    public var recipientId: Data
+    public var paramsJSON: Data
+    public var retry: Float
+    public var period: String
+  }
+
+  public var run: (Params, FileTransferProgressCallback) throws -> Data
+
+  public func callAsFunction(
+    params: Params,
+    callback: FileTransferProgressCallback
+  ) throws -> Data {
+    try run(params, callback)
+  }
+}
+
+extension FileTransferSend {
+  public static func live(_ bindingsFileTransfer: BindingsFileTransfer) -> FileTransferSend {
+    FileTransferSend { params, callback in
+      try bindingsFileTransfer.send(
+        params.payload.encode(),
+        recipientID: params.recipientId,
+        retry: params.retry,
+        callback: callback.makeBindingsFileTransferSentProgressCallback(),
+        period: params.period
+      )
+    }
+  }
+}
+
+extension FileTransferSend {
+  public static let unimplemented = FileTransferSend(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}