diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index eefcd46cfe104bd05c6bf6601478216595571b58..8f24e333ffe00af3054459acf16ad8a5099a0f83 100644
--- a/gso/workflows/iptrunk/create_iptrunk.py
+++ b/gso/workflows/iptrunk/create_iptrunk.py
@@ -57,7 +57,11 @@ from gso.services.lso_client import LSOState, lso_interaction
 from gso.services.netbox_client import NetboxClient
 from gso.services.partners import get_partner_by_name
 from gso.services.sharepoint import SharePointClient
-from gso.services.subscriptions import get_non_terminated_iptrunk_subscriptions
+from gso.services.subscriptions import (
+    generate_unique_ga_id,
+    generate_unique_gs_id,
+    get_non_terminated_iptrunk_subscriptions,
+)
 from gso.settings import load_oss_params
 from gso.utils.helpers import (
     available_interfaces_choices,
@@ -86,7 +90,6 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
 
         tt_number: TTNumber
         partner: ReadOnlyField("GEANT", default_type=str)  # type: ignore[valid-type]
-        gs_id: str | None = None
         iptrunk_description: str | None = None
         iptrunk_type: IptrunkType
         iptrunk_speed: PhysicalPortCapacity
@@ -144,7 +147,6 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
         model_config = ConfigDict(title=f"Provide subscription details for side A of the trunk. ({router_a_fqdn})")
 
         side_a_ae_iface: available_lags_choices(router_a) or str  # type: ignore[valid-type]
-        side_a_ga_id: str | None
         side_a_ae_members: ae_members_side_a_type
 
     user_input_side_a = yield CreateIptrunkSideAForm
@@ -182,7 +184,6 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
         model_config = ConfigDict(title=f"Provide subscription details for side B of the trunk. ({router_b_fqdn})")
 
         side_b_ae_iface: available_lags_choices(router_b) or str  # type: ignore[valid-type]
-        side_b_ga_id: str | None
         side_b_ae_members: ae_members_side_b
 
     user_input_side_b = yield CreateIptrunkSideBForm
@@ -196,7 +197,6 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
     )
     summary_form_data = input_forms_data | {"side_a_node": router_a_fqdn, "side_b_node": router_b_fqdn}
     summary_fields = [
-        "gs_id",
         "iptrunk_type",
         "iptrunk_speed",
         "iptrunk_description",
@@ -204,11 +204,9 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
         "side_a_node",
         "side_a_ae_iface",
         "side_a_ae_members",
-        "side_a_ga_id",
         "side_b_node",
         "side_b_ae_iface",
         "side_b_ae_members",
-        "side_b_ga_id",
     ]
     yield from create_summary_form(summary_form_data, product_name, summary_fields)
 
@@ -322,24 +320,22 @@ def ping_all_hosts_v6(new_ipv6_network: str) -> State:
 @step("Initialize subscription")
 def initialize_subscription(
     subscription: IptrunkInactive,
-    gs_id: str | None,
     iptrunk_type: IptrunkType,
     iptrunk_description: str | None,
     iptrunk_speed: PhysicalPortCapacity,
     iptrunk_minimum_links: int,
     side_a_node_id: str,
     side_a_ae_iface: str,
-    side_a_ga_id: str | None,
     side_a_ae_members: list[dict],
     side_b_node_id: str,
     side_b_ae_iface: str,
-    side_b_ga_id: str | None,
     side_b_ae_members: list[dict],
 ) -> State:
     """Take all input from the user, and store it in the database."""
     oss_params = load_oss_params()
     side_a = Router.from_subscription(side_a_node_id).router
     side_b = Router.from_subscription(side_b_node_id).router
+    gs_id = generate_unique_gs_id()
     subscription.iptrunk.gs_id = gs_id
     subscription.iptrunk.iptrunk_description = iptrunk_description
     subscription.iptrunk.iptrunk_type = iptrunk_type
@@ -349,6 +345,7 @@ def initialize_subscription(
 
     subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node = side_a
     subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_iface = side_a_ae_iface
+    side_a_ga_id = generate_unique_ga_id()
     subscription.iptrunk.iptrunk_sides[0].ga_id = side_a_ga_id
     for member in side_a_ae_members:
         subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_members.append(
@@ -357,6 +354,7 @@ def initialize_subscription(
 
     subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node = side_b
     subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_iface = side_b_ae_iface
+    side_b_ga_id = generate_unique_ga_id()
     subscription.iptrunk.iptrunk_sides[1].ga_id = side_b_ga_id
     for member in side_b_ae_members:
         subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_members.append(
diff --git a/test/workflows/iptrunk/test_create_iptrunk.py b/test/workflows/iptrunk/test_create_iptrunk.py
index 17c37388c479ec5f7889dc1329248b81084d4908..a45f3bf1a97e5bff1a62c07102b16abc23403bb4 100644
--- a/test/workflows/iptrunk/test_create_iptrunk.py
+++ b/test/workflows/iptrunk/test_create_iptrunk.py
@@ -65,7 +65,6 @@ def input_form_wizard_data(request, router_subscription_factory, faker):
 
     create_ip_trunk_step = {
         "tt_number": faker.tt_number(),
-        "gs_id": faker.geant_sid(),
         "iptrunk_type": IptrunkType.DARK_FIBER,
         "iptrunk_description": faker.sentence(),
         "iptrunk_speed": PhysicalPortCapacity.HUNDRED_GIGABIT_PER_SECOND,
@@ -75,7 +74,6 @@ def input_form_wizard_data(request, router_subscription_factory, faker):
     create_ip_trunk_side_a_router_name = {"side_a_node_id": router_side_a}
     create_ip_trunk_side_a_step = {
         "side_a_ae_iface": "lag-1",
-        "side_a_ga_id": None,
         "side_a_ae_members": [
             {
                 "interface_name": f"Interface{interface}",
@@ -87,7 +85,6 @@ def input_form_wizard_data(request, router_subscription_factory, faker):
     create_ip_trunk_side_b_router_name = {"side_b_node_id": router_side_b}
     create_ip_trunk_side_b_step = {
         "side_b_ae_iface": "lag-4",
-        "side_b_ga_id": faker.geant_sid(),
         "side_b_ae_members": side_b_members,
     }
     summary_view_step = {}
@@ -153,8 +150,9 @@ def test_successful_iptrunk_creation_with_standard_lso_result(
         subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node.router_site.site_name,
     ])
     assert subscription.status == "provisioning"
+    assert subscription.iptrunk.gs_id is not None
     assert subscription.description == (
-        f"IP trunk {sorted_sides[0]} {sorted_sides[1]}, gs_id:{input_form_wizard_data[0]["gs_id"]}"
+        f"IP trunk {sorted_sides[0]} {sorted_sides[1]}, gs_id:{subscription.iptrunk.gs_id}"
     )
 
     assert mock_execute_playbook.call_count == 6