diff --git a/gso/services/provisioning_proxy.py b/gso/services/provisioning_proxy.py
index 7dc9c6f08bbd6bb5f007b081dcb003662338ade3..ea96507da8fe9dad6685029ee075473a2afcec5e 100644
--- a/gso/services/provisioning_proxy.py
+++ b/gso/services/provisioning_proxy.py
@@ -1,5 +1,7 @@
 import logging
 
+from orchestrator.types import UUIDstr
+
 from gso.products.product_blocks.device import DeviceBlockProvisioning
 from gso import settings
 import requests
@@ -11,13 +13,15 @@ logger = logging.getLogger(__name__)
 
 def provision_node(
         node_subscription_params: DeviceProvisioning,
-        callback_url: str,
+        process_id: UUIDstr,
         dry_run: bool = True):
     oss = settings.load_oss_params()
     pp_params = oss.PROVISIONING_PROXY
     assert pp_params
 
     device_params = node_subscription_params.device
+    callback_url = f'{settings.load_oss_params().GENERAL.public_hostname}' \
+                   f'/api/process/{process_id}/resume'  # TODO: verify this URL
     logger.debug(f'[disabled] provisioning node {device_params}')
 
     parameters = {
diff --git a/gso/workflows/device/create_device.py b/gso/workflows/device/create_device.py
index 1d39fcdbe0bd9d28054c681dccd5c887d2521e0c..51fced6409e1c7face78f305bfd2537a3758d349 100644
--- a/gso/workflows/device/create_device.py
+++ b/gso/workflows/device/create_device.py
@@ -3,20 +3,20 @@ from uuid import uuid4
 
 from orchestrator.config.assignee import Assignee
 from orchestrator.forms import FormPage
-from orchestrator.targets import Target
-from orchestrator.workflow import inputstep
 from orchestrator.forms.validators import Accept
+from orchestrator.targets import Target
 from orchestrator.types import FormGenerator, State
 from orchestrator.types import SubscriptionLifecycle, UUIDstr
 from orchestrator.workflow import done, init, step, workflow
+from orchestrator.workflow import inputstep
 from orchestrator.workflows.steps import resync, set_status
 from orchestrator.workflows.steps import store_process_subscription
 from orchestrator.workflows.utils import wrap_create_initial_input_form
 
 from gso import settings
-from gso.services import provisioning_proxy
 from gso.products.product_types.device import DeviceVendor, DeviceInactive, \
     DeviceProvisioning
+from gso.services import provisioning_proxy
 
 
 def initial_input_form_generator(product_name: str) -> FormGenerator:
@@ -34,32 +34,33 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
     return user_input.dict()
 
 
-@step("Create subscription")
+@step('Create subscription')
 def create_subscription(product: UUIDstr) -> State:
     subscription = DeviceInactive.from_product_id(product, uuid4())
 
     return {
-        "subscription": subscription,
-        "subscription_id": subscription.subscription_id,
+        'subscription': subscription,
+        'subscription_id': subscription.subscription_id,
     }
 
 
-@step("Get information from IPAM ")
+@step('Get information from IPAM')
 def get_info_from_ipam(subscription: DeviceInactive) -> State:
     # lo = ipam.new_device_lo_address()
     # subscription.device.lo_ipv4_address = lo.v4
     # subscription.device.lo_ipv6_address = lo.v6
     # TODO: get info about how these should be generated
-    subscription.device.lo_ipv4_address = "10.10.10.10"
-    subscription.device.lo_ipv6_address = "fc00:798:10::10"
-    subscription.device.lo_iso_address = "49.51e5.0001.0620.4009.6047.00"
-    subscription.device.si_ipv4_network = "192.168.0.0/31"
-    subscription.device.ias_lt_ipv4_network = "192.168.1.0/31"
-    subscription.device.ias_lt_ipv6_network = "fc00:798:1::150/126"
-    return {"subscription": subscription}
+    subscription.device.lo_ipv4_address = '10.10.10.10'
+    subscription.device.lo_ipv6_address = 'fc00:798:10::10'
+    subscription.device.lo_iso_address = '49.51e5.0001.0620.4009.6047.00'
+    subscription.device.si_ipv4_network = '192.168.0.0/31'
+    subscription.device.ias_lt_ipv4_network = '192.168.1.0/31'
+    subscription.device.ias_lt_ipv6_network = 'fc00:798:1::150/126'
 
+    return {'subscription': subscription}
 
-@step("get information about SNMP")
+
+@step('Get information about SNMP')
 def get_snmp_info(subscription: DeviceInactive) -> State:
     country = 'Spain'
     city = 'Barcelona'
@@ -75,64 +76,62 @@ def get_snmp_info(subscription: DeviceInactive) -> State:
         f'{city.upper()},{country.upper()}[{latitude},{longitude}]'
     )
 
