diff --git a/maubot/management/api/client.py b/maubot/management/api/client.py
new file mode 100644
index 0000000..a7ec14e
--- /dev/null
+++ b/maubot/management/api/client.py
@@ -0,0 +1,39 @@
+# maubot - A plugin-based Matrix bot system.
+# Copyright (C) 2018 Tulir Asokan
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+from aiohttp import web
+
+from .base import routes
+from .responses import ErrNotImplemented
+
+
+@routes.get("/clients")
+def get_clients(request: web.Request) -> web.Response:
+ return ErrNotImplemented
+
+
+@routes.get("/client/{id}")
+def get_client(request: web.Request) -> web.Response:
+ return ErrNotImplemented
+
+
+@routes.put("/client/{id}")
+def update_client(request: web.Request) -> web.Response:
+ return ErrNotImplemented
+
+
+@routes.delete("/client/{id}")
+def delete_client(request: web.Request) -> web.Response:
+ return ErrNotImplemented
diff --git a/maubot/management/api/instance.py b/maubot/management/api/instance.py
new file mode 100644
index 0000000..8baa9f9
--- /dev/null
+++ b/maubot/management/api/instance.py
@@ -0,0 +1,39 @@
+# maubot - A plugin-based Matrix bot system.
+# Copyright (C) 2018 Tulir Asokan
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+from aiohttp import web
+
+from .base import routes
+from .responses import ErrNotImplemented
+
+
+@routes.get("/instances")
+def get_instances(request: web.Request) -> web.Response:
+ return ErrNotImplemented
+
+
+@routes.get("/instance/{id}")
+def get_instance(request: web.Request) -> web.Response:
+ return ErrNotImplemented
+
+
+@routes.put("/instance/{id}")
+def update_instance(request: web.Request) -> web.Response:
+ return ErrNotImplemented
+
+
+@routes.delete("/instance/{id}")
+def delete_instance(request: web.Request) -> web.Response:
+ return ErrNotImplemented