diff --git a/opentech/apply/api/v1/permissions.py b/opentech/apply/api/v1/permissions.py
index 3a623b13adac2e9fe126ec88a3ef869aabb900dc..c8769166655a2898844116ba0bbc724296e10578 100644
--- a/opentech/apply/api/v1/permissions.py
+++ b/opentech/apply/api/v1/permissions.py
@@ -16,21 +16,3 @@ class IsApplyStaffUser(permissions.BasePermission):
 
     def has_object_permission(self, request, view, obj):
         return request.user.is_apply_staff
-
-
-def is_user_has_access_to_view_submission(user, submission):
-    has_access = False
-
-    if not user.is_authenticated:
-        pass
-
-    elif user.is_apply_staff or submission.user == user or user.is_reviewer:
-        has_access = True
-
-    elif user.is_partner and submission.partners.filter(pk=user.pk).exists():
-        has_access = True
-
-    elif user.is_community_reviewer and submission.community_review:
-        has_access = True
-
-    return has_access
diff --git a/opentech/apply/api/v1/serializers.py b/opentech/apply/api/v1/serializers.py
index bc2f7e1e0b24fd57cfdc3315fe19c88d9d1e7377..87886264cba6e9a2baf82ad024aa77cb4317c65e 100644
--- a/opentech/apply/api/v1/serializers.py
+++ b/opentech/apply/api/v1/serializers.py
@@ -11,7 +11,6 @@ from opentech.apply.funds.models import ApplicationSubmission, RoundsAndLabs
 from opentech.apply.review.models import Review, ReviewOpinion
 from opentech.apply.review.options import RECOMMENDATION_CHOICES
 from opentech.apply.users.groups import PARTNER_GROUP_NAME, STAFF_GROUP_NAME
-from .models import ApplicationSubmission, RoundsAndLabs
 
 User = get_user_model()
 
@@ -202,7 +201,7 @@ class RoundLabSerializer(serializers.ModelSerializer):
 class CommentSerializer(serializers.ModelSerializer):
     user = serializers.StringRelatedField()
     message = serializers.SerializerMethodField()
-    edit_url = serializers.HyperlinkedIdentityField(view_name='funds:api:comments:edit')
+    edit_url = serializers.HyperlinkedIdentityField(view_name='api:v1:comments:edit')
     editable = serializers.SerializerMethodField()
     timestamp = TimestampField(read_only=True)
     edited = TimestampField(read_only=True)
@@ -220,7 +219,7 @@ class CommentSerializer(serializers.ModelSerializer):
 
 class CommentCreateSerializer(serializers.ModelSerializer):
     user = serializers.StringRelatedField()
-    edit_url = serializers.HyperlinkedIdentityField(view_name='funds:api:comments:edit')
+    edit_url = serializers.HyperlinkedIdentityField(view_name='api:v1:comments:edit')
     editable = serializers.SerializerMethodField()
     timestamp = TimestampField(read_only=True)
     edited = TimestampField(read_only=True)
diff --git a/opentech/apply/api/v1/tests/__init__.py b/opentech/apply/api/v1/tests/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/opentech/apply/api/v1/tests/test_serializers.py b/opentech/apply/api/v1/tests/test_serializers.py
new file mode 100644
index 0000000000000000000000000000000000000000..0f5ea6c76ff9eb09c4c6778029ae144de119aa5c
--- /dev/null
+++ b/opentech/apply/api/v1/tests/test_serializers.py
@@ -0,0 +1,28 @@
+from django.test import override_settings, TestCase
+
+from opentech.apply.funds.tests.factories import ApplicationSubmissionFactory
+from opentech.apply.review.tests.factories import ReviewFactory
+
+from ..serializers import ReviewSummarySerializer
+
+
+@override_settings(ROOT_URLCONF='opentech.apply.urls')
+class TestReviewSummarySerializer(TestCase):
+    def test_handles_no_reviews(self):
+        submission = ApplicationSubmissionFactory()
+        data = ReviewSummarySerializer(submission).data
+        self.assertEqual(data['count'], 0)
+        self.assertEqual(data['score'], None)
+        self.assertEqual(data['recommendation'], {'value': -1, 'display': None})
+        self.assertEqual(data['assigned'], [])
+        self.assertEqual(data['reviews'], [])
+
+    def test_handles_negative_reviews(self):
+        submission = ApplicationSubmissionFactory()
+        ReviewFactory(submission=submission)
+        data = ReviewSummarySerializer(submission).data
+        self.assertEqual(data['count'], 1)
+        self.assertEqual(data['score'], 0)
+        self.assertEqual(data['recommendation'], {'value': 0, 'display': 'No'})
+        self.assertEqual(len(data['assigned']), 1)
+        self.assertEqual(len(data['reviews']), 1)
diff --git a/opentech/apply/funds/tests/test_api_views.py b/opentech/apply/api/v1/tests/test_views.py
similarity index 94%
rename from opentech/apply/funds/tests/test_api_views.py
rename to opentech/apply/api/v1/tests/test_views.py
index 10083d15fcff039ab2481dd6f427513e56016aeb..38858d56a1871638c5fca7a0b80ad2ee3046b981 100644
--- a/opentech/apply/funds/tests/test_api_views.py
+++ b/opentech/apply/api/v1/tests/test_views.py
@@ -11,7 +11,7 @@ from opentech.apply.users.tests.factories import UserFactory
 class TestCommentEdit(TestCase):
     def post_to_edit(self, comment_pk, message='my message'):
         return self.client.post(
-            reverse_lazy('funds:api:comments:edit', kwargs={'pk': comment_pk}),
+            reverse_lazy('api:v1:comments:edit', kwargs={'pk': comment_pk}),
             secure=True,
             data={'message': message},
         )
