diff --git a/api/src/main/java/dev/fitko/fitconnect/api/services/Subscriber.java b/api/src/main/java/dev/fitko/fitconnect/api/services/Subscriber.java
index ebe4ee0a3004c078516138b38189847b38d173ad..448aad72e05f02b423a3bf61f6d2818f8f372d84 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/services/Subscriber.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/services/Subscriber.java
@@ -11,6 +11,7 @@ import dev.fitko.fitconnect.api.domain.model.submission.Submission;
 import dev.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup;
 import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
 
+import java.net.URI;
 import java.util.List;
 import java.util.Set;
 import java.util.UUID;
@@ -76,6 +77,15 @@ public interface Subscriber {
      */
     ValidationResult validateMetadata(Metadata metadata);
 
+    /**
+     * Validates the submission data structure against a given JSON-schema to ensure its correctness.
+     *
+     * @param submissionData the submission data object that is validated
+     * @param schemaUri schema to validate against
+     * @return a {@link ValidationResult}, contains an error if the submission data is invalid or doesn't match the schema
+     */
+    ValidationResult validateSubmissionDataSchema(String submissionData, URI schemaUri);
+
     /**
      * Validates data integrity of {@link Attachment} or {@link Data}.
      *
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/services/validation/ValidationService.java b/api/src/main/java/dev/fitko/fitconnect/api/services/validation/ValidationService.java
index 99057bf38655458ec9ec8d8206ed768545854f38..d9b88c9de9c2cdfe96bd257f475dc1a01b249cc9 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/services/validation/ValidationService.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/services/validation/ValidationService.java
@@ -75,14 +75,14 @@ public interface ValidationService {
     ValidationResult validateHashIntegrity(String originalHexHash, byte[] data);
 
     /**
-     * Tests if a given string is well-formed JSON syntax.
+     * Tests if a given string matches the specified schema.
      *
      * @param json json string that is tested
      * @param schemaUri URI of schema to validate against
      *
      * @return a {@link ValidationResult} with an optional error
      */
-    ValidationResult validateJsonFormat(String json, URI schemaUri);
+    ValidationResult validateSubmissionDataSchema(String json, URI schemaUri);
 
     /**
      * Tests if a given string is well-formed XML syntax.
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/SubscriberClient.java b/client/src/main/java/dev/fitko/fitconnect/client/SubscriberClient.java
index 4c75814f737c024c901915f335fd93289a7d6b27..15f51911b6edf4bda3d00bf382ca78470122b58a 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/SubscriberClient.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/SubscriberClient.java
@@ -2,6 +2,7 @@ package dev.fitko.fitconnect.client;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.nimbusds.jose.jwk.RSAKey;
+import com.nimbusds.jose.util.StandardCharset;
 import dev.fitko.fitconnect.api.domain.model.destination.Destination;
 import dev.fitko.fitconnect.api.domain.model.event.EventLogEntry;
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
@@ -113,9 +114,15 @@ public class SubscriberClient {
             LOGGER.info("Decrypting data ...");
             final byte[] decryptedData = decryptData(submission.getEncryptedData());
             final String hashFromSender = getDataHashFromMetadata(metadata);
-            final ValidationResult dataValidation = subscriber.validateHashIntegrity(hashFromSender, decryptedData);
-            if (dataValidation.hasError()) {
-                LOGGER.error("Data might be corrupted, hash-sum does not match", dataValidation.getError());
+            final ValidationResult dataHashValidation = subscriber.validateHashIntegrity(hashFromSender, decryptedData);
+            if (dataHashValidation.hasError()) {
+                LOGGER.error("Data might be corrupted, hash-sum does not match", dataHashValidation.getError());
+                return null;
+            }
+            final ValidationResult dataSchemaValidation = subscriber.validateSubmissionDataSchema(new String(decryptedData, StandardCharset.UTF_8),
+                    metadata.getContentStructure().getData().getSubmissionSchema().getSchemaUri());
+            if (dataSchemaValidation.hasError()) {
+                LOGGER.error("Submission data does not match the provided schema", dataHashValidation.getError());
                 return null;
             }
 
diff --git a/client/src/test/java/dev/fitko/fitconnect/client/ClientIntegrationTest.java b/client/src/test/java/dev/fitko/fitconnect/client/ClientIntegrationTest.java
index 152b935b8f40aa54ac6d000bbf28d245df7d81b4..96801051dcba6fdb47c94aa548e68a843a397a38 100644
--- a/client/src/test/java/dev/fitko/fitconnect/client/ClientIntegrationTest.java
+++ b/client/src/test/java/dev/fitko/fitconnect/client/ClientIntegrationTest.java
@@ -72,7 +72,7 @@ class ClientIntegrationTest {
             final var submission = SubmissionBuilder.Builder()
                     .withAttachment(new File("src/test/resources/attachment.txt"))
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -89,7 +89,7 @@ class ClientIntegrationTest {
             // Then
             assertNotNull(receivedSubmission);
             assertThat(receivedSubmission.getData(), is("{ \"data\": \"Beispiel Fachdaten\" }"));
-            assertThat(receivedSubmission.getDataSchemaUri(), is(URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json")));
+            assertThat(receivedSubmission.getDataSchemaUri(), is(URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json")));
             assertThat(receivedSubmission.getDataMimeType().toString(), is("application/json"));
             assertThat(new String(receivedSubmission.getAttachments().get(0).getData()), is("Test attachment"));
         }
@@ -194,7 +194,7 @@ class ClientIntegrationTest {
             // When
             final var submission = SubmissionBuilder.Builder()
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -224,14 +224,14 @@ class ClientIntegrationTest {
 
             final var submissionOne = SubmissionBuilder.Builder()
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten 1\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
                     .withDestination(destinationId)
                     .withServiceType(serviceName, leikaKey)
                     .build();
 
             final var submissionTwo = SubmissionBuilder.Builder()
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten 2\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
                     .withDestination(destinationId)
                     .withServiceType(serviceName, leikaKey)
                     .build();
@@ -270,7 +270,7 @@ class ClientIntegrationTest {
             final var submission = SubmissionBuilder.Builder()
                     .withAttachment(new File("src/test/resources/attachment.txt"))
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -301,7 +301,7 @@ class ClientIntegrationTest {
             final var submission = SubmissionBuilder.Builder()
                     .withAttachment(new File("src/test/resources/attachment.txt"))
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -331,7 +331,7 @@ class ClientIntegrationTest {
 
             final var submission = SubmissionBuilder.Builder()
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -363,7 +363,7 @@ class ClientIntegrationTest {
             final var submission = SubmissionBuilder.Builder()
                     .withAttachment(new File("src/test/resources/attachment.txt"))
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -402,7 +402,7 @@ class ClientIntegrationTest {
             final var submission = SubmissionBuilder.Builder()
                     .withAttachment(new File("src/test/resources/attachment.txt"))
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -535,7 +535,7 @@ class ClientIntegrationTest {
 
 
     private ApplicationConfig getConfigWithCredentialsFromGitlab(final String environmentName, final boolean allowInsecurePublicKey,
-                                                                 final boolean skipSubmissiomDataValidation) {
+                                                                 final boolean skipSubmissionDataValidation) {
 
         final var sender = new SenderConfig(System.getenv("SENDER_CLIENT_ID"), System.getenv("SENDER_CLIENT_SECRET"));
 
@@ -547,7 +547,7 @@ class ClientIntegrationTest {
                 .build();
 
         final var envName = new EnvironmentName(environmentName);
-        final Environment env = getEnvironment(allowInsecurePublicKey, skipSubmissiomDataValidation);
+        final Environment env = getEnvironment(allowInsecurePublicKey, skipSubmissionDataValidation);
 
         return ApplicationConfig.builder()
                 .senderConfig(sender)
@@ -557,11 +557,11 @@ class ClientIntegrationTest {
                 .build();
     }
 
-    private static Environment getEnvironment(final boolean allowInsecurePublicKey, final boolean skipSubmissiomDataValidation) {
+    private static Environment getEnvironment(final boolean allowInsecurePublicKey, final boolean skipSubmissionDataValidation) {
         final String authBaseUrl = "https://auth-testing.fit-connect.fitko.dev";
         final String routingBaseUrl = "https://routing-api-testing.fit-connect.fitko.dev";
         final String selfServicePortalUrl = "https://portal.auth-testing.fit-connect.fitko.dev";
         final String submissionBaseUrl = "https://submission-api-testing.fit-connect.fitko.dev";
-        return new Environment(authBaseUrl, routingBaseUrl, submissionBaseUrl, selfServicePortalUrl, allowInsecurePublicKey, skipSubmissiomDataValidation);
+        return new Environment(authBaseUrl, routingBaseUrl, submissionBaseUrl, selfServicePortalUrl, allowInsecurePublicKey, skipSubmissionDataValidation);
     }
 }
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 d58b74baf4733d024a5014b348d05cb44351b7a8..4a1f2c2ea1dd52deeba78d05f38d8fc0cb3f80ee 100644
--- a/core/src/main/java/dev/fitko/fitconnect/core/SubmissionSender.java
+++ b/core/src/main/java/dev/fitko/fitconnect/core/SubmissionSender.java
@@ -118,7 +118,7 @@ public class SubmissionSender implements Sender {
     @Override
     public ValidationResult validateJsonFormat(final String json, final URI schemaUri) {
         LOGGER.info("Validating data json format");
-        return validationService.validateJsonFormat(json, schemaUri);
+        return validationService.validateSubmissionDataSchema(json, schemaUri);
     }
 
     @Override
diff --git a/core/src/main/java/dev/fitko/fitconnect/core/SubmissionSubscriber.java b/core/src/main/java/dev/fitko/fitconnect/core/SubmissionSubscriber.java
index c47927ed62883d7403df37fa50ea5429a9d26554..898ae70a183c80aef8dfbab9a4b8e8c934515a17 100644
--- a/core/src/main/java/dev/fitko/fitconnect/core/SubmissionSubscriber.java
+++ b/core/src/main/java/dev/fitko/fitconnect/core/SubmissionSubscriber.java
@@ -17,6 +17,7 @@ import dev.fitko.fitconnect.api.services.validation.ValidationService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.net.URI;
 import java.util.List;
 import java.util.Set;
 import java.util.UUID;
@@ -79,6 +80,12 @@ public class SubmissionSubscriber implements Subscriber {
         return validationService.validateMetadataSchema(metadata);
     }
 
+    @Override
+    public ValidationResult validateSubmissionDataSchema(String submissiondata, URI schemaUri) {
+        LOGGER.info("Validating submission data schema");
+        return validationService.validateSubmissionDataSchema(submissiondata, schemaUri);
+    }
+
     @Override
     public ValidationResult validateHashIntegrity(final String originalHash, final byte[] data) {
         LOGGER.info("Validating data hash integrity");
diff --git a/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java b/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java
index 128de388fdebd6352f9c12092cd1639556a33f92..ba18643c862ff7cf0d1cbb40a572de4289a70413 100644
--- a/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java
+++ b/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java
@@ -151,7 +151,7 @@ public class DefaultValidationService implements ValidationService {
     }
 
     @Override
-    public ValidationResult validateJsonFormat(final String json, final URI schemaUri) {
+    public ValidationResult validateSubmissionDataSchema(final String json, final URI schemaUri) {
 
         if (config.getCurrentEnvironment().isSkipSubmissionDataValidation()) {
             LOGGER.warn("Submission data validation is deactivated. This should be done only on secure test environments.");
diff --git a/core/src/test/java/dev/fitko/fitconnect/core/SubmissionSenderTest.java b/core/src/test/java/dev/fitko/fitconnect/core/SubmissionSenderTest.java
index 7887831208484aa9945cb6b79e7f8e1d19e1028c..a832bbc0b5c60c4509dead9bfd17e00821103502 100644
--- a/core/src/test/java/dev/fitko/fitconnect/core/SubmissionSenderTest.java
+++ b/core/src/test/java/dev/fitko/fitconnect/core/SubmissionSenderTest.java
@@ -333,7 +333,7 @@ public class SubmissionSenderTest {
     void testValidJsonFormatValidation() {
 
         // Given
-        when(validationServiceMock.validateJsonFormat(any(), eq(URI.create("urn:something")))).thenReturn(ValidationResult.ok());
+        when(validationServiceMock.validateSubmissionDataSchema(any(), eq(URI.create("urn:something")))).thenReturn(ValidationResult.ok());
 
         // When
         final ValidationResult validationResult = underTest.validateJsonFormat("{}", URI.create("urn:something"));
@@ -346,7 +346,7 @@ public class SubmissionSenderTest {
     void testInvalidJsonFormatValidation() {
 
         // Given
-        when(validationServiceMock.validateJsonFormat(any(), eq(URI.create("urn:something")))).thenReturn(ValidationResult.error(new ValidationException("Invalid json")));
+        when(validationServiceMock.validateSubmissionDataSchema(any(), eq(URI.create("urn:something")))).thenReturn(ValidationResult.error(new ValidationException("Invalid json")));
 
         // When
         final ValidationResult validationResult = underTest.validateJsonFormat("$%&/()", URI.create("urn:something"));
diff --git a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
index a8675a48ed8662e145d6b4d46dde50b04a030b56..14b68de5f07aaf6e376dde378aaa2b872eaa084d 100644
--- a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
+++ b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
@@ -419,7 +419,7 @@ class DefaultValidationServiceTest {
         final var validJson = getResource("/valid_json_data.json");
 
         // When
-        final ValidationResult validationResult = defaultValidationService.validateJsonFormat(validJson, URI.create("urn:something"));
+        final ValidationResult validationResult = defaultValidationService.validateSubmissionDataSchema(validJson, URI.create("urn:something"));
 
         // Then
         assertTrue(validationResult.isValid());
@@ -436,7 +436,7 @@ class DefaultValidationServiceTest {
         final var invalidJson = getResource("/invalid_json_data.json");
 
         // When
-        final ValidationResult validationResult = defaultValidationService.validateJsonFormat(invalidJson, URI.create("urn:something"));
+        final ValidationResult validationResult = defaultValidationService.validateSubmissionDataSchema(invalidJson, URI.create("urn:something"));
 
         // Then
         assertFalse(validationResult.isValid());
@@ -455,7 +455,7 @@ class DefaultValidationServiceTest {
         final var invalidJson = "{ \"someString\": \"someStringValue\", \"someArray\": [\"someArrayValue\"] }";
 
         // When
-        final ValidationResult validationResult = defaultValidationService.validateJsonFormat(invalidJson, URI.create("urn:something"));
+        final ValidationResult validationResult = defaultValidationService.validateSubmissionDataSchema(invalidJson, URI.create("urn:something"));
 
         // Then
         assertTrue(validationResult.isValid());
@@ -473,7 +473,7 @@ class DefaultValidationServiceTest {
         final var invalidJson = "{ \"wrongString\": \"someStringValue\", \"someArray\": [\"someArrayValue\"] }";
 
         // When
-        final ValidationResult validationResult = defaultValidationService.validateJsonFormat(invalidJson, URI.create("urn:something"));
+        final ValidationResult validationResult = defaultValidationService.validateSubmissionDataSchema(invalidJson, URI.create("urn:something"));
 
         // Then
         assertFalse(validationResult.isValid());