diff --git a/client/src/main/java/dev/fitko/fitconnect/client/sender/model/SubmissionPayload.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/submission/SubmissionPayload.java
similarity index 94%
rename from client/src/main/java/dev/fitko/fitconnect/client/sender/model/SubmissionPayload.java
rename to api/src/main/java/dev/fitko/fitconnect/api/domain/model/submission/SubmissionPayload.java
index fc7956049bd99f805db90ea84834cf161cf16337..f276501e0bf62ef7701597c29323d932915f53da 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/sender/model/SubmissionPayload.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/model/submission/SubmissionPayload.java
@@ -1,4 +1,4 @@
-package dev.fitko.fitconnect.client.sender.model;
+package dev.fitko.fitconnect.api.domain.model.submission;
 
 import dev.fitko.fitconnect.api.domain.model.metadata.data.MimeType;
 import dev.fitko.fitconnect.api.domain.model.submission.ServiceType;
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/services/Sender.java b/api/src/main/java/dev/fitko/fitconnect/api/services/Sender.java
index 1078da6fa66a0a20d17b8cf2bc76fd07999fbb96..ecee117fa17047f292f00b3e1fb7920b3eda226d 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/services/Sender.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/services/Sender.java
@@ -8,10 +8,7 @@ import dev.fitko.fitconnect.api.domain.model.event.authtags.AuthenticationTags;
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import dev.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.Data;
-import dev.fitko.fitconnect.api.domain.model.submission.CreateSubmission;
-import dev.fitko.fitconnect.api.domain.model.submission.Submission;
-import dev.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup;
-import dev.fitko.fitconnect.api.domain.model.submission.SubmitSubmission;
+import dev.fitko.fitconnect.api.domain.model.submission.*;
 import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
 import dev.fitko.fitconnect.api.exceptions.*;
 
@@ -146,7 +143,7 @@ public interface Sender {
      *
      * @return a {@link ValidationResult} with an optional error
      */
-    ValidationResult validateJsonFormat(String json);
+    ValidationResult validateJsonFormat(SubmissionPayload json);
 
     /**
      * Tests if a given string is well-formed XML syntax.
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/services/schema/SchemaProvider.java b/api/src/main/java/dev/fitko/fitconnect/api/services/schema/SchemaProvider.java
index 95bf3bedc5aef606bc12b404d3d83e031949ccc3..af69d63c2ee5263af2f30835720158d25cef30cf 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/services/schema/SchemaProvider.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/services/schema/SchemaProvider.java
@@ -60,4 +60,14 @@ public interface SchemaProvider {
      * @throws SchemaNotFoundException if the schema is not existing
      */
     String loadDestinationSchema(URI schemaUri) throws SchemaNotFoundException;
+
+    /**
+     * Load the schema for the submission data.
+     *
+     * @param schemaUri uri of the submission data schema that should be loaded
+     * @return the schema as string
+     *
+     * @throws SchemaNotFoundException if the schema is not existing
+     */
+    String loadSubmissionDataSchema(final URI schemaUri) throws SchemaNotFoundException;
 }
\ No newline at end of file
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/SenderClient.java b/client/src/main/java/dev/fitko/fitconnect/client/SenderClient.java
index 523193e4379bd075df2c4a7e5dd5a517df80fe79..4970c09efeaadfca5460fc50842b53ec26feed76 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/SenderClient.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/SenderClient.java
@@ -11,7 +11,7 @@ import dev.fitko.fitconnect.api.domain.model.submission.SubmitSubmission;
 import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
 import dev.fitko.fitconnect.api.services.Sender;
 import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload;
-import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
+import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload;
 import dev.fitko.fitconnect.client.sender.strategies.SendEncryptedSubmissionStrategy;
 import dev.fitko.fitconnect.client.sender.strategies.SendNewSubmissionStrategy;
 import dev.fitko.fitconnect.client.util.ValidDataGuard;
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/cli/CommandExecutor.java b/client/src/main/java/dev/fitko/fitconnect/client/cli/CommandExecutor.java
index 7410ce89e10fa6bf8d10e83ffdd5bf56e590eea4..c3f6b15ce439c9f7ef7960bc035cb002be5f8ca7 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/cli/CommandExecutor.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/cli/CommandExecutor.java
@@ -10,7 +10,7 @@ import dev.fitko.fitconnect.client.cli.batch.ImportRecord;
 import dev.fitko.fitconnect.client.cli.commands.*;
 import dev.fitko.fitconnect.client.cli.util.AttachmentDataType;
 import dev.fitko.fitconnect.client.sender.SubmissionBuilder;
