diff --git a/gso/products/product_blocks/iptrunk.py b/gso/products/product_blocks/iptrunk.py
index 52d28ebf47c8bb507374b65b990e2520115d7f90..787648b269ae3329eb38194219f914b29007befa 100644
--- a/gso/products/product_blocks/iptrunk.py
+++ b/gso/products/product_blocks/iptrunk.py
@@ -20,6 +20,24 @@ class IptrunkType(strEnum):
 T = TypeVar("T", covariant=True)
 
 
+class IptrunkInterfaceBlockInactive(
+    ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="IptrunkInterfaceBlock"
+):
+    #  TODO: add validation for interface names, making the type a constrained string
+    interface_name: str | None = None
+    interface_description: str | None = None
+
+
+class IptrunkInterfaceBlockProvisioning(IptrunkInterfaceBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
+    interface_name: str
+    interface_description: str
+
+
+class IptrunkInterfaceBlock(IptrunkInterfaceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
+    interface_name: str
+    interface_description: str
+
+
 class IptrunkSides(UniqueConstrainedList[T]):  # type: ignore[type-var]
     min_items = 2
     max_items = 2
@@ -31,24 +49,21 @@ class IptrunkSideBlockInactive(
     iptrunk_side_node: RouterBlockInactive
     iptrunk_side_ae_iface: str | None = None
     iptrunk_side_ae_geant_a_sid: str | None = None
-    iptrunk_side_ae_members: list[str] = Field(default_factory=list)
-    iptrunk_side_ae_members_description: list[str] = Field(default_factory=list)
+    iptrunk_side_ae_members: list[IptrunkInterfaceBlockInactive] = Field(default_factory=list)
 
 
 class IptrunkSideBlockProvisioning(IptrunkSideBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
     iptrunk_side_node: RouterBlockProvisioning
     iptrunk_side_ae_iface: str | None = None
     iptrunk_side_ae_geant_a_sid: str | None = None
-    iptrunk_side_ae_members: list[str] = Field(default_factory=list)
-    iptrunk_side_ae_members_description: list[str] = Field(default_factory=list)
+    iptrunk_side_ae_members: list[IptrunkInterfaceBlockProvisioning] = Field(default_factory=list)
 
 
 class IptrunkSideBlock(IptrunkSideBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
     iptrunk_side_node: RouterBlock
     iptrunk_side_ae_iface: str | None = None
     iptrunk_side_ae_geant_a_sid: str | None = None
-    iptrunk_side_ae_members: list[str] = Field(default_factory=list)
-    iptrunk_side_ae_members_description: list[str] = Field(default_factory=list)
+    iptrunk_side_ae_members: list[IptrunkInterfaceBlock] = Field(default_factory=list)
 
 
 class IptrunkBlockInactive(