@@ -59,7 +59,7 @@ class TestCommentEdit(TestCase):
         self.client.force_login(user)
 
         response = self.client.post(
-            reverse_lazy('funds:api:comments:edit', kwargs={'pk': comment.pk}),
+            reverse_lazy('api:v1:comments:edit', kwargs={'pk': comment.pk}),
             secure=True,
             data={
                 'message': 'the new message',
diff --git a/opentech/apply/api/v1/urls.py b/opentech/apply/api/v1/urls.py
index d1996f19ca456d1dcb84d2a3b6f1b2a438bb03d3..df7f62c6de314c09b97f47534f16ad12ea6e9768 100644
--- a/opentech/apply/api/v1/urls.py
+++ b/opentech/apply/api/v1/urls.py
@@ -1,6 +1,7 @@
 from django.urls import include, path
 
 from .views import (
+    CommentEdit,
     CommentList,
     CommentListCreate,
     RoundLabDetail,
@@ -25,5 +26,6 @@ urlpatterns = [
     ], 'rounds'))),
     path('comments/', include(([
         path('', CommentList.as_view(), name='list'),
+        path('<int:pk>/edit/', CommentEdit.as_view(), name='edit'),
     ], 'comments')))
 ]
diff --git a/opentech/apply/api/v1/views.py b/opentech/apply/api/v1/views.py
index 5bcf532dab1dab76e49693d68591cd530a51e9f8..1953515fdbdb6b1e9c1cdac9421d52dc310be9cf 100644
--- a/opentech/apply/api/v1/views.py
+++ b/opentech/apply/api/v1/views.py
@@ -22,7 +22,7 @@ from opentech.apply.review.models import Review
 from opentech.apply.funds.models import FundType, LabType
 
 from .pagination import StandardResultsSetPagination
-from .permissions import IsApplyStaffUser
+from .permissions import IsApplyStaffUser, IsAuthor
 from .serializers import (
     CommentSerializer,
     CommentCreateSerializer,
@@ -33,8 +33,6 @@ from .serializers import (
     SubmissionListSerializer,
     SubmissionDetailSerializer,
 )
-from .permissions import IsApplyStaffUser, IsAuthor
-from .workflow import PHASES
 
 
 class RoundLabFilter(filters.ModelChoiceFilter):
diff --git a/opentech/apply/funds/permissions.py b/opentech/apply/funds/permissions.py
new file mode 100644
index 0000000000000000000000000000000000000000..816e1cf0b13c236f9d2f070f4cee7eaf4027cb4b
--- /dev/null
+++ b/opentech/apply/funds/permissions.py
@@ -0,0 +1,16 @@
+def is_user_has_access_to_view_submission(user, submission):
+    has_access = False
+
+    if not user.is_authenticated:
+        pass
+
+    elif user.is_apply_staff or submission.user == user or user.is_reviewer:
+        has_access = True
+
+    elif user.is_partner and submission.partners.filter(pk=user.pk).exists():
+        has_access = True
+
+    elif user.is_community_reviewer and submission.community_review:
+        has_access = True
+
+    return has_access
diff --git a/opentech/apply/funds/urls.py b/opentech/apply/funds/urls.py
index d23951716fdde872d409577af00fc19be8c41292..677f98cfd5ea2ca74e1fab2aa5741b30be33af0d 100644
--- a/opentech/apply/funds/urls.py
+++ b/opentech/apply/funds/urls.py
@@ -20,16 +20,6 @@ from .views import (
     SubmissionUserFlaggedView,
     SubmissionStaffFlaggedView,
 )
-from .api_views import (
-    CommentEdit,
-    CommentList,
-    CommentListCreate,
-    RoundLabDetail,
-    RoundLabList,
-    SubmissionAction,
-    SubmissionList,
-    SubmissionDetail,
-)
 
 
 revision_urls = ([
@@ -68,23 +58,6 @@ submission_urls = ([
     path('<slug:status>/', SubmissionsByStatus.as_view(), name='status'),
 ], 'submissions')
 
-api_urls = ([
-    path('submissions/', include(([
-        path('', SubmissionList.as_view(), name='list'),
-        path('<int:pk>/', SubmissionDetail.as_view(), name='detail'),
-        path('<int:pk>/actions/', SubmissionAction.as_view(), name='actions'),
-        path('<int:pk>/comments/', CommentListCreate.as_view(), name='comments'),
-    ], 'submissions'))),
-    path('rounds/', include(([
-        path('', RoundLabList.as_view(), name='list'),
-        path('<int:pk>/', RoundLabDetail.as_view(), name='detail'),
-    ], 'rounds'))),
-    path('comments/', include(([
-        path('', CommentList.as_view(), name='list'),
-        path('<int:pk>/edit/', CommentEdit.as_view(), name='edit'),
-    ], 'comments')))
-], 'api')
-
 rounds_urls = ([
     path('', RoundListView.as_view(), name="list"),
     path('<int:pk>/', SubmissionsByRound.as_view(), name="detail"),