diff --git a/gracedb/permission_utils.py b/gracedb/permission_utils.py
index 50097cdecaf016670dd81c1828eb01509d14f6c6..439ff0ac516e3134f8bafbb653541dea4cf3867b 100644
--- a/gracedb/permission_utils.py
+++ b/gracedb/permission_utils.py
@@ -124,6 +124,16 @@ def is_external(user):
     else:
         return True
 
+#-------------------------------------------------------------------------------
+# A utility for determining whether a user is accessing the API through the
+# basic auth entry point.
+#-------------------------------------------------------------------------------
+def is_basicapi_request(request):
+   if request.path.startswith("/apibasic/"):
+       return True
+   else:
+       return False
+
 #-------------------------------------------------------------------------------
 # A utility for determining whether an external user should have access to a 
 # particular file, given the event and filename. This is done by finding the
diff --git a/gracedb/view_utils.py b/gracedb/view_utils.py
index 796133e81e99ac5b7b44b30cf8c75b3ecc4ae04e..5d52bdc748bc7eaca4242df9e57146259add7b0a 100644
--- a/gracedb/view_utils.py
+++ b/gracedb/view_utils.py
@@ -26,6 +26,9 @@ MAX_FLEXI_ROWS = 250
 
 GRACEDB_DATA_DIR = settings.GRACEDB_DATA_DIR
 
+import logging
+log = logging.getLogger(__name__)
+
 import json
 import pytz
 
@@ -153,7 +156,7 @@ def eventToDict(event, columns=None, request=None):
           for labelling in event.labelling_set.all()])
     # XXX Try to produce a dictionary of analysis specific attributes.  Duck typing.
     # XXX These extra attributes should only be seen by internal users.
-    if request and request.user and not is_external(request.user):
+    if request and request.user and not is_external(request.user): 
         rv['extra_attributes'] = {}
         try:
             # GrbEvent
@@ -302,14 +305,19 @@ def eventToDict(event, columns=None, request=None):
         si_set = event.singleinspiral_set.all()
         if si_set.count():
             rv['extra_attributes']['SingleInspiral'] = [ singleInspiralToDict(si) for si in si_set ]
-    elif request and request.user and is_external(request.user):
-        # Expose SingleInspiral times only for external users.
-        ext_keys = ['ifo','end_time','end_time_ns']
-        si_set = event.singleinspiral_set.all()
-        if si_set.count():
-            SingleInspiral_list = [ singleInspiralToDict(si) for si in si_set ]
-            for i, si in enumerate(SingleInspiral_list):
-                rv['extra_attributes']['SingleInspiral'] = { k: si[k] for k in ext_keys }
+    elif (request and request.user) and (is_external(request.user)):
+        try:
+            rv['extra_attributes'] = {}
+            # Only expose SingleInspiral times and ifos for external users.
+            ext_keys = ['ifo','end_time','end_time_ns']
+            si_set = event.singleinspiral_set.all()
+            if si_set.count():
+                SingleInspiral_list = [ singleInspiralToDict(si) for si in si_set ]
+                rv['extra_attributes']['SingleInspiral'] = []
+                for i, si in enumerate(SingleInspiral_list):
+                    rv['extra_attributes']['SingleInspiral'].append({ k: si[k] for k in ext_keys })
+        except:
+            pass
 
     rv['links'] = {
           "neighbors" : reverse("neighbors", args=[graceid], request=request),