diff --git a/producer/api/c/include/asapo/producer_c.h b/producer/api/c/include/asapo/producer_c.h
index 5e992bce3276a01233f54d3f3ec40e1e46857e32..190f013ec29799a152e5fafb34d6402f24e37a56 100644
--- a/producer/api/c/include/asapo/producer_c.h
+++ b/producer/api/c/include/asapo/producer_c.h
@@ -55,10 +55,10 @@ enum AsapoRequestHandlerType {
 
 //! c version of asapo::IngestModeFlags
 enum AsapoIngestModeFlags {
-  kTransferData = 1 << 0,
-  kTransferMetaDataOnly = 1 << 1,
-  kStoreInFilesystem = 1 << 2,
-  kStoreInDatabase = 1 << 3,
+    kTransferData = 1 << 0,
+    kTransferMetaDataOnly = 1 << 1,
+    kStoreInFilesystem = 1 << 2,
+    kStoreInDatabase = 1 << 3,
 };
 
 const uint64_t kDefaultIngestMode = kTransferData | kStoreInFilesystem | kStoreInDatabase;
@@ -114,6 +114,14 @@ AsapoStreamInfoHandle asapo_producer_get_last_stream(AsapoProducerHandle produce
         uint64_t timeout_ms,
         AsapoErrorHandle* error);
 
+AsapoMessageHeaderHandle asapo_create_message_header(uint64_t message_id,
+        uint64_t data_size,
+        const char* file_name,
+        const char* user_metadata,
+        uint64_t dataset_substream,
+        uint64_t dataset_size,
+        AsapoBool auto_id);
+
 int asapo_producer_send(AsapoProducerHandle producer,
                         const AsapoMessageHeaderHandle message_header,
                         void* data,
diff --git a/producer/api/cpp/src/producer_c_glue.cpp b/producer/api/cpp/src/producer_c_glue.cpp
index 24d1f09a8d18d395d8b59ac195143007adee34e1..2a4455626b8e1c143f6aff2ca583bc65e9ca71e4 100644
--- a/producer/api/cpp/src/producer_c_glue.cpp
+++ b/producer/api/cpp/src/producer_c_glue.cpp
@@ -104,6 +104,24 @@ extern "C" {
             uint64_t timeout_ms,
             AsapoErrorHandle* error);
 
+    AsapoMessageHeaderHandle asapo_create_message_header(uint64_t message_id,
+            uint64_t data_size,
+            const char* file_name,
+            const char* user_metadata,
+            uint64_t dataset_substream,
+            uint64_t dataset_size,
+            AsapoBool auto_id) {
+        return new AsapoHandlerHolder<asapo::MessageHeader>(new asapo::MessageHeader(message_id,
+                data_size,
+                file_name,
+                user_metadata,
+                dataset_substream,
+                dataset_size,
+                auto_id != 0));
+    }
+
+
+
 #define BUILD_WRAPPER asapo::RequestCallback wrapper = [ = ](asapo::RequestCallbackPayload payload, asapo::Error err) -> void { \
             auto payLoadHandle = new AsapoHandlerHolder<asapo::RequestCallbackPayload>(&payload); \
             auto errorHandle = new AsapoHandlerHolder<asapo::ErrorInterface>(err.release()); \