diff --git a/src/leap/soledad/server/_blobs.py b/src/leap/soledad/server/_blobs.py
index 9d1c9b1eaf1e99d8de2adb69acd2f22dbd2ec4e3..5fe9c1b70dd529e8d6a460d2123dbed46c943c95 100644
--- a/src/leap/soledad/server/_blobs.py
+++ b/src/leap/soledad/server/_blobs.py
@@ -101,11 +101,12 @@ class FilesystemBlobsBackend(object):
     def get_flags(self, user, blob_id, namespace=''):
         path = self._get_path(user, blob_id, namespace)
         if not os.path.isfile(path):
-            raise BlobNotFound
+            return defer.fail(BlobNotFound)
         if not os.path.isfile(path + '.flags'):
-            return []
+            return defer.succeed([])
         with open(path + '.flags', 'r') as flags_file:
-            return json.loads(flags_file.read())
+            flags = json.loads(flags_file.read())
+            return defer.succeed(flags)
 
     def set_flags(self, user, blob_id, flags, namespace=''):
         path = self._get_path(user, blob_id, namespace)
@@ -298,8 +299,11 @@ class BlobsResource(resource.Resource):
         only_flags = request.args.get('only_flags', [False])[0]
         try:
             if only_flags:
-                flags = self._handler.get_flags(user, blob_id, namespace)
-                return json.dumps(flags)
+                d = self._handler.get_flags(user, blob_id, namespace)
+                d.addCallback(lambda flags: json.dumps(flags))
+                d.addCallback(lambda flags: request.write(flags))
+                d.addCallback(lambda _: request.finish())
+                return NOT_DONE_YET
             tag = self._handler.get_tag(user, blob_id, namespace)
             request.responseHeaders.setRawHeaders('Tag', [tag])
         except BlobNotFound:
diff --git a/src/leap/soledad/server/interfaces.py b/src/leap/soledad/server/interfaces.py
index ecea0bf85bcd7387c95eb49fa6e45be59e066659..bd804573d388c19b9e51945eec32d17e14adff1c 100644
--- a/src/leap/soledad/server/interfaces.py
+++ b/src/leap/soledad/server/interfaces.py
@@ -173,8 +173,8 @@ class IBlobsBackend(Interface):
         :param namespace: An optional namespace for the blob.
         :type namespace: str
 
-        :return: a list of flags.
-        :rtype: list of str
+        :return: A deferred that fires with the list of flags for a blob.
+        :rtype: twisted.internet.defer.Deferred
         """
 
     def set_flags(user, blob_id, flags, namespace=''):