diff --git a/IPython/html/terminal/__init__.py b/IPython/html/terminal/__init__.py
index fc78db3..3837d95 100644
--- a/IPython/html/terminal/__init__.py
+++ b/IPython/html/terminal/__init__.py
@@ -1,6 +1,7 @@
import os
from terminado import NamedTermManager
from .handlers import TerminalHandler, NewTerminalHandler, TermSocket
+from . import api_handlers
def initialize(webapp):
shell = os.environ.get('SHELL', 'sh')
@@ -10,5 +11,7 @@ def initialize(webapp):
(r"/terminals/(\w+)", TerminalHandler),
(r"/terminals/websocket/(\w+)", TermSocket,
{'term_manager': webapp.terminal_manager}),
+ (r"/api/terminals", api_handlers.TerminalRootHandler),
+ (r"/api/terminals/(\w+)", api_handlers.TerminalHandler),
]
webapp.add_handlers(".*$", handlers)
\ No newline at end of file
diff --git a/IPython/html/terminal/api_handlers.py b/IPython/html/terminal/api_handlers.py
new file mode 100644
index 0000000..90fcd22
--- /dev/null
+++ b/IPython/html/terminal/api_handlers.py
@@ -0,0 +1,35 @@
+import json
+from tornado import web
+from ..base.handlers import IPythonHandler, json_errors
+
+class TerminalRootHandler(IPythonHandler):
+ @web.authenticated
+ @json_errors
+ def get(self):
+ tm = self.application.terminal_manager
+ terms = [{'name': name} for name in tm.terminals]
+ self.finish(json.dumps(terms))
+
+class TerminalHandler(IPythonHandler):
+ SUPPORTED_METHODS = ('GET', 'DELETE')
+
+ @web.authenticated
+ @json_errors
+ def get(self, name):
+ tm = self.application.terminal_manager
+ if name in tm.terminals:
+ self.finish(json.dumps({'name': name}))
+ else:
+ raise web.HTTPError(404, "Terminal not found: %r" % name)
+
+ @web.authenticated
+ @json_errors
+ def delete(self, name):
+ tm = self.application.terminal_manager
+ if name in tm.terminals:
+ tm.kill(name)
+ # XXX: Should this wait for terminal to finish before returning?
+ self.set_status(204)
+ self.finish()
+ else:
+ raise web.HTTPError(404, "Terminal not found: %r" % name)
\ No newline at end of file