diff --git a/gso/cli/imports.py b/gso/cli/imports.py
index f9dc660bd9b26058099954a9ed03aa583cf27846..0a41ac740ccd19cb64a1596994da5ec672eae4e3 100644
--- a/gso/cli/imports.py
+++ b/gso/cli/imports.py
@@ -218,7 +218,7 @@ def _generic_import_product(
         typer.echo(f"Creating imported {name_key}: {details[name_key]}")
         try:
             initial_data = import_model(**details)
-            start_process(f"create_imported_{workflow_suffix}", [initial_data.dict()])
+            start_process(f"create_imported_{workflow_suffix}", [initial_data.model_dump()])
             successfully_imported_data.append(getattr(initial_data, name_key))
             typer.echo(
                 f"Successfully created {name_key}: {getattr(initial_data, name_key)}",
@@ -341,7 +341,7 @@ def import_iptrunks(filepath: str = common_filepath_option) -> None:
                 iptrunk_ipv4_network=iptrunk_ipv4_network,
                 iptrunk_ipv6_network=iptrunk_ipv6_network,
             )
-            start_process("create_imported_iptrunk", [initial_data.dict()])
+            start_process("create_imported_iptrunk", [initial_data.model_dump()])
             successfully_imported_data.append(trunk["id"])
             typer.echo(f"Successfully imported IP Trunk: {trunk['id']}")
         except ValidationError as e:
diff --git a/gso/services/partners.py b/gso/services/partners.py
index f2080380e30773156af456daa080ae1e37f0a7bc..6c425bdad2432634d27780c85541bd9a02b94b7f 100644
--- a/gso/services/partners.py
+++ b/gso/services/partners.py
@@ -38,7 +38,7 @@ def create_partner(
     :return: JSON representation of the created partner.
     """
     try:
-        new_partner = PartnerTable(**partner_data.dict())
+        new_partner = PartnerTable(**partner_data.model_dump())
 
         db.session.add(new_partner)
         db.session.commit()
diff --git a/gso/workflows/iptrunk/activate_iptrunk.py b/gso/workflows/iptrunk/activate_iptrunk.py
index f229599f516df9ee59f09834be7de38800dc841c..4ec1dff03141debce5a1562fca55b189d5f8854e 100644
--- a/gso/workflows/iptrunk/activate_iptrunk.py
+++ b/gso/workflows/iptrunk/activate_iptrunk.py
@@ -20,7 +20,7 @@ def _initial_input_form(subscription_id: UUIDstr) -> FormGenerator:
 
     user_input = yield ActivateTrunkForm
 
-    return user_input.dict() | {"subscription": trunk}
+    return user_input.model_dump() | {"subscription": trunk}
 
 
 @inputstep("Verify checklist completion", assignee=Assignee.SYSTEM)
@@ -33,7 +33,7 @@ def verify_complete_checklist() -> FormGenerator:
 
     user_input = yield VerifyCompleteForm
 
-    return {"checklist_url": user_input.dict()["checklist_url"]}
+    return {"checklist_url": user_input.model_dump()["checklist_url"]}
 
 
 @workflow(
diff --git a/gso/workflows/iptrunk/create_imported_iptrunk.py b/gso/workflows/iptrunk/create_imported_iptrunk.py
index dd5ceed0eee93d5e44401a12b72f094ce77765f6..9b0e6b87a8a095073875721e79d72c9e03baa66d 100644
--- a/gso/workflows/iptrunk/create_imported_iptrunk.py
+++ b/gso/workflows/iptrunk/create_imported_iptrunk.py
@@ -66,7 +66,7 @@ def initial_input_form_generator() -> FormGenerator:
 
     initial_user_input = yield CreateIptrunkForm
 
-    return initial_user_input.dict()
+    return initial_user_input.model_dump()
 
 
 @step("Create a new subscription")
diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index ae5a143248d7c381cdfd37fbf80ab5bb0b1bcca9..1b543753100ed31bb464bd6e54078f634b0442ae 100644
--- a/gso/workflows/iptrunk/create_iptrunk.py
+++ b/gso/workflows/iptrunk/create_iptrunk.py
@@ -189,12 +189,12 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
     user_input_side_b = yield CreateIptrunkSideBForm
 
     return (
-        initial_user_input.dict()
-        | verify_minimum_links.dict()
-        | user_input_router_side_a.dict()
-        | user_input_side_a.dict()
-        | user_input_router_side_b.dict()
-        | user_input_side_b.dict()
+        initial_user_input.model_dump()
+        | verify_minimum_links.model_dump()
+        | user_input_router_side_a.model_dump()
+        | user_input_side_a.model_dump()
+        | user_input_router_side_b.model_dump()
+        | user_input_side_b.model_dump()
     )
 
 
diff --git a/gso/workflows/iptrunk/deploy_twamp.py b/gso/workflows/iptrunk/deploy_twamp.py
index 60e852cc0c88079782d5908ffaf2b98da76be18f..92e37fd5777105be180674296194ea24ae70cf8f 100644
--- a/gso/workflows/iptrunk/deploy_twamp.py
+++ b/gso/workflows/iptrunk/deploy_twamp.py
@@ -34,7 +34,7 @@ def _initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
 
     user_input = yield DeployTWAMPForm
 
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("[DRY RUN] Deploy TWAMP on both sides")
diff --git a/gso/workflows/iptrunk/migrate_iptrunk.py b/gso/workflows/iptrunk/migrate_iptrunk.py
index 913d78364087697b9d20b6df47ca7db5f28dcd03..908fcdbc1879b64e284914d6347c2ffa05640364 100644
--- a/gso/workflows/iptrunk/migrate_iptrunk.py
+++ b/gso/workflows/iptrunk/migrate_iptrunk.py
@@ -171,9 +171,9 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
 
     new_side_input = yield NewSideIPTrunkForm
     return (
-        migrate_form_input.dict()
-        | new_side_iptrunk_router_input.dict()
-        | new_side_input.dict()
+        migrate_form_input.model_dump()
+        | new_side_iptrunk_router_input.model_dump()
+        | new_side_input.model_dump()
         | {"replace_index": replace_index}
     )
 
diff --git a/gso/workflows/iptrunk/modify_isis_metric.py b/gso/workflows/iptrunk/modify_isis_metric.py
index ed38b1be9f137021367aa6e29149e2c82ab9b01a..2e4a4586430cf3698d900924737c352463ed3343 100644
--- a/gso/workflows/iptrunk/modify_isis_metric.py
+++ b/gso/workflows/iptrunk/modify_isis_metric.py
@@ -24,7 +24,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
 
     user_input = yield ModifyIptrunkForm
 
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("Update subscription")
diff --git a/gso/workflows/iptrunk/modify_trunk_interface.py b/gso/workflows/iptrunk/modify_trunk_interface.py
index b8f272a6106395ef4e784eba099bc1028c3faad6..d64331720fcb85cccc829f58d6d3d8b437e55b77 100644
--- a/gso/workflows/iptrunk/modify_trunk_interface.py
+++ b/gso/workflows/iptrunk/modify_trunk_interface.py
@@ -114,7 +114,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
         info_label2: Label = "Please confirm or modify."
 
     verify_minimum_links = yield VerifyMinimumLinksForm
-    ae_members_side_a = initialize_ae_members(subscription, initial_user_input.dict(), 0)
+    ae_members_side_a = initialize_ae_members(subscription, initial_user_input.model_dump(), 0)
 
     class ModifyIptrunkSideAForm(FormPage):
         model_config = ConfigDict(title="Provide subscription details for side A of the trunk.")
@@ -140,7 +140,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
             return validate_interface_name_list(side_a_ae_members, vendor)
 
     user_input_side_a = yield ModifyIptrunkSideAForm
-    ae_members_side_b = initialize_ae_members(subscription, initial_user_input.dict(), 1)
+    ae_members_side_b = initialize_ae_members(subscription, initial_user_input.model_dump(), 1)
 
     class ModifyIptrunkSideBForm(FormPage):
         model_config = ConfigDict(title="Provide subscription details for side B of the trunk.")
@@ -167,7 +167,12 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
 
     user_input_side_b = yield ModifyIptrunkSideBForm
 
-    return initial_user_input.dict() | user_input_side_a.dict() | user_input_side_b.dict() | verify_minimum_links.dict()
+    return (
+        initial_user_input.model_dump()
+        | user_input_side_a.model_dump()
+        | user_input_side_b.model_dump()
+        | verify_minimum_links.model_dump()
+    )
 
 
 @step("Update subscription")
diff --git a/gso/workflows/iptrunk/terminate_iptrunk.py b/gso/workflows/iptrunk/terminate_iptrunk.py
index 0c8a2726526b2619699aa4bb240cf25f10bc51be..bee9739a9732ea3db1415e8d7955886b9dcaa2bb 100644
--- a/gso/workflows/iptrunk/terminate_iptrunk.py
+++ b/gso/workflows/iptrunk/terminate_iptrunk.py
@@ -51,7 +51,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
             return validate_tt_number(tt_number)
 
     user_input = yield TerminateForm
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("[DRY RUN] Deprovision IP trunk")
diff --git a/gso/workflows/office_router/create_imported_office_router.py b/gso/workflows/office_router/create_imported_office_router.py
index c0abaebca2df730cbc45001349879e015ca0db6a..e82f69cbcb31ecc7eadfbd16c757232a3d47bb2a 100644
--- a/gso/workflows/office_router/create_imported_office_router.py
+++ b/gso/workflows/office_router/create_imported_office_router.py
@@ -44,7 +44,7 @@ def initial_input_form_generator() -> FormGenerator:
 
     user_input = yield ImportOfficeRouter
 
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("Initialize subscription")
diff --git a/gso/workflows/router/activate_router.py b/gso/workflows/router/activate_router.py
index d1efc7276bf7565bb0645d63dfd9ac359a1b65e8..751fc3568d8c18c59ded89815e2e02fdf53609b7 100644
--- a/gso/workflows/router/activate_router.py
+++ b/gso/workflows/router/activate_router.py
@@ -20,7 +20,7 @@ def _initial_input_form(subscription_id: UUIDstr) -> FormGenerator:
 
     user_input = yield ActivateRouterForm
 
-    return user_input.dict() | {"subscription": router}
+    return user_input.model_dump() | {"subscription": router}
 
 
 @inputstep("Verify checklist completion", assignee=Assignee.SYSTEM)
@@ -33,7 +33,7 @@ def verify_complete_checklist() -> FormGenerator:
 
     user_input = yield VerifyCompleteForm
 
-    return {"checklist_url": user_input.dict()["checklist_url"]}
+    return {"checklist_url": user_input.model_dump()["checklist_url"]}
 
 
 @workflow(
diff --git a/gso/workflows/router/create_imported_router.py b/gso/workflows/router/create_imported_router.py
index 68b23a2c2644aa647e797c78c8df11ea8a535283..c8ba442bc30bf8d26b563e83f35b7d4fb1573774 100644
--- a/gso/workflows/router/create_imported_router.py
+++ b/gso/workflows/router/create_imported_router.py
@@ -48,7 +48,7 @@ def initial_input_form_generator() -> FormGenerator:
 
     user_input = yield ImportRouter
 
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("Initialize subscription")
diff --git a/gso/workflows/router/create_router.py b/gso/workflows/router/create_router.py
index 3ef4a6881c4fd5ee3802092cd44e942257c82659..8382e227181233c145371f00aeb835ba91797f58 100644
--- a/gso/workflows/router/create_router.py
+++ b/gso/workflows/router/create_router.py
@@ -73,7 +73,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
 
     user_input = yield CreateRouterForm
 
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("Create subscription")
diff --git a/gso/workflows/router/modify_connection_strategy.py b/gso/workflows/router/modify_connection_strategy.py
index bff6fdc78cf17dea34c55fffcd9f108220b1500d..65b29b8d1b57851d925ffb89909c215e94889f06 100644
--- a/gso/workflows/router/modify_connection_strategy.py
+++ b/gso/workflows/router/modify_connection_strategy.py
@@ -27,7 +27,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
 
     user_input = yield ModifyConnectionStrategyForm
 
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("Update subscription model")
diff --git a/gso/workflows/router/redeploy_base_config.py b/gso/workflows/router/redeploy_base_config.py
index 7af29e25743b08b6ab2bfdf3f6c1676e70aa5005..c1a24c8340dc6c129fa99c1bb93be528bd85bd18 100644
--- a/gso/workflows/router/redeploy_base_config.py
+++ b/gso/workflows/router/redeploy_base_config.py
@@ -22,7 +22,7 @@ def _initial_input_form(subscription_id: UUIDstr) -> FormGenerator:
 
     user_input = yield RedeployBaseConfigForm
 
-    return user_input.dict() | {"subscription": router}
+    return user_input.model_dump() | {"subscription": router}
 
 
 @workflow(
diff --git a/gso/workflows/router/terminate_router.py b/gso/workflows/router/terminate_router.py
index 3409ab7267637047997efb85f9087ca672b57b48..b9e521da831dbcc091286c21cb2d67862b963074 100644
--- a/gso/workflows/router/terminate_router.py
+++ b/gso/workflows/router/terminate_router.py
@@ -44,7 +44,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
         remove_configuration: bool = True
 
     user_input = yield TerminateForm
-    return user_input.dict() | {"router_is_nokia": router.router.vendor == Vendor.NOKIA}
+    return user_input.model_dump() | {"router_is_nokia": router.router.vendor == Vendor.NOKIA}
 
 
 @step("Deprovision loopback IPs from IPAM")
diff --git a/gso/workflows/router/update_ibgp_mesh.py b/gso/workflows/router/update_ibgp_mesh.py
index ba8777bac1a3ab1ba44eb4e950721bf64e15e9e6..118eb2eecaaa18da37ad9e1200ff719ad30401d8 100644
--- a/gso/workflows/router/update_ibgp_mesh.py
+++ b/gso/workflows/router/update_ibgp_mesh.py
@@ -46,7 +46,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
 
     user_input = yield AddBGPSessionForm
 
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("Calculate list of all active PE routers")
diff --git a/gso/workflows/site/create_imported_site.py b/gso/workflows/site/create_imported_site.py
index 4aec97f7995d7e3e3d8811e3936e4b179cac4b49..1fd9d59d7aeddbb04faac6131a0cc68533a7b1d4 100644
--- a/gso/workflows/site/create_imported_site.py
+++ b/gso/workflows/site/create_imported_site.py
@@ -37,7 +37,7 @@ def generate_initial_input_form() -> FormGenerator:
         model_config = ConfigDict(title="Import Site")
 
     user_input = yield ImportSite
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("Initialize subscription")
diff --git a/gso/workflows/site/create_site.py b/gso/workflows/site/create_site.py
index 9def57b5bea9e858204c0b489db998d54470d4b9..d2e99d510e678a7f7e654de4cbee1a162868ed2f 100644
--- a/gso/workflows/site/create_site.py
+++ b/gso/workflows/site/create_site.py
@@ -25,7 +25,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
 
     user_input = yield CreateSiteForm
 
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("Create subscription")
diff --git a/gso/workflows/site/modify_site.py b/gso/workflows/site/modify_site.py
index 62a659ed1e4d4146e3d177a5b1594169249dd6f8..0fb2b50d3b54432138b2c15addfffddc39de4e66 100644
--- a/gso/workflows/site/modify_site.py
+++ b/gso/workflows/site/modify_site.py
@@ -60,7 +60,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
 
     user_input = yield ModifySiteForm
 
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("Modify subscription")
diff --git a/gso/workflows/site/terminate_site.py b/gso/workflows/site/terminate_site.py
index f6caec6a3ce4a5e0b8e7a023504dfc11ac5b8138..cd710752f92f54a99f376e3b7643eb7275985cbc 100644
--- a/gso/workflows/site/terminate_site.py
+++ b/gso/workflows/site/terminate_site.py
@@ -31,7 +31,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
         termination_label: Label = "Are you sure you want to delete this site?"
 
     user_input = yield TerminateForm
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @workflow(
diff --git a/gso/workflows/super_pop_switch/create_imported_super_pop_switch.py b/gso/workflows/super_pop_switch/create_imported_super_pop_switch.py
index 008fde911c7593450e7e71d3f76363f5cf80f04b..1cdb7d09d996baae8d1c186db35bfbf3fd27f676 100644
--- a/gso/workflows/super_pop_switch/create_imported_super_pop_switch.py
+++ b/gso/workflows/super_pop_switch/create_imported_super_pop_switch.py
@@ -44,7 +44,7 @@ def initial_input_form_generator() -> FormGenerator:
 
     user_input = yield ImportSuperPopSwitch
 
-    return user_input.dict()
+    return user_input.model_dump()
 
 
 @step("Initialize subscription")