diff --git a/api/bcd_request.py b/api/bcd_request.py
index 6065e797732c172682d5906b5e71d0a912a78f4a..462a7795ddc5d572f67b9cf139c1538da497fb38 100644
--- a/api/bcd_request.py
+++ b/api/bcd_request.py
@@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends, HTTPException
 from starlette import status
 
 from api import get_conn
-from model.bcd_request import BCDRequestModel, BCDProtectionRequirements, BCDSystemType
+from model.bcd_request import BCDRequestModel, BCDProtectionRequirements, BCDSystemType, IPAddressVersion
 from model.wapi.cntl import APIToken, Mgr
 from util.auth import check_auth
 
@@ -67,4 +67,104 @@ def validate_bcd_request(bcd_request: BCDRequestModel) -> bool:
             detail='Load balancers are not supported with level two protection requirements.'
         )
 
+    if len(bcd_request.bcd_name.strip()) == 0:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='BCD cannot be empty.'
+        )
+
+    if (bcd_request.type_of_system != BCDSystemType.SERVER and bcd_request.access_from_internet and
+            bcd_request.access_from_internet_note is None):
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='A detailed description must be provided for access from the internet onto non server networks.'
+        )
+    elif (bcd_request.type_of_system != BCDSystemType.SERVER and bcd_request.access_from_internet and
+          bcd_request.access_from_internet_note is not None and
+          len(bcd_request.access_from_internet_note.strip()) == 0):
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='A detailed description must be provided for access from the internet onto non server networks.'
+        )
+
+    if bcd_request.type_of_subnet == IPAddressVersion.DUAL_STACK and bcd_request.ipv4_subnet_size < 0:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='Invalid subnet size.'
+        )
+    elif bcd_request.type_of_subnet == IPAddressVersion.DUAL_STACK and bcd_request.ipv4_subnet_size > 32:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='Invalid subnet size.'
+        )
+    elif bcd_request.type_of_subnet == IPAddressVersion.DUAL_STACK and 29 < bcd_request.ipv4_subnet_size <= 32:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='No subnets smaller than /29 can be provided.'
+        )
+    elif bcd_request.type_of_subnet == IPAddressVersion.DUAL_STACK and bcd_request.ipv4_subnet_size < 24:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='No subnets larger than /24 can be provided.'
+        )
+    elif (bcd_request.type_of_subnet == IPAddressVersion.DUAL_STACK and bcd_request.ipv4_subnet_size == 24 and
+          bcd_request.ipv4_subnet_size_explanation is None):
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='A detailed description of the demand for a /24 subnet must be provided.'
+        )
+    elif (bcd_request.type_of_subnet == IPAddressVersion.DUAL_STACK and bcd_request.ipv4_subnet_size == 24 and
+          bcd_request.ipv4_subnet_size_explanation is not None and
+          len(bcd_request.ipv4_subnet_size_explanation.strip()) == 0):
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='A detailed description of the demand for a /24 subnet must be provided.'
+        )
+
+    if bcd_request.dhcp_pool and not bcd_request.dhcp:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='DHCP must be enabled to support the DHCP pool.'
+        )
+
+    if bcd_request.dhcp and bcd_request.dhcp_pool and bcd_request.dhcp_pool_size < 2:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='DHCP pools smaller than 2 devices are not offered.'
+        )
+    elif (bcd_request.dhcp and bcd_request.dhcp_pool and
+          bcd_request.dhcp_pool_size > 2**(32 - bcd_request.ipv4_subnet_size) - 5):
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='This subnet does not support this size of a DHCP pool.'
+        )
+
+    if bcd_request.dhcp and bcd_request.own_dhcp_server:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='The provided DHCP server cannot be used concurrently to your own DHCP server.'
+        )
+
+    if bcd_request.type_of_system == BCDSystemType.VPN_WIFI_ONLY and bcd_request.location_vpn_wifi_to_vlan is False:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='The VPN2vlan/Wifi2vlan client location must be selected for VPN2vlan/Wifi2vlan only system types.'
+        )
+
+    if bcd_request.location_vpn_wifi_to_vlan and bcd_request.vpn2vlan is False and bcd_request.wifi2vlan is False:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='At least VPN2vlan or Wifi2vlan must be enabled for the VPN2vlan/Wifi2vlan client location.'
+        )
+    elif bcd_request.wifi2vlan and bcd_request.location_vpn_wifi_to_vlan is False:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='The VPN2vlan/Wifi2vlan client location must be selected for Wifi2vlan.'
+        )
+    elif bcd_request.vpn2vlan and bcd_request.location_vpn_wifi_to_vlan is False:
+        raise HTTPException(
+            status_code=status.HTTP_400_BAD_REQUEST,
+            detail='The VPN2vlan/Wifi2vlan client location must be selected for VPN2vlan.'
+        )
+
     return True