diff --git a/src/leap/soledad/server/_blobs.py b/src/leap/soledad/server/_blobs.py
index 8e9d9524e4af9ed52d3f133a24d10ed2a079fe2f..89c5927eaf7a2ef174a25734b58185451182d1de 100644
--- a/src/leap/soledad/server/_blobs.py
+++ b/src/leap/soledad/server/_blobs.py
@@ -85,16 +85,14 @@ class FilesystemBlobsBackend(object):
         _file = static.File(path, defaultType='application/octet-stream')
         return _file.render_GET(request)
 
-    def get_flags(self, user, blob_id, request, namespace=''):
+    def get_flags(self, user, blob_id, namespace=''):
         path = self._get_path(user, blob_id, namespace)
         if not os.path.isfile(path):
-            # 404 - Not Found
-            request.setResponseCode(404)
-            return "Blob doesn't exists: %s" % blob_id
+            raise BlobNotFound
         if not os.path.isfile(path + '.flags'):
-            return '[]'
+            return []
         with open(path + '.flags', 'r') as flags_file:
-            return flags_file.read()
+            return json.loads(flags_file.read())
 
     def set_flags(self, user, blob_id, request, namespace=''):
         path = self._get_path(user, blob_id, namespace)
@@ -286,16 +284,18 @@ class BlobsResource(resource.Resource):
                                             order_by=order, deleted=deleted,
                                             filter_flag=filter_flag)
         only_flags = request.args.get('only_flags', [False])[0]
-        if only_flags:
-            return self._handler.get_flags(user, blob_id, request, namespace)
         try:
+            if only_flags:
+                flags = self._handler.get_flags(user, blob_id, namespace)
+                return json.dumps(flags)
             tag = self._handler.get_tag(user, blob_id, namespace)
+            request.responseHeaders.setRawHeaders('Tag', [tag])
         except BlobNotFound:
             # 404 - Not Found
             request.setResponseCode(404)
             return "Blob doesn't exists: %s" % blob_id
-        request.responseHeaders.setRawHeaders('Tag', [tag])
-        return self._handler.read_blob(user, blob_id, request, namespace)
+        return self._handler.read_blob(user, blob_id, request,
+                                       namespace=namespace)
 
     def render_DELETE(self, request):
         logger.info("http put: %s" % request.path)
diff --git a/src/leap/soledad/server/interfaces.py b/src/leap/soledad/server/interfaces.py
index d19a0adcc23ebaf39ec913a21bb88b4bd3c76515..f9cc96c4a5c9ea2d977998c5e5dc8e2497eb4c17 100644
--- a/src/leap/soledad/server/interfaces.py
+++ b/src/leap/soledad/server/interfaces.py
@@ -167,7 +167,7 @@ class IBlobsBackend(Interface):
         :rtype: str
         """
 
-    def get_flags(user, blob_id, request, namespace=''):
+    def get_flags(user, blob_id, namespace=''):
         """
         Get the flags for a blob.
 
@@ -175,14 +175,11 @@ class IBlobsBackend(Interface):
         :type user: str
         :param blob_id: The id of the blob.
         :type blob_id: str
-        :param request: A representation of all of the information about the
-            request that is being made.
-        :type request: twisted.web.server.Request
         :param namespace: An optional namespace for the blob.
         :type namespace: str
 
-        :return: a JSON encoded string with a list of flags.
-        :rtype: str
+        :return: a list of flags.
+        :rtype: list of str
         """
 
     def set_flags(user, blob_id, request, namespace=''):
diff --git a/tests/server/test_incoming_server.py b/tests/server/test_incoming_server.py
index 8c22b13baeecb83a975de6b398d3813fafc331a1..42637c8704c4688822e2b242f250ba6bfecb9c5c 100644
--- a/tests/server/test_incoming_server.py
+++ b/tests/server/test_incoming_server.py
@@ -18,7 +18,6 @@
 Integration tests for incoming API
 """
 import pytest
-import json
 from io import BytesIO
 from uuid import uuid4
 from twisted.web.test.test_web import DummyRequest
@@ -86,8 +85,7 @@ class IncomingOnCouchServerTestCase(CouchDBTestCase):
         db = self.state.open_database(user_id)
         request = DummyRequest([user_id, doc_id])
         yield db.read_blob(user_id, doc_id, request, 'MX')
-        flags = db.get_flags(user_id, doc_id, request, 'MX')
-        flags = json.loads(flags)
+        flags = db.get_flags(user_id, doc_id, 'MX')
         expected_preamble = formatter.preamble(content, doc_id)
         expected_preamble = decode_preamble(expected_preamble, True)
         written_preamble, written_content = request.written[0].split()