-    return {"subscription": subscription}
+    return {'subscription': subscription}
 
 
-@step("Initialize subscription")
+@step('Initialize subscription')
 def initialize_subscription(
-    subscription: DeviceInactive,
-    fqdn: str,
-    ts_address: ipaddress.IPv4Address,
-    ts_port: str,
-    device_vendor: DeviceVendor
+        subscription: DeviceInactive,
+        fqdn: str,
+        ts_address: ipaddress.IPv4Address,
+        ts_port: str,
+        device_vendor: DeviceVendor
 ) -> State:
     subscription.device.fqdn = fqdn
     subscription.device.ts_address = str(ts_address)
     subscription.device.ts_port = str(ts_port)
     subscription.device_vendor = device_vendor
-    subscription.description = f"Device {fqdn} type \
-                                ({subscription.device_type})"
+    subscription.description = f'Device {fqdn} ' \
+                               f'({subscription.device_type})'
     subscription = DeviceProvisioning.from_other_lifecycle(
         subscription, SubscriptionLifecycle.PROVISIONING
     )
 
-    return {"subscription": subscription}
+    return {'subscription': subscription}
 
 
-@step("Provision device [DRY RUN]")
-def provision_device_dry(subscription: DeviceProvisioning) -> State:
-    # TODO: verify this URL
-    callback_url = f'{settings.load_oss_params().GENERAL.public_hostname}' \
-                   f'/api/process/{subscription.product.product_id}/resume'
+@step('Provision device [DRY RUN]')
+def provision_device_dry(subscription: DeviceProvisioning,
+                         process_id: UUIDstr) -> State:
 
     provisioning_proxy.provision_node(
         subscription,
-        callback_url
+        process_id
     )
 
     # import ansible_runner
     #
     # r = ansible_runner.run(
-    #     private_data_dir="/opt/geant-gap-ansible",
-    #     playbook="base_config.yaml",
+    #     private_data_dir='/opt/geant-gap-ansible',
+    #     playbook='base_config.yaml',
     #     inventory=subscription.device.fqdn,
     #     extravars={
-    #         "lo_ipv4_address": str(subscription.device.lo_ipv4_address),
-    #         "lo_ipv6_address": str(subscription.device.lo_ipv6_address),
-    #         "lo_iso_address": subscription.device.lo_iso_address,
-    #         "snmp_location": subscription.device.snmp_location,
-    #         "si_ipv4_network": str(subscription.device.si_ipv4_network),
-    #         "lt_ipv4_network": str(subscription.device.ias_lt_ipv4_network),
-    #         "lt_ipv6_network": str(subscription.device.ias_lt_ipv6_network),
-    #         "site_country_code": subscription.device.site_country_code,
-    #         "verb": "deploy",
+    #         'lo_ipv4_address': str(subscription.device.lo_ipv4_address),
+    #         'lo_ipv6_address': str(subscription.device.lo_ipv6_address),
+    #         'lo_iso_address': subscription.device.lo_iso_address,
+    #         'snmp_location': subscription.device.snmp_location,
+    #         'si_ipv4_network': str(subscription.device.si_ipv4_network),
+    #         'lt_ipv4_network': str(subscription.device.ias_lt_ipv4_network),
+    #         'lt_ipv6_network': str(subscription.device.ias_lt_ipv6_network),
+    #         'site_country_code': subscription.device.site_country_code,
+    #         'verb': 'deploy',
     #     },
     # )
     # out = r.stdout.read()
     # out_splitted = out.splitlines()
     # # if r.rc != 0:
