diff --git a/gso/migrations/versions/2024-11-27_28c1723c6a00_add_vrf_workflows.py b/gso/migrations/versions/2024-11-27_28c1723c6a00_add_vrf_workflows.py
index 1457aecfc92aee9e2857172a557045b232835312..0ffb5ef16deec69643724f131de60cef9831a38b 100644
--- a/gso/migrations/versions/2024-11-27_28c1723c6a00_add_vrf_workflows.py
+++ b/gso/migrations/versions/2024-11-27_28c1723c6a00_add_vrf_workflows.py
@@ -29,6 +29,12 @@ new_workflows = [
         "target": "MODIFY",
         "description": "Modify VRF router list",
         "product_type": "VRF"
+    },
+{
+        "name": "terminate_vrf",
+        "target": "TERMINATE",
+        "description": "Terminate a VRF subscription",
+        "product_type": "VRF"
     }
 ]
 
diff --git a/gso/workflows/__init__.py b/gso/workflows/__init__.py
index bbbed754f857cdbdc168f20c6782bcde309824e9..2c75fb1149f48b22dd7ab37f4ff19d70feb3b5fe 100644
--- a/gso/workflows/__init__.py
+++ b/gso/workflows/__init__.py
@@ -133,3 +133,4 @@ LazyWorkflowInstance("gso.workflows.l2_circuit.import_layer_2_circuit", "import_
 # VRF workflows
 LazyWorkflowInstance("gso.workflows.vrf.create_vrf", "create_vrf")
 LazyWorkflowInstance("gso.workflows.vrf.modify_vrf_router_list", "modify_vrf_router_list")
+LazyWorkflowInstance("gso.workflows.vrf.terminate_vrf", "terminate_vrf")
diff --git a/gso/workflows/vrf/terminate_vrf.py b/gso/workflows/vrf/terminate_vrf.py
new file mode 100644
index 0000000000000000000000000000000000000000..cafcb28a613251a727a338f2744871bb409b6df5
--- /dev/null
+++ b/gso/workflows/vrf/terminate_vrf.py
@@ -0,0 +1,56 @@
+"""A workflow for terminating a VRF subscription."""
+from typing import Any
+
+from orchestrator.forms import FormPage
+from orchestrator.forms.validators import Label
+from orchestrator.targets import Target
+from orchestrator.types import FormGenerator, SubscriptionLifecycle, UUIDstr
+from orchestrator.workflow import StepList, begin, done, workflow
+from orchestrator.workflows.steps import (
+    resync,
+    set_status,
+    store_process_subscription,
+    unsync,
+)
+from orchestrator.workflows.utils import wrap_modify_initial_input_form
+from pydantic import model_validator
+
+from gso.products.product_types.vrf import VRF
+from gso.utils.types.tt_number import TTNumber
+
+
+def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
+    """Ask the user for confirmation whether to terminate the selected VRF."""
+    vrf_subscription = VRF.from_subscription(subscription_id)
+
+    class TerminateForm(FormPage):
+        termination_label: Label = f"Are you sure you want to delete {vrf_subscription.vrf.vrf_name} VRF?"
+        tt_number: TTNumber
+
+        @model_validator(mode="before")
+        def vrf_must_have_empty_router_list(cls, data: Any) -> Any:
+            if vrf_subscription.vrf.vrf_router_list:
+                msg = ("VRF must not have any routers assigned to it before it can be deleted. Please remove all"
+                       " routers from the VRF first.")
+                raise ValueError(msg)
+            return data
+
+    user_input = yield TerminateForm
+    return user_input.model_dump()
+
+
+@workflow(
+    "Terminate VRF",
+    initial_input_form=wrap_modify_initial_input_form(initial_input_form_generator),
+    target=Target.TERMINATE,
+)
+def terminate_vrf() -> StepList:
+    """Terminate a VRF subscription."""
+    return (
+        begin
+        >> store_process_subscription(Target.TERMINATE)
+        >> unsync
+        >> set_status(SubscriptionLifecycle.TERMINATED)
+        >> resync
+        >> done
+    )