diff --git a/esap/accounts/api/serializers.py b/esap/accounts/api/serializers.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..61995e373634d8ad6e36160544febf0b4ff5757d 100644
--- a/esap/accounts/api/serializers.py
+++ b/esap/accounts/api/serializers.py
@@ -0,0 +1,49 @@
+from rest_framework import serializers
+
+from ..models import *
+
+
+class EsapQuerySchemaSerializer(serializers.HyperlinkedModelSerializer):
+    class Meta:
+        model = EsapQuerySchema
+        fields = ["schema_name"]
+
+
+class EsapComputeResourceSerializer(serializers.HyperlinkedModelSerializer):
+    class Meta:
+        model = EsapComputeResource
+        fields = [
+            "resource_name",
+            "resource_type",
+            "resource_url",  # 'resource_metadata'
+        ]
+
+
+class EsapSoftwareRepositorySerializer(serializers.HyperlinkedModelSerializer):
+    class Meta:
+        model = EsapSoftwareRepository
+        fields = [
+            "repository_name",
+            "repository_type",
+            "repository_url",  #'repository_metadata'
+        ]
+
+
+class EsapShoppingItemSerializer(serializers.HyperlinkedModelSerializer):
+    class Meta:
+        model = EsapShoppingItem
+        fields = ["item_data"]
+
+
+class EsapUserProfileSerializer(serializers.HyperlinkedModelSerializer):
+    class Meta:
+        model = EsapUserProfile
+        fields = [
+            "user_name",
+            "full_name",
+            "user_email",
+            "query_schema",
+            "software_repositories",
+            "compute_resources",
+            "shopping_cart",
+        ]
diff --git a/esap/accounts/api/urls.py b/esap/accounts/api/urls.py
index 7eab22293e65ab75106a8118fc26d5211dce79fd..1145dd1baaafd67509000a6a6f884c58eb4ab6aa 100644
--- a/esap/accounts/api/urls.py
+++ b/esap/accounts/api/urls.py
@@ -1,9 +1,12 @@
-from django.urls import path
-from knox import views as knox_views
-from .views import LoginView
+from django.urls import include, path
+from rest_framework import routers
+from . import views
 
-urlpatterns = [
-    path(r'login/', LoginView.as_view(), name='knox_login'),
-    path(r'logout/', knox_views.LogoutView.as_view(), name='knox_logout'),
-    path(r'logoutall/', knox_views.LogoutAllView.as_view(), name='knox_logoutall'),
-]
\ No newline at end of file
+router = routers.DefaultRouter()
+router.register(r"query-schemas", views.EsapQuerySchemaViewSet)
+router.register(r"compute-resources", views.EsapComputeResourceViewSet)
+router.register(r"software-repositories", views.EsapSoftwareRepositoryViewSet)
+router.register(r"shopping-items", views.EsapShoppingItemViewSet)
+router.register(r"user-profiles", views.EsapUserProfileViewSet)
+
+urlpatterns = [path("", include(router.urls))]
diff --git a/esap/accounts/api/views.py b/esap/accounts/api/views.py
index 65ab8611f4e1feb1c9a26c8d47cc32e28fdbddf3..b25e4583c6e97c19683853da852c3f7fbaff48fe 100644
--- a/esap/accounts/api/views.py
+++ b/esap/accounts/api/views.py
@@ -1,15 +1,52 @@
-from django.contrib.auth import login
+from rest_framework import viewsets
+from .serializers import *
+from ..models import *
 
-from rest_framework import permissions
-from rest_framework.authtoken.serializers import AuthTokenSerializer
-from knox.views import LoginView as KnoxLoginView
 
-class LoginView(KnoxLoginView):
-    permission_classes = (permissions.AllowAny,)
+class EsapQuerySchemaViewSet(viewsets.ModelViewSet):
+    """
+    API endpoint that allows EsapQuerySchemas to be viewed or edited.
+    """
 
