diff --git a/src/CaosDB.jl b/src/CaosDB.jl
index 726f01c9955a2f850e6d6b457f4fe61a3ef014bb..0409f4d8795edc1ecd0d19d057172e75c0bb253a 100644
--- a/src/CaosDB.jl
+++ b/src/CaosDB.jl
@@ -86,6 +86,7 @@ export create_transaction,
     add_insert_entity,
     add_update_entity,
     add_delete_by_id,
+    add_retrieve_and_download_file_by_id,
     add_query,
     execute,
     get_result_set,
diff --git a/src/Transaction.jl b/src/Transaction.jl
index 80bf3df0d43b031c62a039b738c0a8345a5bf050..5e33578dab4294ec434e25c87530447bb188e36f 100644
--- a/src/Transaction.jl
+++ b/src/Transaction.jl
@@ -29,6 +29,7 @@ export create_transaction,
     add_insert_entity,
     add_update_entity,
     add_delete_by_id,
+    add_retrieve_and_download_file_by_id,
     execute,
     get_result_set,
     get_count_result,
@@ -235,6 +236,29 @@ function add_retrieve_by_id(
     CaosDB.Exceptions.evaluate_return_code(err_code)
 end
 
+"""
+    function add_delete_by_id(transaction::Ref{_Transaction}, id::AbstractString)
+
+Add a sub-request to delete a single entity to the given `transaction`.
+
+!!! info
+
+    This does not execute the transaction.
+"""
+function add_retrieve_and_download_file_by_id(transaction::Ref{_Transaction}, id::AbstractString, path::AbstractString)
+
+    err_code = ccall(
+        (:caosdb_transaction_transaction_retrieve_and_download_file_by_id, CaosDB.library_name),
+        Cint,
+        (Ref{_Transaction}, Cstring, Cstring),
+        transaction,
+        id,
+        path,
+    )
+
+    CaosDB.Exceptions.evaluate_return_code(err_code)
+end
+
 
 """
     function add_query(transaction::Ref{_Transaction}, query::AbstractString)