-import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
+import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload;
 import dev.fitko.fitconnect.client.subscriber.ReceivedSubmission;
 import dev.fitko.fitconnect.client.subscriber.model.ReceivedAttachment;
 import dev.fitko.fitconnect.core.util.StopWatch;
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/sender/SubmissionBuilder.java b/client/src/main/java/dev/fitko/fitconnect/client/sender/SubmissionBuilder.java
index 89a55fd239a0adeacc5dfba66fa45a9ee5b4fa20..4298f643133ce5c5c7be0c50fa2c432e4b2710e3 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/sender/SubmissionBuilder.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/sender/SubmissionBuilder.java
@@ -2,7 +2,7 @@ package dev.fitko.fitconnect.client.sender;
 
 import dev.fitko.fitconnect.api.domain.model.metadata.data.MimeType;
 import dev.fitko.fitconnect.api.domain.model.submission.ServiceType;
-import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
+import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload;
 import dev.fitko.fitconnect.client.sender.steps.*;
 import lombok.Getter;
 import org.slf4j.Logger;
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/sender/steps/BuildStep.java b/client/src/main/java/dev/fitko/fitconnect/client/sender/steps/BuildStep.java
index 2ecd116d6e5616c808a692fbddb98fd894ea178b..a5e1defc933ba7038bdb38f17c4b84c094ce9d7d 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/sender/steps/BuildStep.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/sender/steps/BuildStep.java
@@ -1,6 +1,6 @@
 package dev.fitko.fitconnect.client.sender.steps;
 
