diff --git a/resource_management/router_interfaces.py b/resource_management/router_interfaces.py
index 5ef8d6c16ca43c67a92d721f91faaa55bef70347..c92d22f10310f59e2e9fbbb6dafe72201a6d3d7e 100644
--- a/resource_management/router_interfaces.py
+++ b/resource_management/router_interfaces.py
@@ -29,8 +29,8 @@ def load_new_router_interfaces(fqdn: str):
             _inverted_aggregate_map[pn] = lag_name
 
     def _interface_availability(ifc_name):
-        if physical[ifc_name]['oper']:
-            return model.AvalabilityStates.USED.name
+        #if physical[ifc_name]['oper']:
+            #return model.AvalabilityStates.USED.name
         if ifc_name in _inverted_aggregate_map:
             return model.AvalabilityStates.USED.name
         if ifc_name in logical:
diff --git a/resource_management/routes/interfaces.py b/resource_management/routes/interfaces.py
index 019b8be12bc9296b3dbd5914cd2f7dfa8ebbded6..4dffe80563414be3e3b0f41d77166d28e9eb13ce 100644
--- a/resource_management/routes/interfaces.py
+++ b/resource_management/routes/interfaces.py
@@ -26,6 +26,11 @@ class InterfacesSummary(pydantic.BaseModel):
     physical: InterfaceCounts
 
 
+class AvailablePhysicalInterfaces(pydantic.BaseModel):
+    fqdn: str
+    names: List[str]
+
+
 class NextLAG(pydantic.BaseModel):
     fqdn: str
     name: str
@@ -65,7 +70,7 @@ async def load_new_router_interfaces(fqdn: str) -> InterfacesSummary:
         router = session.query(model.Router).filter_by(fqdn=fqdn).one()
         num_lags = len(router.lags)
         num_physical = len(router.physical)
-        num_available_physical = sum(1 for p in router.physical if p.lag)
+        num_available_physical = sum(1 for ifc in router.physical if ifc.availability == model.AvalabilityStates.AVAILABLE.name)
 
     return {
         'fqdn': fqdn,
@@ -95,6 +100,30 @@ async def get_known_routers() -> ListOfRouters:
         return {'routers': [{'fqdn': r[0]} for r in rows]}
 
 
+@router.get('/physical-interfaces')
+async def get_physical_interfaces(fqdn: str) -> AvailablePhysicalInterfaces:
+
+    params = config.load()
+    db.init_db_model(params['db'])
+
+    with db.session_scope() as session:
+        router = session.query(model.Router).filter_by(fqdn=fqdn).one()
+
+        def _find_available_physical():
+            ifaces = [iface.name for iface in router.physical if iface.availability == model.AvalabilityStates.AVAILABLE.name]
+            if ifaces:
+                return ifaces
+
+            raise HTTPException(
+                status_code=404,
+                detail=f'no available physical ports in "{fqdn}"')
+
+        return {
+            'fqdn': fqdn,
+            'names': _find_available_physical()
+        }
+
+
 @router.post('/next-lag/{fqdn}')
 async def reserve_next_lag(fqdn: str) -> NextLAG:
     """
@@ -137,7 +166,7 @@ async def reserve_next_lag(fqdn: str) -> NextLAG:
 async def reserve_physical_bundle_member(
         fqdn: str, lag_name: str) -> NextPhysicalInterface:
     """
-    compute the next available lag name for the given router
+    compute the next available physical interface name for the given router
 
     TODO: _find_available_physical is a placeholder for
         whatever logic turns out to be right (e.g. speeds, etc)