diff --git a/src/Messaging/Events/ExternalAppRequestEvent.cs b/src/Messaging/Events/ExternalAppRequestEvent.cs
index 927be8a..f50ec3e 100755
--- a/src/Messaging/Events/ExternalAppRequestEvent.cs
+++ b/src/Messaging/Events/ExternalAppRequestEvent.cs
@@ -1,12 +1,92 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+/*
+ * Copyright 2021-2023 MONAI Consortium
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 
+using System.ComponentModel.DataAnnotations;
+using System.Text.Json.Serialization;
+using Ardalis.GuardClauses;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
 namespace Monai.Deploy.Messaging.Events
 {
-    internal class ExternalAppRequestEvent
+    public class ExternalAppRequestEvent
     {
+        /// <summary>
+        /// Gets or sets the workflow instanceID generated by the Workflow Manager.
+        /// </summary>
+        [JsonProperty(PropertyName = "workflow_instance_id")]
+        [JsonPropertyName("workflow_instance_id")]
+        [Required]
+        public string WorkflowInstanceId { get; set; } = default!;
+
+        /// <summary>
+        /// Gets or sets the export task ID generated by the Workflow Manager.
+        /// </summary>
+        [JsonProperty(PropertyName = "export_task_id")]
+        [JsonPropertyName("export_task_id")]
+        [Required]
+        public string ExportTaskId { get; set; } = default!;
+
+        /// <summary>
+        /// Gets or sets the state of the export task.
+        /// </summary>
+        [JsonProperty(PropertyName = "status")]
+        [JsonPropertyName("status")]
+        [Newtonsoft.Json.JsonConverter(typeof(StringEnumConverter))]
+        [System.Text.Json.Serialization.JsonConverter(typeof(JsonStringEnumConverter))]
+        [Required]
+        public ExportStatus Status { get; set; }
+
+        /// <summary>
+        /// Gets or sets error messages, if any, when exporting.
+        /// </summary>
+        [JsonProperty(PropertyName = "message")]
+        [JsonPropertyName("message")]
+        public string Message { get; set; } = default!;
+
+        /// <summary>
+        /// Gets or sets files exported with its status
+        /// </summary>
+        [JsonProperty(PropertyName = "file_statuses")]
+        [JsonPropertyName("file_statuses")]
+        public Dictionary<string, FileExportStatus> FileStatuses { get; set; }
+
+        /// <summary>
+        /// the target to export too
+        /// </summary>
+        public DataOrigin? Target { get; set; }
+
+        [Newtonsoft.Json.JsonConstructor]
+        [System.Text.Json.Serialization.JsonConstructor]
+        public ExternalAppRequestEvent()
+        {
+            Status = ExportStatus.Unknown;
+            FileStatuses = new Dictionary<string, FileExportStatus>();
+        }
+
+        public ExternalAppRequestEvent(ExportRequestEvent exportRequest, ExportStatus exportStatus, Dictionary<string, FileExportStatus> fileStatuses)
+        {
+            Guard.Against.Null(exportRequest, nameof(exportRequest));
+            Guard.Against.Null(exportStatus, nameof(exportStatus));
+            Guard.Against.Null(fileStatuses, nameof(fileStatuses));
+
+            WorkflowInstanceId = exportRequest.WorkflowInstanceId;
+            ExportTaskId = exportRequest.ExportTaskId;
+            Message = string.Join(System.Environment.NewLine, exportRequest.ErrorMessages);
+            Status = exportStatus;
+            FileStatuses = fileStatuses;
+        }
     }
 }