diff --git a/api.py b/api.py
index e62758b072db59306aeb149e4392343b0cca1bdd..ff82c0448cdbeb7368f10a34e129afde7cbd1450 100644
--- a/api.py
+++ b/api.py
@@ -22,6 +22,14 @@ def read_root():
 def read_root(par1=None, par2=None):
     return {'success': True, 'params': {'par1': par1, 'par2': par2}}
 
+@app.get('/paths')
+def list_session_paths():
+    pass
+
+@app.put('/paths/{path_id}')
+def set_path_id(path_id: str, abs_path: str):
+    pass
+
 @app.get('/restart')
 def restart_session() -> dict:
     session.restart()
diff --git a/conf/defaults.py b/conf/defaults.py
new file mode 100644
index 0000000000000000000000000000000000000000..c1761b7a6712bcb6a8213c4672348401c8cf8cc8
--- /dev/null
+++ b/conf/defaults.py
@@ -0,0 +1,14 @@
+from pathlib import Path
+
+root = Path('c:/Users/rhodes/projects/proj0015-model-server/resources')
+paths = {
+    'logs': root / 'logs' / 'session',
+    'inbound_images': root / 'images' / 'inbound',
+    'outbound_images': root / 'images' / 'outbound',
+    'ilastik_projects': root / 'ilastik',
+}
+
+for gk in paths.keys():
+    paths[gk].mkdir(parents=True, exist_ok=True)
+
+# TODO: consider configuring paths via API, and this just becomes a HTTP client script
\ No newline at end of file
diff --git a/conf/server.py b/conf/server.py
deleted file mode 100644
index 707b60ac28f42e4a0e02a22bb93802ec5f4b7b23..0000000000000000000000000000000000000000
--- a/conf/server.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from pathlib import Path
-
-root = Path('c:/Users/rhodes/projects/proj0015-model-server/resources')
-paths = {
-    'logs': {
-        'session': root / 'logs' / 'session',
-    },
-    'images': {
-        'inbound': root / 'images' / 'inbound',
-        'outbound': root / 'images' / 'outbound',
-    },
-    'ilastik': {
-        'projects': root / 'ilastik'
-    }
-}
-
-for gk in paths.keys():
-    for pk in paths[gk].keys():
-        paths[gk][pk].mkdir(parents=True, exist_ok=True)
-
-# TODO: consider configuring paths via API, and this just becomes a HTTP client script
\ No newline at end of file
diff --git a/model_server/ilastik.py b/model_server/ilastik.py
index 54419f78195024c4b4d31e6229f77dec5118ac6a..c4b876dee2aa0a2aa29e31df87e0d0e92f3d528c 100644
--- a/model_server/ilastik.py
+++ b/model_server/ilastik.py
@@ -4,7 +4,7 @@ import pathlib
 import numpy as np
 import vigra
 
-import conf.server
+import conf.defaults
 from model_server.image import GenericImageDataAccessor, InMemoryDataAccessor
 from model_server.model import ImageToImageModel, ParameterExpectedError
 
@@ -14,7 +14,7 @@ class IlastikImageToImageModel(ImageToImageModel):
     def __init__(self, params, autoload=True):
         self.project_file = str(params['project_file'])
         self.project_file_abspath = pathlib.Path(
-            conf.server.paths['ilastik']['projects'] / self.project_file,
+            conf.defaults.paths['ilastik_projects'] / self.project_file,
         )
         if 'project_file' not in params or not self.project_file_abspath.exists():
             raise ParameterExpectedError('Ilastik model expects a project (*.ilp) file')
diff --git a/model_server/session.py b/model_server/session.py
index 1a9b38b9d3cf01c6f24ec5a5af3bf9818e2f47f6..989fc1b3f0d1297ebfcd9a4ffdccf802f5050d79 100644
--- a/model_server/session.py
+++ b/model_server/session.py
@@ -5,7 +5,7 @@ from pathlib import Path
 from time import strftime, localtime
 from typing import Dict
 
-from conf.server import paths
+from conf.defaults import paths
 from model_server.model import Model
 from model_server.share import SharedImageDirectory
 from model_server.workflow import WorkflowRunRecord
@@ -17,9 +17,9 @@ class Session(object):
     """
     Singleton class for a server session that persists data between API calls
     """
-    inbound = SharedImageDirectory(paths['images']['inbound'])
-    outbound = SharedImageDirectory(paths['images']['outbound'])
-    where_records = Path(paths['logs']['session'])
+    inbound = SharedImageDirectory(paths['inbound_images'])
+    outbound = SharedImageDirectory(paths['outbound_images'])
+    where_records = paths['logs']
 
     def __new__(cls):
         if not hasattr(cls, 'instance'):
diff --git a/tests/test_api.py b/tests/test_api.py
index b7835ffd2e5b7f4e24834d690c6223d9f21b1791..8c6c248bdecb847943b668ca755cab57b223bdc7 100644
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -22,11 +22,10 @@ class TestServerBaseClass(unittest.TestCase):
 
     @staticmethod
     def copy_input_file_to_server():
-        import pathlib
         from shutil import copyfile
-        from conf.server import paths
+        from conf.defaults import paths
 
-        outpath = pathlib.Path(paths['images']['inbound'] / czifile['filename'])
+        outpath = paths['inbound_images'] / czifile['filename']
 
         copyfile(
             czifile['path'],
@@ -47,6 +46,12 @@ class TestApiFromAutomatedClient(TestServerBaseClass):
         self.assertEqual(resp.json()['params']['par1'], 'hello', resp.json())
         self.assertEqual(resp.json()['params']['par2'], None, resp.json())
 
+    def test_default_session_paths(self):
+        import conf.defaults
+        resp = requests.get(self.uri + 'paths')
+        for p in ['inbound', 'outbound', 'logs']:
+            self.assertEqual(resp.json()['paths'][p], conf.defaults.paths[p])
+
     def test_list_empty_loaded_models(self):
         resp = requests.get(self.uri + 'models')
         self.assertEqual(resp.status_code, 200)
diff --git a/tests/test_ilastik.py b/tests/test_ilastik.py
index 204ad2375dab90ce2bffe57baab2c11625312163..fba595e144f497d02dc15e5663d32e987f317c4c 100644
--- a/tests/test_ilastik.py
+++ b/tests/test_ilastik.py
@@ -6,7 +6,6 @@ import numpy as np
 import conf.testing
 from model_server.image import CziImageFileAccessor, InMemoryDataAccessor, write_accessor_data_to_file
 from model_server.ilastik import IlastikObjectClassifierModel, IlastikPixelClassifierModel
-from model_server.model import Model
 from model_server.workflow import infer_image_to_image
 from tests.test_api import TestServerBaseClass