-    # #    raise ValueError("Ansible has failed")
-    # return {"dry_run_output": out_splitted, "return_code": r.rc}
+    # #    raise ValueError('Ansible has failed')
+    # return {'dry_run_output': out_splitted, 'return_code': r.rc}
     # provisioning_proxy.provision_node(
     #     node_subscription_params=subscription,
     #     dry_run=True)
@@ -142,7 +141,7 @@ def provision_device_dry(subscription: DeviceProvisioning) -> State:
     return {'subscription': subscription}
 
 
-@inputstep("Confirm step", assignee=Assignee('SYSTEM'))
+@inputstep('Verify dry run results', assignee=Assignee('SYSTEM'))
 def confirm_step(subscription: DeviceProvisioning) -> State:
     class ConfirmForm(FormPage):
         confirm: Accept
@@ -152,51 +151,49 @@ def confirm_step(subscription: DeviceProvisioning) -> State:
     return {'subscription': subscription, 'confirm': user_input}
 
 
-@step("Provision device [FOR REAL]")
-def provision_device_real(subscription: DeviceProvisioning) -> State:
-
-    # TODO: generate actual callback URL
-    callback_url = settings.load_oss_params().GENERAL.public_hostname
+@step('Provision device [FOR REAL]')
+def provision_device_real(subscription: DeviceProvisioning,
+                          process_id: UUIDstr) -> State:
 
     provisioning_proxy.provision_node(
         subscription,
-        callback_url,
+        process_id,
         False
     )
 
     # import ansible_runner
     #
     # r = ansible_runner.run(
-    #     private_data_dir="/opt/geant-gap-ansible",
-    #     playbook="base_config.yaml",
+    #     private_data_dir='/opt/geant-gap-ansible',
+    #     playbook='base_config.yaml',
     #     inventory=subscription.device.fqdn,
     #     extravars={
-    #         "lo_ipv4_address": str(subscription.device.lo_ipv4_address),
-    #         "lo_ipv6_address": str(subscription.device.lo_ipv6_address),
-    #         "lo_iso_address": subscription.device.lo_iso_address,
-    #         "snmp_location": subscription.device.snmp_location,
-    #         "si_ipv4_network": str(subscription.device.si_ipv4_network),
-    #         "lt_ipv4_network": str(subscription.device.ias_lt_ipv4_network),
-    #         "lt_ipv6_network": str(subscription.device.ias_lt_ipv6_network),
-    #         "site_country_code": subscription.device.site_country_code,
-    #         "verb": "deploy",
+    #         'lo_ipv4_address': str(subscription.device.lo_ipv4_address),
+    #         'lo_ipv6_address': str(subscription.device.lo_ipv6_address),
+    #         'lo_iso_address': subscription.device.lo_iso_address,
+    #         'snmp_location': subscription.device.snmp_location,
+    #         'si_ipv4_network': str(subscription.device.si_ipv4_network),
+    #         'lt_ipv4_network': str(subscription.device.ias_lt_ipv4_network),
+    #         'lt_ipv6_network': str(subscription.device.ias_lt_ipv6_network),
+    #         'site_country_code': subscription.device.site_country_code,
+    #         'verb': 'deploy',
     #     },
     # )
     # out = r.stdout.read()
     # out_splitted = out.splitlines()
     #
-    # return {"real_run_output": out_splitted, "return_code": r.rc}
+    # return {'real_run_output': out_splitted, 'return_code': r.rc}
     # provisioning_proxy.provision_node(
     #    node_subscription_params=subscription)
     # TODO: figure out what to return when we are suspending & waiting
     #       for the provisioning-proxy to call back
-    return {"subscription": subscription}
+    return {'subscription': subscription}
 
 
 @workflow(
-    "Create Device",
+    'Create Device',
     initial_input_form=wrap_create_initial_input_form(
-                       initial_input_form_generator),
+        initial_input_form_generator),
     target=Target.CREATE,
 )
 def create_device():