-import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
+import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload;
 
 public interface BuildStep {
 
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/sender/strategies/SendNewSubmissionStrategy.java b/client/src/main/java/dev/fitko/fitconnect/client/sender/strategies/SendNewSubmissionStrategy.java
index 664109153eb409b19e28c53657b6bb46f6cad3e0..fbe3e33e1628ff8d888c0da90a72749e3f0bcc6f 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/sender/strategies/SendNewSubmissionStrategy.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/sender/strategies/SendNewSubmissionStrategy.java
@@ -2,7 +2,6 @@ package dev.fitko.fitconnect.client.sender.strategies;
 
 import com.nimbusds.jose.jwk.RSAKey;
 import dev.fitko.fitconnect.api.domain.model.destination.Destination;
-import dev.fitko.fitconnect.api.domain.model.destination.DestinationService;
 import dev.fitko.fitconnect.api.domain.model.metadata.ContentStructure;
 import dev.fitko.fitconnect.api.domain.model.metadata.Hash;
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
@@ -28,7 +27,7 @@ import dev.fitko.fitconnect.api.exceptions.SchemaNotFoundException;
 import dev.fitko.fitconnect.api.exceptions.SubmissionNotCreatedException;
 import dev.fitko.fitconnect.api.services.Sender;
 import dev.fitko.fitconnect.client.sender.model.AttachmentPayload;
-import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
+import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload;
 import dev.fitko.fitconnect.core.util.StopWatch;
 import org.apache.tika.Tika;
 import org.slf4j.Logger;
@@ -41,7 +40,6 @@ import java.net.URLConnection;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
 import java.util.UUID;
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/util/ValidDataGuard.java b/client/src/main/java/dev/fitko/fitconnect/client/util/ValidDataGuard.java
index 3fc9bc6334f5f53f7e8968d94e7dba19f4b2fa8c..0e15340daa25242c9d25b35e215f21aa0f8a2d79 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/util/ValidDataGuard.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/util/ValidDataGuard.java
@@ -7,7 +7,7 @@ import dev.fitko.fitconnect.api.domain.model.submission.ServiceType;
 import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
 import dev.fitko.fitconnect.api.services.Sender;
 import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload;
-import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
+import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload;
 
 import java.net.URI;
 import java.util.Objects;
diff --git a/client/src/test/java/dev/fitko/fitconnect/client/SenderClientTest.java b/client/src/test/java/dev/fitko/fitconnect/client/SenderClientTest.java
index 723b1e2603662cff41d6b311c25026dae29f5d9d..3ae0ca490f445fb370a766d18700b1be36be78e6 100644
--- a/client/src/test/java/dev/fitko/fitconnect/client/SenderClientTest.java
+++ b/client/src/test/java/dev/fitko/fitconnect/client/SenderClientTest.java
@@ -23,7 +23,7 @@ import dev.fitko.fitconnect.api.services.Sender;
 import dev.fitko.fitconnect.client.sender.EncryptedSubmissionBuilder;
 import dev.fitko.fitconnect.client.sender.SubmissionBuilder;
 import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload;
-import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
+import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload;
 import dev.fitko.fitconnect.client.testutil.LogCaptor;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
diff --git a/client/src/test/java/dev/fitko/fitconnect/client/cli/CommandLineClientTest.java b/client/src/test/java/dev/fitko/fitconnect/client/cli/CommandLineClientTest.java
index 61e54c21aca6754a05348568d776afe5dc1b1802..ae4a9f465b0ad7f942f6b3bb2d7f825ae00456f1 100644
--- a/client/src/test/java/dev/fitko/fitconnect/client/cli/CommandLineClientTest.java
+++ b/client/src/test/java/dev/fitko/fitconnect/client/cli/CommandLineClientTest.java
@@ -11,7 +11,7 @@ import dev.fitko.fitconnect.client.SubscriberClient;
 import dev.fitko.fitconnect.client.cli.batch.CsvImporter;
 import dev.fitko.fitconnect.client.cli.batch.ImportRecord;
 import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload;
-import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
+import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload;
 import dev.fitko.fitconnect.client.subscriber.ReceivedSubmission;
 import dev.fitko.fitconnect.client.subscriber.model.ReceivedAttachment;
 import dev.fitko.fitconnect.client.subscriber.model.ReceivedData;
diff --git a/client/src/test/java/dev/fitko/fitconnect/client/util/ValidDataGuardTest.java b/client/src/test/java/dev/fitko/fitconnect/client/util/ValidDataGuardTest.java
index 6dc3c86998232b50665f09785a5620966551a137..a3e1453fe975257bd64cef25767de302dc07f170 100644
--- a/client/src/test/java/dev/fitko/fitconnect/client/util/ValidDataGuardTest.java
+++ b/client/src/test/java/dev/fitko/fitconnect/client/util/ValidDataGuardTest.java
@@ -9,7 +9,7 @@ import dev.fitko.fitconnect.api.services.Sender;
 import dev.fitko.fitconnect.client.sender.EncryptedSubmissionBuilder;
 import dev.fitko.fitconnect.client.sender.SubmissionBuilder;
 import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload;
-import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
+import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
diff --git a/core/src/main/java/dev/fitko/fitconnect/core/SubmissionSender.java b/core/src/main/java/dev/fitko/fitconnect/core/SubmissionSender.java
index f66087eabaf1bc8d1f01c07c79039eefdd130b96..eb5cc289f429871403de518cefccfca60b5cd1b2 100644
--- a/core/src/main/java/dev/fitko/fitconnect/core/SubmissionSender.java
+++ b/core/src/main/java/dev/fitko/fitconnect/core/SubmissionSender.java
@@ -6,10 +6,7 @@ import dev.fitko.fitconnect.api.domain.model.event.EventLogEntry;
 import dev.fitko.fitconnect.api.domain.model.event.EventStatus;
 import dev.fitko.fitconnect.api.domain.model.event.authtags.AuthenticationTags;
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
-import dev.fitko.fitconnect.api.domain.model.submission.CreateSubmission;
-import dev.fitko.fitconnect.api.domain.model.submission.Submission;
-import dev.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup;
-import dev.fitko.fitconnect.api.domain.model.submission.SubmitSubmission;
+import dev.fitko.fitconnect.api.domain.model.submission.*;
 import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
 import dev.fitko.fitconnect.api.services.Sender;
 import dev.fitko.fitconnect.api.services.crypto.CryptoService;
@@ -108,7 +105,6 @@ public class SubmissionSender implements Sender {
         return keyService.getPublicEncryptionKey(destinationId);
     }
 
-
     @Override
     public Submission sendSubmission(final SubmitSubmission submission) {
         LOGGER.info("Sending submission {}", submission.getSubmissionId());
@@ -116,7 +112,7 @@ public class SubmissionSender implements Sender {
     }
 
     @Override
-    public ValidationResult validateJsonFormat(final String json) {
+    public ValidationResult validateJsonFormat(final SubmissionPayload json) {
         LOGGER.info("Validating data json format");
         return validationService.validateJsonFormat(json);
     }
diff --git a/core/src/main/java/dev/fitko/fitconnect/core/schema/SchemaResourceProvider.java b/core/src/main/java/dev/fitko/fitconnect/core/schema/SchemaResourceProvider.java
index 88433e047792bb8e919a386d33a4ba6b1b53ee3c..cb5cfef450e902b2db6af39322660c5d56e21acd 100644
--- a/core/src/main/java/dev/fitko/fitconnect/core/schema/SchemaResourceProvider.java
+++ b/core/src/main/java/dev/fitko/fitconnect/core/schema/SchemaResourceProvider.java
@@ -96,6 +96,20 @@ public class SchemaResourceProvider implements SchemaProvider {
         return schema;
     }
 
+    @Override
+    public String loadSubmissionDataSchema(final URI schemaUri) throws SchemaNotFoundException {
+
+        String schema;
+        if(schemaUri.toString().matches("http.+")) {
+            schema = "load schema from remote";
+        }
+        schema = destinationSchemas.get(schemaUri);
+        if (schema == null) {
+            throw new SchemaNotFoundException("Destination schema " + schemaUri.toString() + " is not available.");
+        }
+        return schema;
+    }
+
     private void addSetSchema(final String schema) {
         setSchemas.put(readIdFromSchema(schema), schema);
     }