diff --git a/main.py b/main.py
index 9c5912c..d394c4e 100755
--- a/main.py
+++ b/main.py
@@ -47,7 +47,8 @@
     internal_host_address=os.environ.get('INTERNAL_HOST_ADDRESS',
                                          get_my_primary_local_ipv4()),
     rest_port=os.environ.get('REST_PORT', 8881),
-    work_dir=os.environ.get('WORK_DIR', '/tmp/chameleon')
+    work_dir=os.environ.get('WORK_DIR', '/tmp/chameleon'),
+    swagger_url=os.environ.get('SWAGGER_URL', '/'),
 )
 
 
@@ -159,6 +160,14 @@
                         default=False,
                         help=_help)
 
+    _help = ('override swagger url (default=%s)'
+             % defs['swagger_url'])
+    parser.add_argument('-S', '--swagger-url',
+                        dest='swagger_url',
+                        action='store',
+                        default=defs['swagger_url'],
+                        help=_help)
+
     args = parser.parse_args()
 
     # post-processing
@@ -227,7 +236,7 @@
             self.grpc_client = yield \
                 GrpcClient(args.consul, args.work_dir, args.grpc_endpoint)
             self.rest_server = yield \
-                WebServer(args.rest_port, args.work_dir, self.grpc_client).start()
+                WebServer(args.rest_port, args.work_dir, args.swagger_url, self.grpc_client).start()
             self.grpc_client.set_reconnect_callback(
                 self.rest_server.reload_generated_routes).start()
             self.log.info('started-internal-services')
diff --git a/web_server/web_server.py b/web_server/web_server.py
index 5cd5c7a..7676b42 100644
--- a/web_server/web_server.py
+++ b/web_server/web_server.py
@@ -37,11 +37,12 @@
 
     app = Klein()
 
-    def __init__(self, port, work_dir, grpc_client):
+    def __init__(self, port, work_dir, swagger_url, grpc_client):
         self.port = port
         self.site = None
         self.work_dir = work_dir
         self.grpc_client = grpc_client
+        self.swagger_url = swagger_url
 
         self.swagger_ui_root_dir = os.path.abspath(
             os.path.join(os.path.dirname(__file__), '../swagger_ui'))
@@ -49,6 +50,26 @@
         self.tcp_port = None
         self.shutting_down = False
 
+        self.add_swagger_routes(self.app, swagger_url)
+
+    def add_swagger_routes(self, app, swagger_url):
+        log.info('Publishing swagger docs at %s' % swagger_url)
+
+        @app.route(swagger_url + '/', branch=True)
+        def static(self, request):
+            try:
+                log.debug(request=request)
+                return File(self.swagger_ui_root_dir)
+            except Exception, e:
+                log.exception('file-not-found', request=request)
+
+        @app.route(swagger_url + '/v1/swagger.json')
+        def swagger_json(self, request):
+            try:
+                return File(os.path.join(self.work_dir, 'swagger.json'))
+            except Exception, e:
+                log.exception('file-not-found', request=request)
+
     @inlineCallbacks
     def start(self):
         log.debug('starting')
@@ -82,25 +103,6 @@
                 m.add_routes(self.app, self.grpc_client)
                 log.info('routes-loaded', module=module_name)
 
-    # static swagger_ui website as landing page (for now)
-
-    @app.route('/', branch=True)
-    def static(self, request):
-        try:
-            log.debug(request=request)
-            return File(self.swagger_ui_root_dir)
-        except Exception, e:
-            log.exception('file-not-found', request=request)
-
-    # static swagger.json file to serve the schema
-
-    @app.route('/v1/swagger.json')
-    def swagger_json(self, request):
-        try:
-            return File(os.path.join(self.work_dir, 'swagger.json'))
-        except Exception, e:
-            log.exception('file-not-found', request=request)
-
     @app.handle_errors(grpc._channel._Rendezvous)
     def grpc_exception(self, request, failure):
         code = failure.value.code()
