   @loadTranslators()
   @extensionConflicts()
 
-  # monkey-patch Zotero.Server.DataListener.prototype._headerFinished for async handling of web-translation requests
-  Zotero.Server.DataListener::_headerFinished = ((original) ->
-    return ->
+  # monkey-patch Zotero.Server.DataListener.prototype._requestFinished for async handling of web api translation requests
+  Zotero.Server.DataListener::_requestFinished = ((original) ->
+    return (method, postData) ->
       try
-        return if Zotero.BetterBibTeX.DataListener_headerFinished.apply(@, arguments)
+        return if Zotero.BetterBibTeX.DataListener_requestFinished.apply(@, arguments)
       return original.apply(@, arguments)
-    )(Zotero.Server.DataListener::_headerFinished)
-
+    )(Zotero.Server.DataListener::_processEndpoint)
 
   # monkey-patch Zotero.Search.prototype.save to trigger auto-exports
   Zotero.Search::save = ((original) ->

      loader.loadSubScript("chrome://zotero-better-bibtex/content/test/include.js")
      @Test.run(tests.trim().split(/\s+/))

Zotero.BetterBibTeX.DataListener_headerFinished = ->
  return false unless Zotero.isServer

  header = @header.split(/\r?\n/)


  endpoint = Zotero.Server.Endpoints[path]
  return false unless endpoint?.async
  return false unless method in (endpoint.supportedMethods || [])

  headers = {}
  for line in header