-    def post(self, request, format=None):
-        serializer = AuthTokenSerializer(data=request.data)
-        serializer.is_valid(raise_exception=True)
-        user = serializer.validated_data['user']
-        login(request, user)
-        return super(LoginView, self).post(request, format=None)
+    queryset = EsapQuerySchema.objects.all().order_by("schema_name")
+    serializer_class = EsapQuerySchemaSerializer
+
+
+class EsapComputeResourceViewSet(viewsets.ModelViewSet):
+    """
+    API endpoint that allows EsapComputeResources to be viewed or edited.
+    """
+
+    queryset = EsapComputeResource.objects.all().order_by("resource_name")
+    serializer_class = EsapComputeResourceSerializer
+
+
+class EsapSoftwareRepositoryViewSet(viewsets.ModelViewSet):
+    """
+    API endpoint that allows EsapSoftwareRepositorys to be viewed or edited.
+    """
+
+    queryset = EsapSoftwareRepository.objects.all().order_by("repository_name")
+    serializer_class = EsapSoftwareRepositorySerializer
+
+
+class EsapShoppingItemViewSet(viewsets.ModelViewSet):
+    """
+    API endpoint that allows EsapShoppingItems to be viewed or edited.
+    """
+
+    queryset = EsapShoppingItem.objects.all()
+    serializer_class = EsapShoppingItemSerializer
+
+
+class EsapUserProfileViewSet(viewsets.ModelViewSet):
+    """
+    API endpoint that allows EsapUserProfiles to be viewed or edited.
+    """
+
+    queryset = EsapUserProfile.objects.all().order_by("user_name")
+    serializer_class = EsapUserProfileSerializer
+
+    def get_queryset(self):
+        user_name = self.request.query_params.get("user_name", None)
+        return EsapUserProfile.objects.filter(user_name=user_name)
diff --git a/esap/accounts/database_router.py b/esap/accounts/database_router.py
index 41a96afed554bbdd17cc83937871b62f27859e8c..6366e1ecf40a40aa8a0c28c3154603c2bde8dd0d 100644
--- a/esap/accounts/database_router.py
+++ b/esap/accounts/database_router.py
@@ -13,19 +13,21 @@ class AccountsRouter:
         """
         Writes always go to accounts.
         """
-        return 'accounts'
+        if model._meta.app_label in self.route_app_labels:
+            return 'accounts'
+
 
     def allow_relation(self, obj1, obj2, **hints):
         """
-        Allow relations if a model in the accounts apps is
-        involved.
+        Allow relations if a both involved models are in the accounts
+        app.
         """
         if (
-            obj1._meta.app_label in self.route_app_labels or
-            obj2._meta.app_label in self.route_app_labels
+            obj1._state.db in self.route_app_labels and
+            obj2._state.db in self.route_app_labels
         ):
-           return True
-        return None
+            return True
+        return False
 
     def allow_migrate(self, db, app_label, model_name=None, **hints):
         """
@@ -34,4 +36,4 @@ class AccountsRouter:
         """
         if app_label in self.route_app_labels:
             return db == 'accounts'
-        return None
+        return False
diff --git a/esap/accounts/urls.py b/esap/accounts/urls.py
deleted file mode 100644
index a5254c8f57841133976faf891460067db5360b2d..0000000000000000000000000000000000000000
--- a/esap/accounts/urls.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.urls import path
-from django.contrib.auth.views import LoginView
-from django.contrib.auth.views import LogoutView
-
-urlpatterns = [
-    path('login/', LoginView.as_view(), name='django_login'),
-    path('logout/', LogoutView.as_view(), name='django_logout'),
-
-]
\ No newline at end of file
diff --git a/esap/accounts/views.py b/esap/accounts/views.py
deleted file mode 100644
index 91ea44a218fbd2f408430959283f0419c921093e..0000000000000000000000000000000000000000
--- a/esap/accounts/views.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.shortcuts import render
-
-# Create your views here.
diff --git a/esap/esap/settings/statics.py b/esap/esap/settings/statics.py
index 8504abe207693f5c0e51b04286cb611ce58531e8..5635e5de1add810dc84bbd7426e87051ebaec04a 100644
--- a/esap/esap/settings/statics.py
+++ b/esap/esap/settings/statics.py
@@ -15,6 +15,7 @@ DEBUG = False
 
 INSTALLED_APPS = [
     'query',
+    'accounts',
     'django.contrib.staticfiles',
 ]
 
@@ -23,4 +24,3 @@ INSTALLED_APPS = [
 
 STATIC_URL = '/static/'
 STATIC_ROOT = os.path.join(BASE_DIR, 'static')
-
diff --git a/esap/query/database_router.py b/esap/query/database_router.py
index 309667b332837a4e3e01c61932758da66d7e2b39..a975528a2b2627a1b02fbad69ef62b19f7711e0f 100644
--- a/esap/query/database_router.py
+++ b/esap/query/database_router.py
@@ -1,15 +1,15 @@
 class QueryRouter:
 
     route_app_labels = {'query', 'auth', 'contenttypes', 'sessions', 'admin'}
+    custom_router_app_labels = {'ida', 'rucio', 'accounts', 'staging'}
 
     def db_for_read(self, model, **hints):
-        if model._meta.app_label in self.route_app_labels:
-#            return 'query'
+        if model._meta.app_label not in self.custom_router_app_labels:
             return 'default'
 
     def db_for_write(self, model, **hints):
-#        return 'query'
-        return 'default'
+        if model._meta.app_label not in self.custom_router_app_labels:
+            return 'default'
 
     def allow_relation(self, obj1, obj2, **hints):
         """
@@ -29,6 +29,5 @@ class QueryRouter:
         'query' database.
         """
         if app_label in self.route_app_labels:
-#            return db == 'query'
             return db == 'default'
-        return None
\ No newline at end of file
+        return None