diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java
index 8ebf3d388dd200bb2d9ee9a5d57f817ab4a3817a..1b4aee5979b99a9591f17b1648913d3ec0801191 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java
@@ -1,17 +1,25 @@
 package de.ozgcloud.alfa.bescheid;
 
+import static java.util.Optional.*;
 import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 
 import java.util.function.Predicate;
 
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
+import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.binaryfile.BinaryFileController;
 import de.ozgcloud.alfa.common.command.CommandController;
 import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
+import de.ozgcloud.alfa.vorgang.Eingang;
+import de.ozgcloud.alfa.vorgang.EingangHeader;
+import de.ozgcloud.alfa.vorgang.VorgangController;
+import de.ozgcloud.alfa.vorgang.VorgangProperties;
+import de.ozgcloud.alfa.vorgang.VorgangProperties.VorgangProperty;
+import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
 import lombok.RequiredArgsConstructor;
 
 @Component
@@ -31,6 +39,8 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc
 	private static final Predicate<Bescheid> HAS_ATTACHMENTS = bescheid -> !bescheid.getAttachments().isEmpty();
 
 	private final BescheidService bescheidService;
+	private final VorgangController vorgangController;
+	private final VorgangProperties vorgangProperties;
 
 	@Override
 	public EntityModel<Bescheid> toModel(Bescheid bescheid) {
@@ -40,8 +50,8 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc
 		var uploadBescheidFileLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidFile", null));
 		var uploadAttachmentLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidAttachment", null));
 		var attachmentsLink = linkTo(methodOn(BescheidController.class).getAttachments(bescheid.getVorgangId()));
-		var createCommandLink = linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(bescheid.getVorgangId(),
-				bescheid.getId(), bescheid.getVersion(), null));
+		var createCommandLink = buildCreateCommandLink(bescheid);
+		var vorgangWithEingang = vorgangController.getVorgang(bescheid.getVorgangId());
 
 		return ModelBuilder.fromEntity(bescheid)
 				.addLink(selfLink.withSelfRel())
@@ -52,10 +62,34 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc
 				.ifMatch(HAS_ATTACHMENTS)
 				.addLink(attachmentsLink.withRel(REL_ATTACHMENTS))
 				.addLink(createCommandLink.withRel(REL_UPDATE))
-				.ifMatch(bescheidService::canCreateBescheidDocumentAutomatically)
+				.ifMatch(() -> canCreateBescheidDocumentAutomatically(vorgangWithEingang))
 				.addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT))
 				.addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT_FROM_FILE))
 				.addLink(createCommandLink.withRel(REL_SEND))
 				.buildModel();
 	}
+
+	private WebMvcLinkBuilder buildCreateCommandLink(Bescheid bescheid) {
+		return linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(bescheid.getVorgangId(), bescheid.getId(),
+				bescheid.getVersion(), null));
+	}
+
+	boolean canCreateBescheidDocumentAutomatically(VorgangWithEingang vorgang) {
+		return bescheidService.canCreateBescheidDocumentAutomatically() && hasVorgangCreateBescheidDocumentEnabled(vorgang);
+	}
+
+	boolean hasVorgangCreateBescheidDocumentEnabled(VorgangWithEingang vorgang) {
+		return ofNullable(vorgang.getEingang())
+				.map(Eingang::getHeader)
+				.map(this::isCreateBescheidDocumentEnabled)
+				.orElse(false);
+	}
+
+	private boolean isCreateBescheidDocumentEnabled(EingangHeader eingangHeader) {
+		return vorgangProperties.getBescheid().stream().anyMatch(prop -> isFormIdAndFormEngineNameMatching(eingangHeader, prop));
+	}
+
+	private boolean isFormIdAndFormEngineNameMatching(EingangHeader eingangHeader, VorgangProperty property) {
+		return property.getFormId().equals(eingangHeader.getFormId()) && property.getFormEngineName().equals(eingangHeader.getFormEngineName());
+	}
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java
index 450d840af3c37898c155029886b6241e1220f679..b89bf7cbd6f033fa90798eaaf53b6b3106639b78 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java
@@ -5,7 +5,9 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
 import java.util.Collections;
+import java.util.List;
 
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -19,7 +21,15 @@ import org.springframework.hateoas.Link;
 import org.springframework.web.util.UriTemplate;
 
 import de.ozgcloud.alfa.common.command.CommandController;
