diff --git a/gso/migrations/versions/2025-06-02_f16525338855_add_commertial_peers_ix_port_private_.py b/gso/migrations/versions/2025-06-02_f16525338855_add_commertial_peers_ix_port_private_.py
new file mode 100644
index 0000000000000000000000000000000000000000..23bfb0b8a4f8d4c04788ab7f40fa724f633f5301
--- /dev/null
+++ b/gso/migrations/versions/2025-06-02_f16525338855_add_commertial_peers_ix_port_private_.py
@@ -0,0 +1,39 @@
+"""Add Commertial peers, IX port, private peer port and transit proivder port WFs.
+
+Revision ID: f16525338855
+Revises: fb88e4914b47
+Create Date: 2025-06-02 11:36:48.053232
+
+"""
+import sqlalchemy as sa
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = 'f16525338855'
+down_revision = 'fb88e4914b47'
+branch_labels = None
+depends_on = None
+
+
+from orchestrator.migrations.helpers import create_workflow, delete_workflow
+
+new_workflows = [
+    {
+        "name": "create_ix_port",
+        "target": "CREATE",
+        "description": "Create IX Port Service",
+        "product_type": "IXPort"
+    }
+]
+
+
+def upgrade() -> None:
+    conn = op.get_bind()
+    for workflow in new_workflows:
+        create_workflow(conn, workflow)
+
+
+def downgrade() -> None:
+    conn = op.get_bind()
+    for workflow in new_workflows:
+        delete_workflow(conn, workflow["name"])
diff --git a/gso/products/product_blocks/l3_interface_port.py b/gso/products/product_blocks/l3_interface_port.py
index 8712c47201a59fcc08f9762a907f59d397ba58df..4b391451272054dcb3b459a14292b5e84b29ba64 100644
--- a/gso/products/product_blocks/l3_interface_port.py
+++ b/gso/products/product_blocks/l3_interface_port.py
@@ -22,11 +22,11 @@ class L3InterfacePortBlockInactive(
     ipv4_mask: IPv4Netmask | None = None
     ipv6_address: IPv6AddressType | None = None
     ipv6_mask: IPv6Netmask | None = None
-    custom_firewall_filters: bool
-    gs_id: str
-    edge_port: EdgePortBlockInactive
-    v4_bfd_settings: BFDSettings
-    v6_bfd_settings: BFDSettings
+    custom_firewall_filters: bool | None = None
+    gs_id: str | None = None
+    edge_port: EdgePortBlockInactive | None = None
+    v4_bfd_settings: BFDSettings | None = None
+    v6_bfd_settings: BFDSettings | None = None
 
 
 class L3InterfacePortBlockProvisioning(
diff --git a/gso/workflows/ix_port/__init__.py b/gso/workflows/ix_port/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..85bbeef0438bfd6fb761f2db260c994cbfd8bd5b
--- /dev/null
+++ b/gso/workflows/ix_port/__init__.py
@@ -0,0 +1 @@
+"""All workflows that can be executed on IX Port."""
diff --git a/gso/workflows/ix_port/create_ix_port.py b/gso/workflows/ix_port/create_ix_port.py
index d5fbccd39a921ebd24b71abe7fcaacfaf7a52885..b30e1f68065a57ca154305a120d1e1752d6c13e3 100644
--- a/gso/workflows/ix_port/create_ix_port.py
+++ b/gso/workflows/ix_port/create_ix_port.py
@@ -8,7 +8,7 @@ from orchestrator.types import SubscriptionLifecycle
 from orchestrator.workflow import StepList, begin, done
 from orchestrator.workflows.steps import resync, set_status, store_process_subscription
 from orchestrator.workflows.utils import wrap_create_initial_input_form
-from pydantic import ConfigDict, Field
+from pydantic import ConfigDict, Field, BaseModel
 from pydantic_forms.types import FormGenerator, State, UUIDstr
 from pydantic_forms.validators import Divider
 
@@ -35,6 +35,13 @@ def initial_input_generator(product_name: str) -> FormGenerator:
         partner: partner_choice()
     initial_user_input = yield InitialIXPortForm
 
+    class BFDSettingsForm(BaseModel):
+        bfd_enabled: bool = False
+        bfd_interval_rx: int | None = Field(default=None, examples=["BFD RX defaults"])
+        bfd_interval_tx: int | None = None
+        bfd_multiplier: int | None = None
+
+
     class ConfigureIXPortForm(SubmitFormPage):
         model_config = ConfigDict(title=f"{product_name} - Configure IX Port")
 
@@ -51,8 +58,8 @@ def initial_input_generator(product_name: str) -> FormGenerator:
         ipv6_mask: IPv6Netmask | None = None
         custom_firewall_filters: bool = False
         divider2: Divider = Field(None, exclude=True)
-        v4_bfd_settings: BFDSettings
-        v6_bfd_settings: BFDSettings
+        v4_bfd_settings: BFDSettingsForm
+        v6_bfd_settings: BFDSettingsForm
 
     config_input = yield ConfigureIXPortForm
 
@@ -78,8 +85,8 @@ def initialize_subscription(
         ipv6_address: IPv6AddressType | None,
         ipv6_mask: IPv6Netmask | None,
         custom_firewall_filters: bool,
-        v4_bfd_settings: BFDSettings,
-        v6_bfd_settings: BFDSettings,
+        v4_bfd_settings: dict,
+        v6_bfd_settings: dict,
 ) -> State:
     """Initialize the IXPort subscription object."""
 
@@ -94,8 +101,8 @@ def initialize_subscription(
         ipv6_address=ipv6_address,
         ipv6_mask=ipv6_mask,
         custom_firewall_filters=custom_firewall_filters,
-        v4_bfd_settings=v4_bfd_settings,
-        v6_bfd_settings=v6_bfd_settings,
+        v4_bfd_settings=BFDSettings.new(subscription_id=uuid4(), **(v4_bfd_settings)),
+        v6_bfd_settings=BFDSettings.new(subscription_id=uuid4(), **(v6_bfd_settings)),
     )
 
     subscription = IXPort.from_other_lifecycle(subscription, SubscriptionLifecycle.PROVISIONING)