+import de.ozgcloud.alfa.vorgang.Eingang;
+import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory;
+import de.ozgcloud.alfa.vorgang.EingangTestFactory;
+import de.ozgcloud.alfa.vorgang.VorgangController;
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
+import de.ozgcloud.alfa.vorgang.VorgangProperties;
+import de.ozgcloud.alfa.vorgang.VorgangPropertyTestFactory;
+import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
+import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory;
 
 class BescheidModelAssemblerTest {
 
@@ -30,10 +40,22 @@ class BescheidModelAssemblerTest {
 	@Mock
 	private BescheidService bescheidService;
 
+	@Mock
+	private VorgangProperties vorgangProperties;
+
+	@Mock
+	private VorgangController vorgangController;
+
 	@Nested
 	class TestToModel {
 
 		private final Bescheid bescheid = BescheidTestFactory.create();
+		private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgangWithEingang);
+		}
 
 		@Test
 		void shouldHaveSelfLink() {
@@ -95,7 +117,7 @@ class BescheidModelAssemblerTest {
 
 		@Test
 		void shouldHaveCreateDocumentLink() {
-			when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true);
+			doReturn(true).when(assembler).canCreateBescheidDocumentAutomatically(vorgangWithEingang);
 
 			var model = callToModel();
 
@@ -105,7 +127,7 @@ class BescheidModelAssemblerTest {
 
 		@Test
 		void shoulNotdHaveCreateDocumentLink() {
-			when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(false);
+			doReturn(false).when(assembler).canCreateBescheidDocumentAutomatically(vorgangWithEingang);
 
 			var model = callToModel();
 
@@ -168,4 +190,146 @@ class BescheidModelAssemblerTest {
 			return assembler.toModel(bescheid);
 		}
 	}
+
+	@Nested
+	class TestHasVorgangCreateBescheidDocumentEnabled {
+
+		@Nested
+		class TestOnEmptyBescheidProperties {
+
+			@BeforeEach
+			void setUp() {
+				when(vorgangProperties.getBescheid()).thenReturn(Collections.emptyList());
+			}
+
+			@Test
+			void shouldReturnFalse() {
+				var hasEnabled = callProcessor(VorgangWithEingangTestFactory.create());
+
+				assertThat(hasEnabled).isFalse();
+			}
+
+		}
+
+		@Nested
+		class TestOnBescheidPropertiesSet {
+
+			@BeforeEach
+			void setUp() {
+				when(vorgangProperties.getBescheid()).thenReturn(List.of(VorgangPropertyTestFactory.create()));
+			}
+
+			@Test
+			void shouldReturnFalseIfFormEngineNameNotEquals() {
+				var vorgang = createVorgang(EingangTestFactory.createBuilder()
+						.header(EingangHeaderTestFactory.createBuilder()
+								.formEngineName("different").build())
+						.build());
+
+				var hasEnabled = callProcessor(vorgang);
+
+				assertThat(hasEnabled).isFalse();
+			}
+
+			@Test
+			void shouldReturnTrue() {
+				var hasEnabled = callProcessor(VorgangWithEingangTestFactory.create());
+
+				assertThat(hasEnabled).isTrue();
+			}
+		}
+
+		@Test
+		void shouldReturnFalseOnEmptyEingang() {
+			var vorgangWithEmptyEingang = createVorgang(null);
+
+			var hasEnabled = callProcessor(vorgangWithEmptyEingang);
+
+			assertThat(hasEnabled).isFalse();
+		}
+
+		@Test
+		void shouldReturnFalseOnEmptyEingangHeader() {
+			var vorgangWithEmptyEingangHeader = EingangTestFactory.createBuilder().header(null).build();
+
+			var hasEnabled = callProcessor(createVorgang(vorgangWithEmptyEingangHeader));
+
+			assertThat(hasEnabled).isFalse();
+		}
+
+		@Test
+		void shouldReturnFalseOnEmptyFormEngineName() {
+			var vorgangWithEmptyFormEngineName = createVorgang(
+					EingangTestFactory.createBuilder().header(EingangHeaderTestFactory.createBuilder().formEngineName(null).build()).build());
+
+			var hasEnabled = callProcessor(vorgangWithEmptyFormEngineName);
+
+			assertThat(hasEnabled).isFalse();
+		}
+
+		@Test
+		void shouldReturnFalseOnEmptyFormId() {
+			var vorgangWithEmptyFormId = createVorgang(
+					EingangTestFactory.createBuilder().header(EingangHeaderTestFactory.createBuilder().formId(null).build()).build());
+
+			var hasEnabled = callProcessor(vorgangWithEmptyFormId);
+
+			assertThat(hasEnabled).isFalse();
+		}
+
+		private boolean callProcessor(VorgangWithEingang vorgang) {
+			return assembler.hasVorgangCreateBescheidDocumentEnabled(vorgang);
+		}
+
+		private VorgangWithEingang createVorgang(Eingang eingang) {
+			return VorgangWithEingangTestFactory.createBuilder().eingang(eingang).build();
+		}
+
+	}
+
+	@Nested
+	class TestCanCreateBescheidDocumentAutomatically {
+
+		private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create();
+
+		@Test
+		void shoulReturnTrueIfServiceConfigured() {
+			doReturn(true).when(assembler).hasVorgangCreateBescheidDocumentEnabled(vorgangWithEingang);
+			when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true);
+
+			var canCreate = assembler.canCreateBescheidDocumentAutomatically(vorgangWithEingang);
+
+			assertThat(canCreate).isTrue();
+		}
+
+		@Test
+		void shouldReturnFalseIfServiceNotConfigured() {
+			when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(false);
+
+			var canCreate = assembler.canCreateBescheidDocumentAutomatically(vorgangWithEingang);
+
+			assertThat(canCreate).isFalse();
+		}
+
+		@Test
+		void shouldTrueIfVorgangConfigured() {
+			doReturn(true).when(assembler).hasVorgangCreateBescheidDocumentEnabled(vorgangWithEingang);
+			when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true);
+
+			var canCreate = assembler.canCreateBescheidDocumentAutomatically(vorgangWithEingang);
+
+			assertThat(canCreate).isTrue();
+		}
+
+		@Test
+		void shouldReturnFalseIfVorgangNotConfigured() {
+			doReturn(false).when(assembler).hasVorgangCreateBescheidDocumentEnabled(vorgangWithEingang);
+			when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true);
+
+			var canCreate = assembler.canCreateBescheidDocumentAutomatically(vorgangWithEingang);
+
+			assertThat(canCreate).isFalse();
+		}
+	}
+
 }